2017-12-13 4 views
1

높은 디스크로드로 인해 PostgreSQL DB를 파쇄하고 싶습니다. 첫째, 우리는 django-sharding library에서 보았지만 : 300~400기가바이트 테이블에 대한 노력은PostgresXL을 사용하여 기존 postgresql 데이터베이스 분쇄

  1. 매우 많은 우리의 백엔드에 다시 작성
  2. 64 비트 기본 키에 모든 테이블을 마이그레이션입니다 포스트 그레스 특정 알고리즘
  3. 생성 식별자 샤드에서 샤드로 데이터를 이동할 수 없습니다. 그 이상으로 우리는 오래된 ID를 가진 큰 데이터베이스를 가지고있다. 모든 것을 업데이트하는 것도 큰 문제입니다.
  4. 특수 테이블을 사용하여 ID를 생성하면 데이터를 삽입 할 때마다 기본 데이터베이스에 대한 특수 SELECT 쿼리가 수행됩니다. 우리는 쓰기 부하가 높기 때문에 좋지 않습니다.

이 모든 것을 고려하여 Postgres 데이터베이스 샤딩 솔루션을 살펴보기로 결정했습니다. Citus와 PostgresXL이라는 두 가지 기회를 발견했습니다. Citus는 우리에게 너무 많은 데이터 형식을 변경시키고 동시에 많은 백엔드를 다시 작성하게하므로 PostgresXL을보다 투명한 솔루션으로 시도하려고합니다. 그러나 문서를 읽으면 몇 가지 사항을 이해할 수 없으며 권장할만한 가치가 있습니다.

  1. Citus 및 PostgresXL을 제외한 다른 샤딩 해결 방법이 있습니까? 마이그레이션에 대한 데이터베이스에서 많이 변경하지 않는 것이 좋습니다. PostgresXL에 대한
  2. 몇 가지 질문 :
    • 나는 그것이 포스트 그레스 확장 아니에요 올바르게 이해합니까, 그것은 독립 포크입니까? 따라서 모든 부분을 소스에서 구축하고 데이터를 어떤 방식으로 옮기는 것이 좋을까요?
    • Postgres와 PostgresXL 버전은 어떻게 호환됩니까? PostgreSQL 9.4가 있습니다. 나는 PostgresXL에서 그런 버전을 보지 못한다 (9.2 또는 9.5 중앙 없음?). 그렇다면 예를 들어 마이그레이션 용 스트리밍 복제를 사용할 수 있습니까?
    • 예/아니요 인 경우 데이터를 마이그레이션하는 가장 좋은 솔루션은 무엇입니까? 과도한 글쓰기가있는 2Tb 데이터베이스가 있다면 오랜 시간 동안 멈추지 않고 어떻게 든 마이그레이션 할 수 있습니까?

감사합니다.

답변

0

먼저 자기 자신을 구하기 위해 두려움을 많이 겪었습니까? Amazon의 Auora, Dynomo, Red Shift 등과 같은 옵션을 보았습니까? 그들은 당신을 위해 최적화되고 관리되는 것뿐만 아니라 규모면에서 매우 비용 효율적입니다.

사실, Amazon의 직선 Postgress 데이터베이스는 방대한 양의 읽기 또는 쓰기를 처리 할 수 ​​있습니다. 우리는 이슈없이 2,000-6000 IOPS의 읽기 및 2,000-6000 IOPS의 쓰기를 처리 할 수 ​​있습니다. 나는 이것을 선택 사항으로 실제로 살펴볼 것이다. Azure, Oracle 및 Google도 경쟁 서비스를 제공합니다.

또한 모든 이유를 초월한 Postgres-XL에는 HA 지원이 없습니다. 단일 노드를 잃으면 모든 것을 잃게됩니다. 노드는 장애 조치 할 수 없습니다.

독립 실행 형 포크입니까?

예, 이들은 매우 다른 응용 프로그램이며 서로 별도로 개발되었습니다.

Postgres 및 PostgresXL 버전은 어떻게 호환됩니까?

그들은 호환되지 않습니다. Postgres를 Postgresl-XL로 마이그레이션 할 수는 없습니다. 그들은 매우 다르게 일합니다. 포스트 그레스 특정 알고리즘

생성 ID는

이 다음하지,하지만 당신을 공유하여 다른 하나 개의 파편에서 데이터를 이동 안되는 샤딩하는 파편에서> 이동 데이터가 불가능합니다. 사용되는 키는 일반적으로 데이터를 분할/분리하기 위해 특정적이고 고유해야합니다. 날짜 또는 "유형"필드 또는 일부 다른 (희망 사항에 따라 정렬 된) 필드/열과 같습니다. 이것은 일을 부수지만 $$ 한계에 명백한 고통을줍니다. Citus 및 PostgresXL을 제외한 다른 샤딩 해결 방법

이 있습니까? >> 마이그레이션에 대한 데이터베이스에서 많이 변경하지 않는 것이 좋습니다.

옵션의 톤,하지만 NoSQL에, 또는 MPP 데이터베이스에 표준 RDS에서가는 박쥐없이 주요 이동, 많은 노력을, 그리고 한계를 많이해야 할 것입니다 바로 떨어져 당신이하는 일에 상관 없습니다.

다음 Postress-XL 및 Citus는 특별히 공유하지 않는 MPP (대규모 병렬 처리) 클러스터링 응용 프로그램입니다. 그것은 그들이 할 수있는 일의 일부이지만 그 초점이 아닙니다. MPP에 대한

다른 옵션

pgPool -

이 haProxy이 (무거운 쓰기에 좋은되지 않음) - (.. 그것을하지 않은 있지만, 설정에 대한 작업의 손실을 읽고 유지)

MySQL 클러스터 - (상용 버전의 OSS 버전 및 주요 $$$를 사용하는 거대한 통증)

그린 플럼

테라 데이타

Vertica의

는 데이터를 마이그레이션 할 수있는 가장 좋은 방법은 무엇인가

?

이러한 종류의 스위치에 대한 간단한 마이그레이션은 거의 없습니다. 기존 RDS에서 데이터를 직접 내보내고 새 DB로 가져와야 할 가능성이 높습니다. 원하는 방식으로 작성하려면 무언가를 작성해야 할 것입니다.