청크를 사용한 데이터 파티셔닝
이 페이지의 내용
MongoDB는 컬렉션에 연결된 샤드 키를 사용하여 데이터를 특정 샤드가 소유한 청크로 분할합니다. 청크는 샤딩된 데이터 범위로 구성됩니다. 범위는 청크의 일부일 수도 있고 전체 청크일 수도 있습니다. 밸런서는 샤드 간에 데이터를 마이그레이션합니다. 각 청크에는 샤드 키에 따라 포괄적 하한과 배타적 상한이 있습니다.
청크가 나타낼 수 있는 가장 작은 데이터 단위는 하나의 고유한 샤드 키 값입니다.
초기 청크
채워진 컬렉션
샤딩 작업은 모든 샤드 키 값을 포함하는 하나의 큰 초기 청크를 생성합니다.
초기 청크 생성 후 밸런서는 데이터 밸런싱을 시작해야 할 때 초기 청크에서 범위를 이동합니다.
빈 컬렉션
비어 있거나 존재하지 않는 컬렉션에 대해 구역 및 영역 범위가 정의되어 있는 경우.
샤딩 작업은 정의된 영역 범위에 대해 빈 청크를 생성하고 샤드 키 값의 전체 범위를 포함하는 추가 청크를 생성하고, 영역 범위에 기반하여 초기 청크 분배를 수행합니다. 이러한 청크의 초기 생성 및 배포는 영역별 샤딩의 빠른 설정을 가능하게 합니다.
초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
비어 있거나 존재하지 않는 컬렉션에 대해 정의된 구역 및 구역 범위가 없는 경우:
해시 샤딩의 경우:
샤딩 작업은 샤드 키 값의 전체 범위를 포함하는 빈 청크를 생성하고 초기 청크 분산을 수행합니다. 기본적으로 이 작업은 샤드당 2개의 청크를 생성하고 클러스터 전체에 마이그레이션됩니다.
numInitialChunks
옵션을 사용하여 초기 청크의 개수를 다르게 지정할 수 있습니다. 이러한 청크의 초기 생성 및 배포를 통해 샤딩을 더 빠르게 설정할 수 있습니다.초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
원거리 샤딩의 경우:
샤딩 작업은 샤드 키 값의 전체 범위를 포괄하는 빈 단일 청크를 생성합니다.
초기 청크 생성 후, 밸런서는 초기 청크를 샤드 간에 적절히 마이그레이션하고 향후 청크 분산을 관리합니다.
범위 크기
MongoDB의 기본 범위 크기는 128MB입니다. 청크 크기를 늘리거나 줄일 수 있습니다. 기본 청크 크기를 변경하는 것이 어떤 영향을 미치는지 생각해 보세요:
범위가 작을수록 마이그레이션 빈도가 높아지는 대신 데이터가 더 고르게 분산됩니다. 이로 인해 쿼리 라우팅(
mongos
) 계층에서 비용이 발생합니다.범위가 넓을수록 마이그레이션 횟수가 줄어듭니다. 이는 쿼리 라우팅 계층의 내부 오버헤드 측면 및 네트워킹 관점 모두에서 더 효율적입니다. 하지만 이러한 효율성은 데이터의 불균등한 분산을 초래할 수 있습니다.
범위 크기는 마이그레이션할 범위당 최대 문서 수에 영향을 줍니다.
대부분의 배포 환경에서는 데이터 세트의 분산이 균등하지 않더라도 빈번하고 잠재적으로 잘못된 마이그레이션을 피하는 것이 합리적입니다.
범위 마이그레이션
MongoDB는 샤딩된 클러스터의 데이터 범위를 마이그레이션하여 샤드 컬렉션의 데이터를 샤드 간에 균등하게 분산시킵니다. 마이그레이션은 다음 중 하나일 수 있습니다.
수동입니다. 대량 삽입 중 데이터를 배포하는 등 제한된 경우에만 수동 마이그레이션을 사용합니다. 자세한 내용은 청크 수동 마이그레이션을 참조하세요.
자동화 분산 밸런서 프로세스는 분할된 데이터베이스 간에 분할된 컬렉션의 데이터가 고르지 않게 분산되어 있는 경우 데이터를 자동으로 마이그레이션합니다. 자세한 내용은 마이그레이션 역치 를 참조하십시오.
샤딩된 클러스터 밸런서에 대한 자세한 내용은 샤딩된 클러스터 밸런서를 참조하십시오.
밸런싱
밸런서는 데이터 마이그레이션을 관리하는 백그라운드 프로세스입니다. 가장 큰 샤드와 가장 작은 샤드 간의 데이터 양 차이가 마이그레이션 임계값을 초과하면 밸런서가 균등한 분산을 보장하기 위해 클러스터 전체에 걸쳐 데이터를 마이그레이션하기 시작합니다.
밸런서의 특정 측면을 관리할 수 있습니다. 밸런서는 또한 샤딩된 클러스터에서 구역을 구성할 때 생성된 모든 구역을 존중합니다.
밸런서에 대한 자세한 내용은 샤딩된 클러스터 밸런서를 참조하십시오.
분할 불가능/점보 청크
경우에 따라 청크가 지정된 청크 크기 이상으로 커질 수 있지만 분할할 수 없는 경우도 있습니다. 가장 일반적인 시나리오는 청크가 단일 샤드 키 값을 나타내는 경우입니다. 청크는 분할할 수 없기 때문에 청크 크기를 초과하여 계속 증가하여 점보 청크가 됩니다. 이러한 점보 청크는 계속 증가함에 따라 성능 병목 현상이 발생할 수 있으며, 특히 샤드 키 값이 높은 빈도로 발생하는 경우 더욱 그렇습니다.
MongoDB 5.0부터는 문서의 샤드 키를 변경하여 컬렉션을 리샤할 수 있습니다.
MongoDB는 refineCollectionShardKey
명령을 제공합니다. 컬렉션의 샤드 키를 세분화하면 데이터를 더 세밀하게 분배할 수 있으며, 기존 키의 카디널리티가 부족해 점보 청크가 커지는 상황을 해결할 수 있습니다.
컬렉션을 리샤딩해야 하는지 또는 샤드 키를 세분화해야 하는지 알아보려면 샤드 키 변경을 참조하세요.
자세한 내용은 다음을 참조하세요.