I have a mongodb collection with realtime data with a short lifecycle.
When I need them I also want to delete the once I find,
Here’s pseudo code using morphia wrapper:
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
}
I’m running some tests on this and its really difficult to simulate a heavy load because this is part of Google GCM.
This is running in a Runnable that are fed from an ScheduledExecutorService scheduleAtFixedRate every 2 sec.
Is this going to work or is there a better way to do this. How is the find() working in this situation. Will I mess up the find()’s internal array by deleting from it. If there are many LogEntity I cannot hold them in memory.
heavy load logging with short lifecycle, I will choose capped collection. in this situation, you cannot delete a document in the capped collection.
on the other hand, if you wanna choose normal collection for logging and do a timed clean up, your find and delete loop is slow. if your code is
foreach item in collection.find(query) {collection.remove({_id:item._id};}usecollection.remove(query)method instead.