문제

저는 현재 엄청난 양의 데이터(수십억 행)를 쿼리하는 문제를 해결하고 있는데, 이런 유형의 작업에 대한 경험이 없기 때문에 몇 가지 현명한 조언을 듣고 싶습니다.

데이터/문제는 다음과 같습니다.

  1. 각 테이블에는 2~5개의 키 열과 1개의 값 열이 있습니다.
  2. 모든 행에는 고유한 키 조합이 있습니다.
  3. 키의 하위 집합으로 쿼리할 수 있어야 합니다(예:key1='어쩌고' 및 key4='bloo').
  4. 새 행을 빠르게 삽입할 수 있으면 좋겠지만(행이 이미 존재하는 경우 값 업데이트) 천천히 할 수 있다면 만족할 것입니다.

현재 저는 각 키에 별도의 인덱스가 정의된 단일 시스템, 모든 키에 대한 하나의 인덱스(고유), 첫 번째와 마지막 키를 결합하는 하나의 인덱스(현재 제가 만들고 있는 가장 일반적인 쿼리)를 사용하여 단일 시스템에서 실행되는 MySQL에서 이것을 구현했습니다. 하지만 이는 쉽게 바뀔 수 있습니다).불행하게도 이는 매우 느립니다(그리고 인덱스는 결국 디스크 공간을 ~10배 차지하게 되므로 큰 문제는 아닙니다).

나는 우연히 내 마음대로 사용할 수 있는 빠른 컴퓨터(~40대)를 갖고 있는데, 이는 이 단일 머신 데이터베이스의 믿을 수 없을 만큼 느린 속도를 더욱 짜증나게 만듭니다.나는 이 데이터베이스를 빠르게 만들기 위해 이 모든 힘을 활용하고 싶습니다.분산 해시 테이블을 구축하는 것을 고려했지만 그렇게 하면 키의 하위 집합만 쿼리하기가 어려워집니다.BigTable/HBase와 같은 것이 괜찮은 솔루션이 될 것 같지만 아직 더 간단한 솔루션이 존재하지 않는다고 확신하지 않습니다.

정말 감사합니다. 도움을 주시면 대단히 감사하겠습니다!

올바른 솔루션이 없습니다

다른 팁

분산 데이터베이스에 대한 훌륭한 정보를 얻으려면 이 팟캐스트를 들어보시길 권합니다.에피소드-109-ebays-아키텍처-원리-with-randy-shoup

명백한 점을 지적하려면 다음을 수행하십시오.아마도 디스크에 묶여 있을 것입니다.

어느 시점에서 무작위 쿼리를 수행하고 작업 세트가 RAM보다 충분히 큰 경우 디스크가 수행할 수 있는 소수의 무작위 IOPS로 제한됩니다.연결된 디스크당 초당 수십 개의 하위 쿼리보다 더 나은 작업을 수행할 수는 없습니다.

이러한 병목 현상이 발생하는 경우 여러 컴퓨터에 데이터베이스를 분산시키는 것보다 SSD, 더 큰 RAID 또는 많은 RAM으로 전환하면 더 많은 이점을 얻을 수 있습니다. 리소스 2개)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top