sql >> データベース >  >> NoSQL >> MongoDB

ハッシュインデックスと昇順インデックスのMongodbパフォーマンスの違い(順序付けされていないフィールドでハッシュを使用しない理由はありますか?)

    そのフィールドが与えられた場合key どちらの場合もインデックスが作成され、複雑さインデックス検索自体 非常に似ています。 aの値として ハッシュ になります 、およびインデックスツリーに格納されます。

    全体的なパフォーマンスコストを探している場合、ハッシュバージョンでは、aの値をハッシュするための追加の(無視できる)コストが発生します。 インデックスツリーの値と一致する前。 mongo / db/indexも参照してください。 /hash_access_method.h

    また、ハッシュ化されたインデックスは、インデックスプレフィックス圧縮を利用できません( WiredTiger) 。インデックスプレフィックスの圧縮は、カーディナリティが低いデータセット(国など)や、電話番号、社会保障コード、地理座標などの繰り返し値を持つデータセットに特に効果的です。これは、複合インデックス に特に効果的です。 、ここで、最初のフィールドは2番目のフィールドのすべての一意の値で繰り返されます。

    通常、範囲外の値をハッシュする理由はありません。シャードキーを選択するには、カーディナリティ<を考慮してください。 / a> 、頻度 、および変化率 値の。

    ハッシュ化されたインデックスは、シャーディング の特定のケースで一般的に使用されます。 。 シャードキー の場合 値は単調に増加/減少> 値を指定すると、データの分散は1つのシャードにのみ入る可能性があります。これは、ハッシュされたシャードキーが書き込みの分散を改善できる場所です。シャーディングクラスターを大幅に改善することは、マイナーなトレードオフです。 Hashed vs RangedSharding も参照してください。 。

    それが価値があるかどうかは、ユースケースによって異なります。カスタムハッシュ値は、ハッシュ値のクエリがカスタムハッシュコード、つまりアプリケーションを経由する必要があることを意味します。

    組み込みのハッシュ関数を利用する利点は、ハッシュ化インデックスを使用してクエリを解決するときに、MongoDBがハッシュを自動的に計算することです。したがって、アプリケーションはハッシュを計算する必要はありません。



    1. MongoDBをインプロセスでホストできますか?

    2. 集計での動的値の使用

    3. MongoDB-セットへの追加とインクリメント

    4. 複数の2dsphereインデックス、geoNearを実行するかどうかわからない