Я храню системный журнал в mongodb с индексом построения в соответствии с полем «время». Сейчас в mongodb около 190 тысяч логов. Когда я пытаюсь получить все журналы с помощью метода DBCollection.find() в Java, он тратит почти 10 секунд на просмотр всех документов в коллекции. Я думаю, что может быть что-то, что я пропустил, что привело к плохой работе?
Вот код, который я использовал:
mongo = new Mongo();
DB db = mongo.getDB("Log");
DBCollection coll = db.getCollection("SystemLog");
int count = 0;
long findStart = Calendar.getInstance().getTimeInMillis();
// Sort by time.
BasicDBObject queryObj = new BasicDBObject();
queryObj.put("time", -1);
DBCursor cursor = coll.find().sort(queryObj);
while(cursor.hasNext()) {
DBObject obj = cursor.next();
// Do something
++count;
}
long findEnd = Calendar.getInstance().getTimeInMillis();
System.out.println("Time for traversing all system logs (" + count + "):\t" + (findEnd-findStart) + "ms.");
И напечатанный результат:
Time for traversing all system log (194309): 10496ms.
Я пробовал это несколько раз. Кажется, нет никакой разницы между запуском один раз или несколько раз. Хотя я также пытался удалить sort() и просто найти все журналы из mongodb. Для просмотра всех документов требуется около 6 секунд. Время все еще как бы неприемлемо для моего требования. Есть ли какие-нибудь советы по реализации, которые могут ускорить работу по обходу?
Большое спасибо.