私たちのアプリケーションでは、ユーザーは投稿やコメントを作成できます。データは急速に増加しており、Mongodb のスケーリング戦略については既に確認しました。http://www.10gen.com/presentations/mongosf2011/schemascaleに示されているアプローチが気に入っています。これは、埋め込みドキュメントと非埋め込みドキュメントの間でハイブリッド スキーマを使用し、コメントをバケット化して、1 回あたり 100 または 200 コメントのグループに保存されるようにします。資料。
{
"_id" : '/post/2323423/1--1',
"comments" : [{
"author" : "peter",
"text" : "comment!",
"when" : "June 24 2012,
"votes": 43
},
{
"author" : "joe",
"text" : "hi!",
"when" : "June 25 2012,
"votes": 102
},
...
],
}
コメントをバケット化することにより、数千のコメントを表示するために必要なディスク読み取りが少なくなると同時に、ドキュメントが小さく保たれるため、書き込みが高速になります。コメントを日付順に並べ替えるのに最適です。
私たちはこのアプローチに非常に興味を持っていますが、私たちのアプリケーションではコメントを投票とサブコメントでソートする必要があります。
現在、コメント用に別のコレクションを使用する非埋め込みアプローチを使用しています。任意のフィールドでソートされたデータを取得でき、サブコメントは (参照により) 簡単ですが、パフォーマンスが問題になりつつあります。バケットを使用したいのですが、投票によるソートはバケットに収まらないようです。
日付による並べ替えは簡単です。ユーザーが「次のページ」をクリックすると、次のバケットに移動し、1 つのドキュメントをクエリします。しかし、投票でソートしたい場合、どうすればこれを行うことができるでしょうか? すべてのバケットを取得してからコメントを並べ替える必要がありますが、これは明らかに非効率的です...
これを達成するための適切なスキーマ設計に関するアイデアはありますか?