태그 보관물: database-design

database-design

SSD가 데이터베이스의 유용성을 줄입니까 이유의 기본은 증발하고 있습니다.” O(n)시간 을 찾는

나는 오늘 Robert Martin에 대해서만 들었고 소프트웨어 세계에서 주목할만한 인물 인 것 같습니다. 따라서 제목이 클릭 미끼이거나 입에 단어를 넣는 것처럼 보이지는 않습니다. 그러나 이것은 단순히 제한된 경험과 이해로 그에게서들은 것을 어떻게 해석했는지

나는 오늘 (소프트웨어 아키텍처에 관한) 비디오 , Robert C. Martin의 연설 에서 비디오를 보고 있었고, 비디오 의 후반에는 데이터베이스의 주제가 주요 초점이었습니다.

그가 말한 것에 대한 나의 이해에서 SSD는 데이터베이스의 유용성을 상당히 떨어 뜨릴 것이라고 말한 것 같습니다 .

이 해석에 어떻게 도달했는지 설명하려면 :

그는 HDD / 스피닝 디스크를 사용하여 데이터 검색 속도가 느린 방법에 대해 논의했습니다. 그러나 요즘에는 SSD를 사용하고 있다고 그는 지적했다. “RAM is coming”으로 시작한 다음 RAM 디스크를 언급하면서 계속하지만 RAM 디스크라고 부를 수 없으므로 RAM이라고 말하면됩니다. 따라서 RAM의 경우 모든 바이트를 가져 오는 데 동일한 시간이 걸리므로 인덱스가 필요하지 않습니다. ( 이 단락은 나에 의해 해석됩니다 )

그래서 그는 (컴퓨터 메모리에서와 같이) DB를 대체하는 것으로 RAM을 제안합니다 (그의 진술을 해석 한대로)는 모든 레코드가 응용 프로그램의 수명 기간 동안 메모리 내에서 처리된다고 말하는 것과 같기 때문에 ( 필요에 따라 디스크 파일을 가져 오지 않는 한)

그래서 저는 RAM에 의한 사고에 의지했습니다. 그는 SSD를 의미합니다. 따라서이 경우 SSD가 데이터베이스의 유용성을 떨어 뜨린다 고 말합니다. 그는 “내가 오라클이라면 두려워 할 것입니다. 내가 존재하는 이유의 기본은 증발하고 있습니다.”

O(n)시간 을 찾는 HDD와는 달리 SSD에 대한 나의 작은 이해 에서 SSD는 O(1)거의 또는 거의 무작위입니다. 그래서 그의 제안은 저에게 흥미로 웠습니다. 왜냐하면 저는 그런 생각을 한 적이 없었기 때문입니다. 몇 년 전에 교수가 정규 파일 시스템에 비해 이점을 설명 할 때 데이터베이스에 처음 소개되었을 때 데이터베이스의 기본 역할은 매우 색인화 된 파일 시스템 (최적화, 캐싱, 동시 액세스, 따라서 SSD에서 인덱스가 필요하지 않은 경우 이런 종류의 데이터베이스는 데이터베이스를 덜 유용하게 만듭니다.

그럼에도 불구하고, 내가 새로운 사람이라는 것을 앞두고 모든 사람들이 여전히 순수한 파일 시스템 대신 DB를 응용 프로그램의 주요 지점으로 사용하고 지나치게 단순화 된 것처럼 느꼈기 때문에 유용하지 않다고 생각하기가 어렵습니다. 데이터베이스의 역할.

참고 : 나는 그가 다른 말을하지 않았는지 확인하기 위해 끝까지 지켜 보았습니다.

참고로 :
42:22 는 전체 데이터베이스 주제가
나타나면 43:52 는 “왜 데이터베이스가 있습니까 ?”로 시작하는시기입니다.

답변에 따르면 SSD가 DB 속도를 크게 향상시킵니다.
질문은 최적화가 어떻게 변경되는지 묻습니다.

TL; DR은 내 질문에, (그것은 곧 나 이미 발생 여부) 데이터베이스의 유용성을 감소 서버 시장에서 널리 SSD 사용의 출현을합니까?

발표자가 전달하려고 한 것은 SSD를 사용하면 디스크에 데이터를 저장할 수 있으며 구형 HDD와 마찬가지로 SSD를 검색하는 데 걸리는 시간이 얼마 남지 않을까 걱정할 필요가 없었습니다. O(1)(생각합니다). 따라서, 그것이 사실 인 경우, 그것은 더 빠른 탐색 시간을위한 인덱스를 갖는 장점이 사라지기 때문에, 그것이 갖는 장점 중 하나 인 인덱싱을 가정적으로 상실 할 것이다.



답변

SSD를 사용할 때 데이터베이스에서 조정 해야 할 사항이 몇 가지 있습니다. 예를 들어 PostgreSQL을 말하면 effective_io_concurrency, 및을 조정할 수 있습니다 random_page_cost. 그러나 더 빠른 읽기 및 빠른 임의 액세스는 데이터베이스의 기능이 아닙니다. 그것은 보장합니다

그는 인덱스에 대해서만 잘못했습니다. 전체 테이블을 램으로 읽을 수 있으면 인덱스가 여전히 유용합니다. 나를 믿지 않습니까? 생각 실험을 해보자

  • 하나의 인덱스 열이있는 테이블이 있다고 가정하십시오.

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • 해당 테이블에 5 억 개의 행이 있다고 가정하십시오.

  • 5 억 행이 모두 파일로 연결되어 있다고 상상해보십시오.

더 빠른 것은

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

데이터의 위치, 주문 방법 및 수행 할 수있는 작업에 관한 것입니다. PostgreSQL은 B-tree, Hash, GiST, SP-GiST, GIN 및 BRIN 인덱스 (및 확장을 통한 Bloom)를 지원합니다. 랜덤 액세스가 빠르기 때문에 모든 수학과 기능이 사라진다고 생각하는 것은 어리석은 일입니다.


답변

게시물을 기반으로 RDBMS 조회 시간 최적화가 IO 시간을 무시할 수있는 하드웨어로 대체되고 있다는 명확한 메시지가 나타납니다.

이것은 절대적으로 사실입니다. 높은 (실제) RAM과 결합 된 데이터베이스 서버의 SSD는 IO 대기 시간을 크게 단축시킵니다. 그러나 RDBMS 인덱싱 및 캐싱은 여전히 ​​가치가 있습니다. 이처럼 큰 IO 기능을 갖춘 시스템조차도 인덱싱이 잘못되어 쿼리 성능이 저하되어 IO 병목 현상이 발생할 수 있기 때문입니다. 이는 일반적으로 작업량이 많은 응용 프로그램 또는 잘못 작성된 응용 프로그램에서만 발견됩니다.

RDBMS 시스템의 주요 가치는 일반적으로 데이터 일관성, 데이터 가용성 및 데이터 집계입니다. Excel 스프레드 시트, csv 파일 또는 “데이터베이스”를 유지하는 다른 방법을 사용한다고 보장 할 수 없습니다.

SSD는 어떤 이유로 든 (네트워크, OS 손상, 전원 손실) 기본 서버로부터 사용자를 보호하지 않습니다. SSD는 잘못된 데이터 수정으로부터 사용자를 보호하지 않습니다. SSD는 “그냥”있는 것보다 분석을 더 빠르게 실행하지 않습니다.


답변

Bob 삼촌은 아마도 Redis 또는 Gemfire 와 같은 인 메모리 데이터베이스에 대해 이야기했을 것입니다 . 이러한 데이터베이스에서 데이터베이스의 모든 내용은 실제로 RAM에 포함됩니다. 데이터베이스는 비어있는 상태로 시작하여 수명이 짧은 데이터 (캐시로 사용됨)로 제출되거나 디스크에서 모든 항목을로드하고 주기적으로 체크 포인트 변경 사항을 디스크로로드하여 시작할 수 있습니다.

RAM이 저렴 해지면서 점점 더 대중화되고 있으며 메모리 내 클러스터 데이터베이스에 테라 바이트 단위의 데이터를 저장하는 것이 가능해졌습니다. 사물에 즉시 액세스 할 수있어 속도가 SSD와 같은 빠른 디스크 라기보다는 RAM에 넣는 것이 가치가있는 많은 사용 사례가 있습니다. 이해가된다면 SQL을 계속 사용할 수도 있습니다.

왜 이것이 오라클을 걱정해야합니까? 데이터가 증가하고 있으며 RDBMS가 사라질 것 같지 않습니다. 그러나 수년에 걸쳐 Oracle의 많은 엔지니어링 시간은 회전 디스크에서 데이터를 정말 빠르게 검색 할 수있는 방법으로 전환되었습니다. 오라클은 완전히 다른 스토리지 계층에 적응해야합니다. 그들은 Oracle Database In Memory 를 사용하지만 과거와는 다른 경쟁에 노출되어 있습니다. 쿼리 최적화 프로그램이 디스크의 레이아웃에 따라 올바른 전략을 선택하는 데 얼마나 많은 시간이 걸 렸는지 생각해보십시오.


답변

커뮤니티 위키 게시물은 원래 질문 코멘트로 남겨진 답변을 수집합니다.


나는 단지 반대라고 말할 것입니다. 읽기 / 쓰기 속도가 너무 빠르므로 GPU 가속 데이터베이스 (예 : BlazingDB 또는 Alenka )를 사용하여 숫자를 훨씬 빠르게 처리 할 수 ​​있습니다. 이제 더 복잡한 쿼리를 더 빠르게 실행할 수 있습니다. 이제 사람들이 달리기를 고려하지 않은 쿼리는 적절한 속도로 실행할 수 있습니다. 복잡할수록, 당신 오프 더 많은 데이터를 더 나은입니다 – cybernard

밥 마틴은 오랫동안 주변에 있었고 그의 의견은 일반적으로 (-:에 동의하지 않으면)들을 가치가 있지만,이 경우에 그는 “관계형 데이터베이스의 죽음이 우리에게있다”라는 군중으로 뛰어 들고 있다고 생각합니다. 저는 준회원입니다 :-). 들어 일부 에서 가지 제한적인 상황 은 다소 설득력이 인수는 비 관계형 데이터베이스 기술 우위를 제공 할 수 있음을 만들 수 있습니다. 그러나 IMO 관계형 모델은 다양하고 햇볕이 잘 드는 방식으로 결함이 있지만 오늘날 사용 가능한 최고의 범용 데이터베이스 모델을 제공합니다. YMMV. – 밥 자비스

데이터베이스를 사용하는 주된 이유는 디스크가 느리기 때문이 아니라 (실제로는 데이터베이스를 사용 하지 않는 이유로 인용 되었기 때문이 아니라) 데이터가 복잡 하기 때문 입니다. 데이터베이스의 기본 목적은 여러 앱 / 사용자가 올바른 데이터 를 찾고 제어 된 방식으로 동시에 데이터를 변경할 수 있도록하는 것입니다. 그렇게하는 것은 데이터베이스의 보조 목표 일뿐입니다. – RBarryYoung

RDBMS는 곧 사라지지 않을 것입니다. 이들은 일부 유형의 응용 프로그램에 가장 적합한 선택이며 NoSQL (Mongo 등)은 다른 응용 프로그램에 가장 적합한 선택입니다. 코스 말. – sh1rts

데이터베이스는 데이터를 구성하는 데 도움이됩니다. 어쨌든 데이터의 빠른 액세스를 위해 실제로 설계된 것은 아닙니다. – 지샹


답변