mongodb(pymognoドライバー)でのクエリで問題が発生しました。
ここに私の問題があります:私は1日あたり約1億(100000000)のドキュメントをmongodbに挿入(更新)する必要があります。追加を更新する必要があるのと同じキーフィールドの更新の使用をあきらめ、一括挿入を使用するように修正しました(更新のパフォーマンスは一括挿入よりも遅くなります)。
これが私のデータベースのスケッチスキームです。
{_id:xxx, F1:1 , F2:"test1", TS": 2011/01}
{_id:xxx, F1:1 , F2:"test2", TS": 2011/02}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/03}
{_id:xxx, F1:3 , F2:"test1", TS": 2011/04}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/05}
.....
(4 billion up or more)
クエリを実行するとき、F1(field1)で最新のTSグループを取得したいだけです。
「グループ」集約フレームワークがそれを実行できることは知っていますが、データベースをシャーディングしており、データベースのシャーディングでグループ操作を許可していません。
また、map-reduceを使用してそれを実行しようとしましたが、十分なクエリパフォーマンスが得られません。
私が使用している唯一のクエリは「$in」操作です。
db.test.find({"F1":{"$in":[1,2,3,....]}})
ターゲット配列内のすべてのドキュメントを取得しますが、キーF1ごとに最新のドキュメントのみを取得したいと思います。
{_id:xxx, F1:1 , F2:"test2", TS": 2011/02}
{_id:xxx, F1:2 , F2:"test1", TS": 2011/05}
{_id:xxx, F1:3 , F2:"test2", TS": 2011/03}
どうすればそれを取得できますか?
ps。ターゲット配列には、一括クエリしたい100万個の要素が含まれている可能性があります。
それを行う良い方法はありますか?