PostgreSQL 및 MySQL의 확장 성 제한


43

MySQL 또는 PostgreSQL과 같은 샤드되지 않은 관계형 데이터베이스의 성능이 10TB를 초과하는 "파손"을 들었습니다.

나는 Netezza, Greenplum 또는 Vertica 등을 제안하지 않았기 때문에 그러한 한계가 존재한다고 생각하지만, 여기에 누군가 가이 한계가 정량화되는 연구 논문 또는 공식 사례 연구에 대한 언급이 있는지 묻고 싶습니다.

답변:


52

귀하의 질문에 대한 간단한 답변은 없지만 몇 가지 고려해야 할 사항이 있습니다.

첫째, 스케일 만 걱정할 필요는 없습니다. 데이터로하는 일은. 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 제한에 도달하기 때문에이 범위로 확장되지 않는 한 가지 작업을하고 있습니다.


2
Postgres 9.6은 쿼리 내 병렬 처리 향상 (병렬 시퀀스 스캔, 병렬 조인)을 얻을 것으로 보입니다.
a_horse_with_no_name

1
이것이 실제로 유용하려면 몇 가지 릴리스가 더 필요할 것이라고 생각합니다.
Chris Travers

@ChrisTravers 이런 상황을 더 잘 지원하는 다른 데이터베이스가 있습니까? 반드시 RDBMS 일 필요는 없습니까? 감사합니다
konung

1
@konung 솔직히 모르겠습니다. 데이터에 대한 생각 방식을 구체화하는 데 도움이되므로 MapReduce 엔진을 특정 규모로 사용하는 것이 좋습니다. 매우 큰 규모에서는 실제로 무엇을하고 있는지 알아야합니다. Teradata 및 Postgres-XL과 같은 솔루션은 도움이되지만 현재 수행중인 작업에 대한 명확한 지식을 요구하는 솔루션입니다 (그리고 RDBMS를 기반으로 구축 된 시점에서 항상 자체 구축 할 수 있음).
Chris Travers

1
또한 몽고와 함께 플레이하는 것이 좋습니다 이유는 (아마도) 잘 확장되지는 않지만 그 시점에 도달했을 때 페더레이션 데이터와 MapReduce에 대해 생각하는 방법을 가르쳐주기 때문입니다.
Chris Travers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.