샤딩없이 PostgreSQL에서 100 테라 바이트 데이터베이스


9

여러 노드간에 데이터 샤딩 없이 PostgreSQL에서 100TB 데이터베이스 (실제로 약 90TB )를 설정하는 것이 현실적 입니까? 유사한 설정에 대한 성공 사례 / 예가 있습니까?


4
나는 그것이 당신의 작업량에 달려 있다고 상상합니다. 데이터는 어떻게 배포되며 쿼리는 어떻게됩니까? 어떤 종류의 응답 시간이 필요합니까?
Frank Farmer

글쎄,로드 프로파일은 빈번한 삽입 (피크에서 초당 약 50K), 상대적으로 거의 선택하지 않음 (사용자 및 타임 스탬프 별 행 범위)으로 설명 될 수 있습니다. 데이터는 사용자 및 날짜 / 타임 스탬프에 의해 쉽게 분할 / 분할 될 수 있습니다

답변:


9

흡수해야하는 초당 50K 쓰기는 일반적으로 어려운 문제 이상입니다. 매우 간단한 인서트가있는 합성 벤치 마크에서도 PostgreSQL의 한계는 약 10K / s 정도를 초과하는 경향이 있으며 데이터베이스 크기 측면에서 볼 때 큰 짐승도 없습니다.

또한 단일 PostgreSQL 노드의 I / O 시스템은 RAID 10에서와 마찬가지로 흥미로울 것입니다. 50K 삽입이 50K IOPS와 같다고 가정 할 수도 있습니다. ), 적절한 쓰기 작업을 수행하기 위해 수백 개의 디스크를 구입하지 않아도되는 매우 우수한 어레이와 함께 약 100 개의 디스크가 필요합니다.

샤딩이 쉽고 쓰기 용량이 클 것으로 예상되면 샤딩을 진행하십시오. 쓰기는 확장하기가 매우 어려울 수 있습니다.


동의하다. 이것이 ExaData 유형 시스템의 도메인입니다. 슬프게도 요즘 SSD를 사용하면 50k IOPS를 얻는 것이 쉽지 않습니다. 여기서는 중간 범위에서 고급 SAN을 포함하여 하드웨어에 더 큰 7 자리의 예산이 필요합니다.
TomTom

예, "수직으로 통합 된 솔루션 스택"을 사용하려는 경우 ExaData는 옵션입니다. 요구를 고려하면 그리 나쁘지는 않습니다.
pfo

네. 100TB는 물론 50.000 iops도 "저렴한"비명을 지르지 않습니다. Exadata는 SSD로 완전히로드 된 경우 100 만 IOPS를 수행합니까?
TomTom

2
이러한 의견에 추가하기 위해 해당 삽입 량으로 해당 데이터 량을 얻는 데 필요한 예산을 감안할 때 유료 SQL 엔진을 사용하고 싶을 때 전체 예산의 작은 비율이 될 것이라고 생각합니다. 훨씬 더 나은 지원을받을 것입니다.
Chopper3

난 전적으로 동의합니다. SAN에 대한 예산이 수십만에 달하는 많은 평가 변경에 부딪 치는 순간.
TomTom

1

현실적이고 작동합니다. RAM 용량에 따라 성능이 크게 좌우됩니다. RAM이 클수록 캐시는 커지고 PostgreSQL은 디스크로 오프로드하기 전에 데이터를 캐시 할 수 있습니다.

PostgreSQL은 캐시에 데이터를 쓰고 때때로 캐시를 오프로드합니다. 따라서 초당 50k INSERT는 50k IOPS로 변환되지 않습니다. 레코드를 함께 클러스터링하고 동시에 모두 기록하기 때문에 훨씬 적습니다.

대부분의 작업이 INSERT 인 경우 큰 데이터베이스는 문제가되지 않습니다. PostgreSQL은 여기 저기 색인을 변경해야하지만 실제로는 쉬운 일입니다. 이 크기의 데이터베이스에 많은 SELECT가 있으면 실제로 샤딩해야합니다.

한 번만 16GB 서버에서 400TB의 Oracle DB (Oracle 10g)에서 한 번만 작업했습니다. 데이터베이스 워크로드도 주요 INSERT 였으므로 매일 몇 개의 SELECT와 매일 수백만 개의 INSERT가 발생했습니다. 성능은 문제가되지 않았습니다.


1

100TB에서는 몇 가지 중요한 과제가 있습니다. 그것이 당신을 위해 일할 것인지 아닌지를 어떻게 해결 하느냐에 달려 있습니다.

  1. 쓰기로드를 흡수 할 수있는 충분한 방법이 필요합니다. 이것은 쓰기로드에 따라 다릅니다. 그러나 충분히 멋진 스토리지로 해결할 수 있습니다. 여기서 속도는 큰 문제입니다. 마찬가지로 읽기 액세스도주의 깊게 살펴 봐야합니다.

  2. 대부분의 데이터베이스는 여러 개의 작은 테이블로 구성되지 않지만 종종 하나 또는 두 개의 큰 테이블을 갖습니다.이 테이블은 최대 DB 크기의 절반이 될 수 있습니다. PostgreSQL에는 테이블 당 32TB의 하드 제한이 있습니다. 그 후 tid 유형에 페이지 카운터가 부족합니다. 이것은 PostgreSQL의 사용자 정의 빌드 또는 테이블 파티셔닝으로 처리 할 수 ​​있지만 처음에는 해결해야 할 심각한 문제입니다.

  3. PostgreSQL에는 다양한 작업에 사용할 수있는 RAM의 양에 대한 제한이 있습니다. 따라서 더 많은 RAM을 사용하면 특정 시점을 넘어 도움이 될 수도 있고 아닐 수도 있습니다.

  4. 백업 .... 백업은이 규모에서 흥미 롭습니다. 내가 아는 60TB DB는 fs 스냅 샷 백업을 사용한 다음 월마트 아카이브를 위해 바텐더의 백업을 위조해야했습니다. 이 가짜 백업은 fs 스냅 샷 백업의 프록시였습니다. 내가 말했듯이 "그들은 가짜 백업이 아닙니다. 대체 백업입니다!"

이 범위에 접근하는 데이터베이스를 가진 사람들이 있습니다. 60TB PostgreSQL 데이터베이스가있는 네덜란드 은행에서 일한 사람을 한 명 이상 만났습니다. 그러나 실제로는 실제로 작업량에 달려 있으며 크기 자체는 문제가 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.