これが問題です。MongoDB-PHP を使用しています。
私たちのアプリケーションには、ユーザーが投稿できる多くのユーザー グループがあります。現在、これらのグループの投稿 ID をそのグループのドキュメントに配列形式で維持しています。そのため、最初の 10 個の投稿を取得する必要がある場合は、スライス操作を使用して配列から取得できます。
例:ケース 1
コレクションの投稿: //このコレクションには、さまざまなグループのすべての投稿が保存されます
{
{"_id":"1","post_text":"....",...}
{"_id":"2","post_text":"....",...}
} `
コレクション グループ: //このコレクションには、各グループのドキュメントが含まれます
{
{
"_id":"1"
"name":"Group ABC",
"post_ids":{"1","2"...."100"}
//1,2..100 represents MongoIDs of corresponding posts of this group
//so i can slice first 10 posts of this group when someone visits this page
}
}
`
これらの投稿 ID をグループのドキュメントに保存するのとは対照的に、グループID にインデックスを付けて投稿コレクションに保存すると、.
例:ケース 2
コレクションポスト
{
{"_id":"1","group_id":"1","post_text":"....",...}
{"_id":"2","group_id":"2","post_text":"....",...}
}
また、ケース 1 では、配列要素が順番にプッシュされるため、並べ替え操作を適用する必要はありませんが、ケース 2 では、検索操作の後に並べ替え (タイムスタンプ基準による) を適用する必要があることに注意してください。これにより、すべてのドキュメントがメモリから読み取られ、次に、それらにソートを適用します。
インデックスが RAM に格納されることを考慮すると、どちらのパフォーマンスが優れているでしょうか?
この質問から問題が明確でない場合はお知らせください。