해시 인덱스
해시된 인덱스는 인덱스된 필드 값의 해시를 수집하고 저장합니다.
해시된 인덱스는 해시된 샤드 키를 사용한 샤딩을 지원합니다. 해시 기반 샤딩은 필드의 해시 인덱스를 샤드 키로 사용하여 샤딩된 클러스터에서 데이터를 분할합니다.
사용 사례
해시된 인덱싱은 ObjectId 값이나 타임스탬프처럼 단조롭게 변경되는 필드가 있는 샤드 키에 이상적입니다. 단조롭게 증가하는 샤드 키 값과 함께 범위 샤딩을 사용하는 경우 상한이 MaxKey
인 청크가 대부분의 수신 쓰기를 수신합니다. 이 동작은 삽입 작업을 단일 샤드로 제한하여 샤딩된 클러스터에서 분산 쓰기의 이점을 제거합니다.
애플리케이션에 가장 적합한 샤딩 접근 방식을 선택하는 방법에 대한 자세한 내용은 해시 샤딩과 범위 샤딩 비교를 참조하세요.
행동
부동 소수점 숫자
해시된 인덱스는 해시하기 전에 부동 소수점 숫자를 64비트 정수로 자릅니다. 예를 들어 해시된 인덱스는 동일한 해시를 사용하여 2.3
, 2.2
, 2.9
값을 저장합니다. 이는 단일 해시 키에 여러 값이 할당되는 충돌입니다. 충돌은 쿼리 성능에 부정적인 영향을 미칠 수 있습니다.
충돌을 방지하려면 64비트 정수로 안정적으로 변환한 다음 다시 부동 소수점으로 변환할 수 없는 부동 소수점 숫자에 해시 인덱스를 사용하지 마세요.
해시 인덱스는 2 53보다 큰 부동 소수점 숫자를 지원하지 않습니다.
제한 사항
해시된 인덱스에는 배열 필드 및 고유 속성에 대한 제한이 있습니다.
필드 배열
해싱 함수는 다중 키 인덱스를 지원하지 않습니다. 배열이 포함된 필드에 해시된 인덱스를 만들 거나 해시된 인덱스 필드에 배열을 삽입할 수 없습니다.
고유 제약 조건
해시된 인덱스에는 고유 제약 조건을 지정할 수 없습니다. 대신 고유 제약 조건을 사용하여 해시되지 않은 인덱스를 추가로 만들 수 있습니다. MongoDB는 해시되지 않은 인덱스를 사용하여 선택한 필드에 고유성을 적용할 수 있습니다.
시작하기
해시된 인덱스를 만들려면 해시된 인덱스 만들기를 참조하십시오.
세부 정보
이 섹션에서는 해시 인덱스에 대한 기술적 세부 사항을 설명합니다.
해싱 함수
중요
MongoDB는 쿼리를 해결하기 위해 해시된 인덱스를 사용할 때 해시 함수를 사용하여 자동으로 해시 값을 계산합니다. 애플리케이션은 해시를 계산할 필요가 없습니다.
키의 해시된 값을 확인하려면 convertShardKeyToHashed()
메서드를 사용하세요. 이 방법은 해시 인덱스와 동일한 해시 함수를 사용합니다.
내장된 문서
해싱 함수는 내장된 문서를 축소하고 전체 값에 대한 해시를 계산합니다.