3

カーディナリティの低いフィールドにインデックスを配置しても意味がないこと 読みました。これは、複合インデックス自体に当てはまりますか?

db.perms.createIndex({"owner": 1, "object_type": 1, "target": 1});

クエリを使用すると、次のようになります。

db.perms.find({"owner": "me", "object_type": "square"});
db.perms.find({"owner": "me", "object_type": "circle", "target": "you"});

distinctobject_typeの数は時間の経過とともに増加します (おそらく最大 10 または 20 を超えない) が、最初は約 2 または 3 から始まります。

同様に、ハッシュ インデックスを調べる価値はありますか?

更新

ownerそしてtarget大きく成長するでしょう。これは、 (つまりファイル)ownerを「所有」するファイル システムのようなものと考えてください。targetただし、UNIX システムと同様に、ファイルはフォルダー、シンボリック リンク、または通常のファイル (したがって、タイプ) である可能性があります。したがって、 は 3 つしかありませんがobject_typeownerとのtarget組み合わせは、タイプが均等に分散された数千のエントリを持つことができます。

4

1 に答える 1

1

私はあなたの質問に答えることができないかもしれませんが、インデックスのカーディナリティに私のセントを与えます:

インデックス カーディナリティ:サポートするインデックスの種類ごとにインデックス ポイントの数を表しMongoDBます。

  1. 通常 - インデックスに入れるキーごとに、必ずインデックス ポイントが存在します。さらに、キーがない場合は、null エントリの下にインデックス ポイントがあります。インデックス カーディナリティに関して、コレクション内のドキュメント数に対して 1:1 を取得します。これにより、インデックスは特定のサイズになります。ドキュメントへのエンドポインタに関して、コレクションのサイズに比例します
  2. スパース - インデックス付けされているキーがドキュメントにない場合、ドキュメントは null であり、スパース インデックスのインデックスに null を保持しないため、インデックスには含まれません。ドキュメントの数以下になる可能性があるインデックス ポイントを使用します。
  3. マルチキー - これは配列値のインデックスです。ドキュメントごとに (配列の各要素に対して) 複数のインデックス ポイントがあります。したがって、ドキュメントの数よりも大きくなります。

指標点数

タグと呼ばれるキーを使用してドキュメントを更新し、その更新によりドキュメントをディスクに移動する必要があるとします。MMAPv1 ストレージ エンジンを使用しているとします。ドキュメントに 100 個のタグがあり、タグ配列がマルチキー インデックスでインデックス付けされている場合、移動に対応するためにインデックスで 100 個のインデックス ポイントを更新する必要がありますか?

于 2016-09-04T16:33:15.183 に答える