1 minute read

데이터 세트가 매우 크거나 쿼리 처리량이 매우 높은 경우에는 복제만으로는 충분하지 않다. 데이터를 파티션으로 분할하는 샤딩이 필요하다.

여기서 파티션이라고 부르는 것은 MongoDB, Elasticsearch, SolrCloud에서는 shard라고 한다 HBase에서는 region, Bigtable에서는 tablet, Cassandra와 Riak에서는 vnode, Couchbase에서는 vBucket으로 알려져 있다.

파티션의 단위란 무엇일까? 각 데이터 조각(각 레코드, 행 또는 문서)이 정확히 하나의 파티션으로 구성된다.

사실상 각 파티션은 그 자체로 작은 데이터베이스이다. 데이터를 파티션하려는 주된 이유는 확장성이다.

서로 다른 노드에 서로 다른 파티션을 배치라며녀 shared-nothing 클러스터를 활용한다. shared-nothing 클러스터 환경에서는 대규모 데이터 세트를 여러 디스크에 분산할 수 있으며 쿼리 부하를 여러 프로세서에 분산할 수 있다.

단일 파티션에서 작동하는 쿼리는 각 노드가 자체 파티션에 대한 쿼리를 독립적으로 실행할 수 있다. 따라서, 노드를 더 추가하여 쿼리 처리량을 확장할 수 있다.

크고 복잡한 쿼리는 여러 노드에 걸쳐 병렬화할 수 있지만, 이는 상당히 어렵다.

파티션 데이터베이스는 1980년대에 Teradata 및 Tandem Nonstop SQL과 같은 제품에 의해 시작되었다. 최근에는 NoSQL 데이터베이스 및 Hadoop 기반 데이터 웨어하우스에 의해 재발견되었다. 일부 시스템은 트랜잭션 워크로드용으로 설계되고 다른 시스템은 분석용으로 설계된다.

파티셔닝과 복제를 함께 사용한다.

파티셔닝은 복제와 함께 사용된다. 각 파티션의 사본이 복제되어 여러 노드에 저장된다. 다시 말해, 각 레코드가 정확히 하나의 파티션에 속하더라도 내결함성을 위해 여러 개의 다른 노드에 저장될 수 있다.

  • 한 노드가 둘 이상의 파티션을 저장할 수 있다.
  • 각 파티션의 리더는 한 노드에 할당되고 팔로워는 다른 노드에 할당된다.
  • 각 노드는 일부 파티션에서는 리더가 되고 다른 파티션에서는 팔로워가 될 수 있다.