オプション1を選択する必要があります。
主な理由は、パフォーマンスが心配だと言うことです。常に存在し、すでに一意である_idインデックスを使用すると、2番目の一意のインデックスを維持する手間を省くことができます。
オプション1の場合、シーケンシャルキーがない場合の挿入パフォーマンスが心配です。これにより、従来のRDBMSシステムが停止する可能性があることを私は知っています。また、これがMongoDBにも当てはまる可能性があるという兆候を見てきました。
他のオプションはこの問題を回避せず、_idインデックスからセカンダリ一意インデックスにシフトするだけです。ただし、2つのインデックスがあり、1つは適切なバランスで、もう1つはランダムアクセスです。
オプション1に疑問を呈する理由は1つだけです。それは、1つまたは他のUUID値だけでドキュメントにアクセスすることを計画している場合です。常に両方の値を提供し、(この部分は非常に重要です)すべてのクエリで常に同じ方法で並べ替える限り、_idインデックスはその目的を効率的に果たします。
サブドキュメントを比較するときに、2つのUUID値を常に同じ方法で並べ替える必要がある理由の詳細として{ a:1, b:2 }
{ b:2, a:1 }
と等しくありません -2つのドキュメントが_idの値を持つコレクションを持つことができます。したがって、最初にフィールドを含む_idを保存する場合は、すべてのドキュメントとクエリで常にその順序を維持する必要があります。
もう1つの注意点は、_id:1
のインデックスです。 クエリに使用できます:
db.collection.find({_id:{a:1,b:2}})
ただし、 クエリに使用できる
db.collection.find({"_id.a":1, "_id.b":2})