1

「フィード」コレクションがあり、各フィードにはコメントがあります。そのため、誰かがフィードにコメントすると、Mongo のマルチキー フィールドである「購読者」に追加されます。

feeds: {
 _id: ...,
 text: "Text",
 comments: [{by: "A", text: "asd"},{by: "B", text: "sdf"}],
 subscribers: ["A","B"]

}

次に、ユーザー A の新しいコメントを含むすべてのフィードを取得する必要がある場合、{subscribers: "A"} でフィードを要求します。

通常は 2 ~ 5 件のコメントがありますが、(ホット フィードでは) 100 件を超えるコメントと 100 件を超える購読者がいる場合があります。

キーが多すぎるマルチキー フィールドを使用することはお勧めできません。では、どれくらいが多すぎますか?

マルチキーを使用するか、各ユーザーに直接コメントを送信する方がよいかを決定する必要があるため、質問します。この場合、各サブスクライバーのフィードをコピーする必要があります-コレクションは非常に急速に成長します-これも良くないと思います: 1000 人のユーザー、それぞれに 10 人のユーザーが続き、それぞれが 1 日 10 回のアクションを行う = 10 ごとに 1 000 000 レコード日々!

4

1 に答える 1

3

非常に大きなドキュメントで問題が発生する可能性がありますが、特に MongoDB がクエリを実行するためにドキュメント全体をスキャンする必要がある場合は、予想どおりです。多数の値を持つ配列は、それらがマルチキー インデックスであっても、MongoDB では問題になりません。

注意点が 1 つあります。インデックスは 1024 バイトを超えるキー (複数キー ドキュメントの場合、これは配列内の項目) を格納しません。配列内の項目がこの制限よりも短い限り、問題はありません。

そうは言っても、配列またはドキュメントの他の部分が無限に無限に拡大するデータモデルは避けたいと思いますMongoDB はドキュメントごとにディスクに少しのパディングを追加しますが、作成後にドキュメントが大幅に大きくなると、データベースはそれをディスク上の別の場所に移動する必要があります。どのような方法でデータをモデル化する場合でも、ドキュメントが作成後にあまり大きくならないように注意してください。

参照:

于 2012-07-02T15:32:17.243 に答える