Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

ハッシュされたインデックス

項目一覧

  • ユースケース
  • 動作
  • 浮動小数点数
  • 制限
  • はじめる
  • 詳細
  • ハッシュ関数
  • 埋め込みドキュメント
  • 詳細

ハッシュされたインデックスは、インデックス フィールドの値のハッシュを収集して保存します。

ハッシュされたインデックスは、ハッシュされたシャードキーを使用したシャーディングをサポートします。 ハッシュベースのシャーディングでは、フィールドのハッシュされたインデックスをシャードキーとして使用し、シャーディングされたクラスター全体でデータをパーティション分割します。

ハッシュされたインデックは、 ObjectId 値やタイムスタンプのように 単調 に 変化するフィールドを持つシャードキーに最適です。単調に増加するシャードキー値を使用して範囲シャーディングを使用すると、上限が MaxKeyのチャンクに着信書き込みの大部分が集中します。 この動作により、挿入操作が 1 つのシャードに限定され、シャーディングされたクラスターでの分散書込みの利点がなくなります。

アプリケーションに最適なシャーディング方法を選択する方法の詳細については、ハッシュされたシャーディングと範囲のあるシャーディングを参照してください。

ハッシュ インデックスにより、浮動小数点数は 64 ビット整数に切り捨てられた後、ハッシュ化されます。たとえば、ハッシュ インデックスでは、2.32.22.9 の値の格納に同じハッシュが使用されます。このように、複数の値が同じハッシュキーに割り当てられることを、コリジョン(collision)と呼びます。コリジョンにより、クエリのパフォーマンスに悪影響が及ぶことがあります。

衝突を防ぐため、64 ビット整数に確実に変換できず、その後浮動小数点に戻すことができない浮動小数点数にはハッシュされたインデックスを使用しないでください。

ハッシュされたインデックスは 2 53 より大きい浮動小数点数をサポートしません。

ハッシュされたインデックスには、配列フィールドとユニークなプロパティに対する制限があります。

ハッシュ関数は 複数キー インデックス をサポートしていません。配列を含むフィールドでハッシュされたインデックスを作成したり、またはハッシュされたインデックス フィールドに配列を挿入したりすることはできません。

ハッシュされたインデックスに ユニーク制約 を指定することはできません。代わりに、ユニーク制約を持つハッシュされていないインデックスを追加で作成できます。MongoDB はハッシュされていないインデックスを使用して、選択したフィールドの一意性を強制できます。

ハッシュ インデックスを作成するには、「ハッシュされたインデックスを作成する」を参照してください。

このセクションでは、ハッシュ インデックスの技術的な詳細について説明します。

重要

MongoDB では、ハッシュインデックスを使用してクエリを解決する際に、ハッシュ関数を使用して自動的にハッシュ値を計算します。アプリケーションでハッシュを計算する必要はありません

キーのハッシュ値を確認するには、convertShardKeyToHashed() メソッドを使用します。このメソッドは、ハッシュ インデックスと同じハッシュ関数を使用します。

ハッシュ関数により、埋め込みドキュメントをまとめて、値全体のハッシュを計算できます。

戻る

制限事項