답변:
귀하의 질문에 대한 간단한 답변은 없지만 몇 가지 고려해야 할 사항이 있습니다.
첫째, 스케일 만 걱정할 필요는 없습니다. 데이터로하는 일은. 500TB의 30TB 데이터 테이블이 있고보고가 거의없는 간단한 OLTP를 수행하는 경우 너무 많은 문제가 있다고 생각하지 않습니다. PostgreSQL에는 32TB 데이터베이스가 있습니다. 그러나 동시에 모든 디스크에 충돌해야하기 때문에 성능이 다소 저하됩니다. 마찬가지로 데이터가 50TB이지만 일반적으로 약 100GB의 적중률을 갖는 경우 db의 해당 부분을 메모리에 보관하기에 충분한 RAM으로 서버를 구축 할 수 있습니다.
당신은 1TB의 데이터의 모드 (가장 일반적인 값) 출력을하려고하는 경우, 다른 한편으로는,이 될 것입니다 어떤 시스템을 사용하는 중요하지 않습니다 고통 또는 샤딩없이. (편집 : 샤딩은 실제로이 문제를 악화시킬 수 있습니다. )
MySQL과 PostgreSQL에서 거대한 DB를 사용할 때 발생하는 주요 문제는 쿼리 내 병렬 처리를 지원하지 않는다는 사실입니다. 즉, 쿼리는 단일 스레드에 의해 단일 블록으로 실행되며 조각으로 나눠서 별도로 실행할 수 없습니다. 이는 많은 양의 데이터에 대해 대규모 분석 쿼리를 실행할 때 가장 자주 발생하는 문제입니다. 스토리지와 실행이 분리되어 Postgres-XC와 Green Plum이 구조를 시작합니다. 코디네이터 수준에서이를 수행 할 수 있습니다. Postgres-XC와 Green Plum은 기본적으로 샤딩을 내부적으로 사용하지만 코디네이터는 전 세계적으로 모든 일관성을 강화합니다.
쿼리 내 병렬 처리를 사용하면 쿼리를 분할하고 다른 프로세서 / 디스크 I / O 채널이 그 일부를 실행하게하고 결과 집합을 다시보고 응용 프로그램으로 전달할 수 있습니다. 다시 말하지만 이는 일반적으로 트랜잭션 처리로드보다는 분석에 가장 유용합니다.
두 번째는 Vertica 또는 Greenplum과 같은 일부 시스템은 정보 열을 함께 저장한다는 것입니다. 따라서 OLTP 관점에서 시스템을 사용하기가 더 어려워지고 성능이 저하되지만 대규모 분석 워크로드의 성능이 크게 향상됩니다. 따라서 이것은 워크로드 별 트레이드 오프입니다.
따라서 대답은 1-2TB 크기를 초과하면 시스템과 워크로드 사이에 많은 트레이드 오프가 발생할 수 있다는 것입니다. 다시 말하지만 이것은 데이터베이스, 작업 세트의 크기 등에 따라 다릅니다. 그러나이 시점에서 실제로 눈송이 시스템, 즉 작업 부하에 맞게 조정 된 눈송이 시스템을 사용해야합니다.
이것은 물론 한계가 일반적으로 정량화 될 수 없음을 의미합니다.
편집 : 이제 PostgreSQL에서 의사 결정 지원 및 트랜잭션 처리 워크로드의 혼합을 처리하는 9TB 데이터베이스로 작업했습니다. 가장 큰 문제는 데이터 세트의 많은 부분에 해당하는 질문이있는 경우 답변을 기다려야한다는 것입니다.
그러나 기본 사항 (색인, 자동 진공, 저수준에서 작동하는 방식 등)과 충분한 컴퓨팅 리소스에주의를 기울이면 완전히 관리 할 수 있습니다 (Pg의 30TB 범위에서 잘 관리 할 수 있다고 추정합니다).
Edit2 : 일단 100TB로 향하면 작동하는 것은 데이터 세트에 달려 있습니다. PostgreSQL의 테이블 당 32TB 제한에 도달하기 때문에이 범위로 확장되지 않는 한 가지 작업을하고 있습니다.