0

これが問題です。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 に格納されることを考慮すると、どちらのパフォーマンスが優れているでしょうか?

この質問から問題が明確でない場合はお知らせください。

4

1 に答える 1

2

1つのクエリ(ケース#2)を実行すると、2つのクエリを実行するよりも高速になります。また、ドキュメントを大きくする(たとえば、#1のpost_idsに新しい投稿を追加する)のはかなり遅い操作です。

于 2012-06-04T15:42:51.353 に答える