답변:
흡수해야하는 초당 50K 쓰기는 일반적으로 어려운 문제 이상입니다. 매우 간단한 인서트가있는 합성 벤치 마크에서도 PostgreSQL의 한계는 약 10K / s 정도를 초과하는 경향이 있으며 데이터베이스 크기 측면에서 볼 때 큰 짐승도 없습니다.
또한 단일 PostgreSQL 노드의 I / O 시스템은 RAID 10에서와 마찬가지로 흥미로울 것입니다. 50K 삽입이 50K IOPS와 같다고 가정 할 수도 있습니다. ), 적절한 쓰기 작업을 수행하기 위해 수백 개의 디스크를 구입하지 않아도되는 매우 우수한 어레이와 함께 약 100 개의 디스크가 필요합니다.
샤딩이 쉽고 쓰기 용량이 클 것으로 예상되면 샤딩을 진행하십시오. 쓰기는 확장하기가 매우 어려울 수 있습니다.
현실적이고 작동합니다. RAM 용량에 따라 성능이 크게 좌우됩니다. RAM이 클수록 캐시는 커지고 PostgreSQL은 디스크로 오프로드하기 전에 데이터를 캐시 할 수 있습니다.
PostgreSQL은 캐시에 데이터를 쓰고 때때로 캐시를 오프로드합니다. 따라서 초당 50k INSERT는 50k IOPS로 변환되지 않습니다. 레코드를 함께 클러스터링하고 동시에 모두 기록하기 때문에 훨씬 적습니다.
대부분의 작업이 INSERT 인 경우 큰 데이터베이스는 문제가되지 않습니다. PostgreSQL은 여기 저기 색인을 변경해야하지만 실제로는 쉬운 일입니다. 이 크기의 데이터베이스에 많은 SELECT가 있으면 실제로 샤딩해야합니다.
한 번만 16GB 서버에서 400TB의 Oracle DB (Oracle 10g)에서 한 번만 작업했습니다. 데이터베이스 워크로드도 주요 INSERT 였으므로 매일 몇 개의 SELECT와 매일 수백만 개의 INSERT가 발생했습니다. 성능은 문제가되지 않았습니다.
100TB에서는 몇 가지 중요한 과제가 있습니다. 그것이 당신을 위해 일할 것인지 아닌지를 어떻게 해결 하느냐에 달려 있습니다.
쓰기로드를 흡수 할 수있는 충분한 방법이 필요합니다. 이것은 쓰기로드에 따라 다릅니다. 그러나 충분히 멋진 스토리지로 해결할 수 있습니다. 여기서 속도는 큰 문제입니다. 마찬가지로 읽기 액세스도주의 깊게 살펴 봐야합니다.
대부분의 데이터베이스는 여러 개의 작은 테이블로 구성되지 않지만 종종 하나 또는 두 개의 큰 테이블을 갖습니다.이 테이블은 최대 DB 크기의 절반이 될 수 있습니다. PostgreSQL에는 테이블 당 32TB의 하드 제한이 있습니다. 그 후 tid 유형에 페이지 카운터가 부족합니다. 이것은 PostgreSQL의 사용자 정의 빌드 또는 테이블 파티셔닝으로 처리 할 수 있지만 처음에는 해결해야 할 심각한 문제입니다.
PostgreSQL에는 다양한 작업에 사용할 수있는 RAM의 양에 대한 제한이 있습니다. 따라서 더 많은 RAM을 사용하면 특정 시점을 넘어 도움이 될 수도 있고 아닐 수도 있습니다.
백업 .... 백업은이 규모에서 흥미 롭습니다. 내가 아는 60TB DB는 fs 스냅 샷 백업을 사용한 다음 월마트 아카이브를 위해 바텐더의 백업을 위조해야했습니다. 이 가짜 백업은 fs 스냅 샷 백업의 프록시였습니다. 내가 말했듯이 "그들은 가짜 백업이 아닙니다. 대체 백업입니다!"
이 범위에 접근하는 데이터베이스를 가진 사람들이 있습니다. 60TB PostgreSQL 데이터베이스가있는 네덜란드 은행에서 일한 사람을 한 명 이상 만났습니다. 그러나 실제로는 실제로 작업량에 달려 있으며 크기 자체는 문제가 아닙니다.