데이터가 "자연스럽게 분할 가능"할 때 여러 시스템에서 PostgreSQL을 분할하는 현대적인 방법은 무엇입니까


22

몇 년 동안 "NoSQL"공간에 들어간 후, 나는 본질적으로 "관계"라는 문제가 있습니다. 오늘날 저는 데이터 저장소가 이전과는 상당히 다른 시각을 보았습니다. Riak과 같은 것들은 더 이상 단일 유지 점, "정비로 인한 다운"을 견딜 수없는 방식으로 나를 망쳐 놓았습니다. 물론, (또는 희망합니다), 나는 나의 정신을 완전히 잃지 않았습니다. 이것은 요구 사항이 상당히 높지 않은 (또는 아직) 개인 프로젝트입니다.

대부분의 샤딩 솔루션은 내가 원하는 것을 제공하지 않습니다. 최소한 개념적인 수준 (RDBM 자체가 테이블에 가져 오는 제한을 무시 함).

  1. 소량의 "공유 된"데이터가 있으며 자유롭게 복제 할 수 있습니다. 엄격한 일관성 요구 사항이 없습니다. 이것은 dynamo와 같은 데이터베이스에 저장 될 수 있으며 무한대로 확장됩니다. 그러나 가능하면 여전히 단일 데이터베이스를 사용하고 싶습니다.

  2. "사용자 별"데이터가 많이 있습니다. 즉, 모든 사용자가 절대적으로 합리적인 크기의 데이터를 가지고있는 많은 사용자가 단일 PostgreSQL 노드에 저장하기에 적합합니다. 우리는 최대 수만 건의 레코드를 이야기하고 있습니다.

  3. 교차 사용자를 쿼리 할 필요가 없으며 교차 사용자 원 자성이 필요하지 않습니다.

달성하기가 매우 쉽습니다. 적어도 "NoSQL 눈"으로 볼 때.

순진한 출발 아이디어는 다음과 같습니다.

  1. 매우 극단적으로 Riak에서 전체 사용자를 단일 키 / 값으로 직렬화 할 수있었습니다. 물론, 몇 메가 바이트의 데이터에 대한 지속적인 de / serialization은 느리기 때문에 PostgreSQL 사용을 고려하고 있습니다. 각 사용자의 데이터 내에서 원 자성 / 트랜잭션이 필요하기 때문에 많은 Riak K / V가 필요 없습니다.

  2. 사용자 당 SQLite 데이터베이스를 사용하고 중복 / 가용성을 위해 GlusterFS와 같은 것을 사용할 수 있습니다. 이것은 아마도 PostgreSQL을 사용하여 똑같이 좋은 것을 찾을 수 없다면 선택할 솔루션 일 것입니다. 장점 : 규모를 크게 줄이거 나 늘릴 수 있습니다. 단점 : PostgreSQL의 유형과 SQLite보다 엄격함을 선호합니다.

따라서 PostgreSQL 샤딩 솔루션에서 이상적으로 요청하는 것은 다음과 같습니다.

  1. 모든 사용자 데이터의 사본을 여러 컴퓨터에 자동으로 보관합니다. 사용자 / 샤드별로 마스터 노드를 동적으로 전환 할 수 있습니다 (이전 마스터가 다운 된 경우).
  2. 서버 노드를 추가 / 제거하여 동적으로 확장 / 축소 할 수 있습니다. 대부분 Riak이 할 수있는 것과 같습니다.
  3. 어떤 애플리케이션이 언제 어떤 노드와 통신해야하는지 알 필요가 없습니다.

안녕하세요,이 문제를 어떻게 해결 하셨나요?
Dikla

여러 데이터 저장소로 애플리케이션 레벨 파티셔닝. 실제로 엉망인 :(. 이것과 같은 것이 존재하지 않는다는 것이 정말로 슬프다 ...
loxs

답변:



4

가장 좋은 옵션은 pgpool-II 입니다. 최대 128 개의 노드를 가질 수 있으며

  1. 복잡한 파티셔닝 및 데이터 배포 규칙을 설정할 수 있습니다
  2. "온라인 프로비저닝"을 지원하십시오. 쓰기를 확장하지 않지만 읽기 가능한 확장 가능
  3. 가능하면 즉시 사용할 수 있습니다. LVS 를 사용해야 할 수도 있습니다.

다른 옵션은 Stado 일 수 있습니다 .

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