문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

해시 인덱스 만들기

이 페이지의 내용

  • 이 작업에 대하여
  • 해시 샤드 키 선택
  • 시작하기 전에
  • 예제
  • 단일 필드 해시 인덱스 만들기
  • 복합 해시 인덱스 만들기
  • 자세히 알아보기

이미 데이터가 포함된 컬렉션에 대해 샤딩을 활성화하려면 샤드 키를 지원하는 인덱스를 생성해야 합니다. 빈 컬렉션에 대해 샤딩을 활성화하려면 컬렉션을 샤딩할 때 샤드 키 인덱스를 대신 지정할 수 있습니다.

해시된 인덱스는 샤드 키 값의 해시를 기반으로 데이터가 샤드에 분산되는 해시 샤딩을 지원합니다.

단일 필드 해시 인덱스를 만들려면 인덱스 키의 값으로 hashed 를 지정합니다.

db.<collection>.createIndex(
{
<field>: "hashed"
}
)

여러 필드를 포함하는 해시 인덱스(복합 해시 인덱스)를 만들려면 단일 인덱스 키의 값으로 hashed 를 지정합니다. 다른 인덱스 키의 경우 정렬 순서(1 또는 -1)를 지정합니다.

db.<collection>.createIndex(
{
<field1>: "hashed",
<field2>: "<sort order>",
<field3>: "<sort order>",
...
}
)

해시된 인덱싱은 ObjectId 값이나 타임스탬프처럼 단조롭게 변경되는 필드가 있는 샤드 키에 이상적입니다. 단조롭게 증가하는 샤드 키 값과 함께 범위 샤딩을 사용하는 경우 상한이 MaxKey인 청크가 대부분의 수신 쓰기를 수신합니다. 이 동작은 삽입 작업을 단일 샤드로 제한하여 샤딩된 클러스터에서 분산 쓰기의 이점을 제거합니다.

애플리케이션에 가장 적합한 샤딩 접근 방식을 선택하는 방법에 대한 자세한 내용은 해시 샤딩과 범위 샤딩 비교를 참조하세요.

해시 샤드 키에 대해 다음 지침을 고려하세요.

  • 해시 샤드 키로 선택하는 필드는 카디널리티 가 높아야 하며, 이는 다양한 값을 의미합니다.

  • 데이터 모델에 카디널리티가 높은 단일 필드가 포함되어 있지 않은 경우 복합 해시 인덱스 를 만드는 것이 좋습니다. 복합 해시 인덱스는 더 많은 고유한 인덱싱 값을 제공하며 카디널리티를 높일 수 있습니다.

  • 샤드 키는 일반적인 쿼리 패턴을 지원해야 합니다. 범위 쿼리(예: $gt$lt)는 해시된 인덱스를 사용할 수 없습니다. 애플리케이션에서 샤드 키에 포함된 필드에 대해 범위 쿼리를 자주 수행하는 경우 범위 기반 샤딩을 대신 고려해 보세요.

해시 인덱스에는 최대 32개의 필드가 포함될 수 있습니다.

해시된 샤딩을 구현하려면 샤딩된 클러스터를 배포해야 합니다.

다음 예시는 그 방법을 보여줍니다.

이미 데이터가 포함된 orders 컬렉션을 가정합니다. _id 필드의 orders 컬렉션에 해시된 인덱스를 생성합니다.

db.orders.createIndex( { _id: "hashed" } )

_id 필드는 단조롭게 증가하므로 해시된 인덱스 키의 적합한 후보입니다. _id 값은 점진적으로 증가하지만 MongoDB가 개별 _id 값에 대한 해시를 생성하면 해당 해시 값이 동일한 청크에 있을 가능성은 거의 없습니다.

인덱스를 생성한 후 orders 컬렉션을 샤딩할 수 있습니다.

sh.shardCollection(
"<database>.orders",
{ _id: "hashed" }
)

이미 데이터가 포함된 customers 컬렉션을 가정합니다. name, address, 및 birthday 필드의 customers 컬렉션에 복합 해시 인덱스를 생성합니다.

db.customers.createIndex(
{
"name" : 1
"address" : "hashed",
"birthday" : -1
}
)

복합 해시 인덱스를 생성할 때는 hashed(을)를 단일 인덱스 키의 값으로 지정해야 합니다. 다른 인덱스 키의 경우 정렬 순서(1 또는 -1)를 지정하세요. 앞의 인덱스에서 address(은)는 해시된 필드입니다.

인덱스를 생성한 후 customers 컬렉션을 샤딩할 수 있습니다.

sh.shardCollection(
"<database>.customers",
{
"name" : 1
"address" : "hashed",
"birthday" : -1
}
)
← 해시 인덱스