3

Mongo Docs を読む:

シャード システムは、一意のフィールドがシャード キーにない限り、クラスタ全体に一意のインデックスを適用できません。

ここから: http://docs.mongodb.org/manual/core/sharding-shard-key/

それでも、シャード キーが正確に一意のインデックスである必要があるのか​​、それとも一意のインデックスのプレフィックスである可能性があるのか​​ は、かなり曖昧です。

この特定のトピックに関する多くの参考文献を見つけましたが、残念ながら、適切な「すべきこととすべきでないこと」の例を見つけることができませんでした。

要約すると、私の質問は次の例にあります。フィールド {a,b,c} に一意のインデックスを持つ Mongo コレクションが与えられた場合、次のシャード キーのどれが正しいか:

A. {a}
B. {a,b,c}
C. {a,b,c,d}
D. {a,b,d} ?

どうもありがとう。

4

1 に答える 1

5

この制限の理由は、シャードが他のシャードと通信することなく重複をチェックできる必要があるためです。

つまり、どのシャードに残っているかのインデックスのすべての可能な値を明確にする必要があります。シャードは、衝突するドキュメントがそれ自体にも格納される場合にのみ、値が一意であることを確認できます。

つまり、シャード キーがインデックスの一部にすぎない場合は問題ありませんが、インデックスがシャード キーの一部にすぎない場合は問題ありません。

あなたの例では、シャードキーA と B は機能しますが、C と D は機能しません。シナリオ C または D のシャードが、フィールド a、b、および c が一致しないドキュメントを受け取る場合、a、b、および c の値が同じで d の値が異なるドキュメントが存在する可能性があります。別のシャードで。

于 2013-10-30T16:23:05.630 に答える