シャードしたいmongodbコレクションがあります。このコレクションはユーザーからのメッセージを保持し、コレクションのドキュメントには次のプロパティがあります
{
_id : ObjectId,
conversationId: ObjectId,
created: DateTime
}
すべてのクエリは、converstionIdプロパティと、createdによるソーターを使用して実行されます。
conversationIdでクエリを実行する必要があるため、 _idによるシャーディングは明らかに機能しません(さらに、_idは ObjectId 型であり、多くの挿入にうまく対応できません)。
conversationId によるシャーディングは、クエリの分離という点では論理的な選択ですが、多くの挿入をうまくスケーリングできないのではないかと心配しています (conversationId でハッシュ化されたシャード キーを使用したり、ObjectIdからプロパティのタイプを変更したりしても)。GUID のようにインクリメンタルではない他のタイプに) ある会話は他の会話よりもはるかにアクティブである可能性があるため (つまり、より多くのメッセージが追加されている)
私がmongoのドキュメントで見たものから、シャードキーは、コレクション内のすべてのドキュメントに存在するインデックス付きフィールドまたはインデックス付き複合フィールドのいずれかです。
これは、複合インデックスでシャード キーを作成できるということですか?
要点は次のとおりです。
_idプロパティからハッシュ化されたシャード キーを作成すると、データが適切に分散されます。
conversationIdでシャード キーを作成すると、適切なクエリ分離が提供されます
したがって、これら2つのことの組み合わせが実現できれば、素晴らしいことです。
何か案は?
ありがとう