-1

ライフサイクルが短いリアルタイムデータを含むmongodbコレクションがあります。必要なときは、見つけたら削除したいのですが、

モルヒネラッパーを使用した擬似コードは次のとおりです。

for(LogEntity log: mongo.find(LogEntity.class, "grabMe", true)){
    mongo.delete(mongo.createQuery(LogEntity.class).filter("logId", log.id));
    //Do work and dispose the log
}

私はこれについていくつかのテストを実行していますが、これはGoogle GCMの一部であるため、重い負荷をシミュレートするのは非常に困難です。

これは、2秒ごとRunnableに供給されるで実行されています。ScheduledExecutorService scheduleAtFixedRate

これはうまくいくのでしょうか、それともこれを行うためのより良い方法がありますか?find()この状況でどのように機能していますか。find()の内部配列を削除して、混乱させますか?たくさんLogEntityあると記憶に残りません。

4

1 に答える 1

0

ライフサイクルが短い高負荷のロギングでは、上限付きコレクションを選択します。この状況では、上限付きコレクション内のドキュメントを削除することはできません。

一方、ロギングに通常のコレクションを選択し、時間指定のクリーンアップを実行する場合は、検索と削除のループが遅くなります。コードが代わりにメソッドをforeach item in collection.find(query) {collection.remove({_id:item._id};}使用する場合。collection.remove(query)

于 2013-01-28T09:10:38.420 に答える