Мне было интересно Spring Mongo API
для find
загружает все в List
. Если результат поиска содержит миллиард записей, не повлияет ли это на память? Может ли кто-то предложить лучший способ достичь этого, не загружая все это в память. Использование лимита может помочь, но тогда есть недостаток, что он не знает, вставлен ли новый документ в коллекцию. Ну, find by limit будет иметь тот же эффект, если коллекция изменит после чтения X of billion
записей.Захват неизвестного документа, добавленного во время большого поиска в Mongodb
Так два вопроса:
- Повышение производительности не загружая все в памяти
- Как бы вы решить эту не-известный документ добавлен в процессе обработки?
код из API
List<T> result = new ArrayList<T>();
while (cursor.hasNext()) {
DBObject object = cursor.next();
result.add(objectCallback.doWith(object));
}
Это реальный прецедент. В Expedia (ваш клиент) наша группа также является держателем данных. Любая группа может запросить все данные с начала времени от нас. Мы поощряем сбор данных каждый месяц, но может быть случай, когда группа просто хотела бы начать новую работу. Эти группы проводят анализ исторических данных. Таким образом, как он был решен, используется предел вместимостью 100 000 записей. –
Которое я считаю потоковым 7-10 миллионов записей в течение 25 минут между двумя разными центрами обработки данных в двух разных местах. Таким образом, теперь возникает вопрос о том, как получить новый документ или обновленный документ, который произошел между 25 минутами. Я могу получить новые данные по типу '_id', но как насчет обновлений? Должен ли я включать сортировку по 'update'? –
@java_dude Только ваш оригинальный вопрос об обнаружении новых документов, вставленных при повторении большого запроса; обновления должны обрабатываться по-разному. Вы можете использовать значение часового с меткой времени (например.последняя измененная дата в документах) или настроить процесс, чтобы привязать oplog (ы) к модифицированным документам на основе пространства имен и фильтра запросов. В зависимости от вашей модели данных могут быть более эффективные варианты, но это более продолжительное обсуждение, чем работа в комментариях здесь :). – Stennie