#java #mongodb
Вопрос:
каков наиболее эффективный способ преобразования итерируемого в список? ниже приведен мой код:
для более медленного сбора:
Iterable<TestEntity> entityResult = testCollection.find(and(
or(
geoWithin("aLocation", BasicDBObject.parse(area)),
geoWithin("bLocation", BasicDBObject.parse(area))
),
lte(START_DATE, anotherDate),
gte(END_DATE, Date2),
and(exists(STATUS), ne(STATUS, "TEST"))
)).maxTime(mongoDisasterMaxExecutionMaxTime, TimeUnit.MINUTES);
List<TestEntity> testSummary = StreamSupport.stream(entityResult.spliterator(), true).collect(Collectors.toList());
но для записи 80 тысяч записей это занимает почти 15 секунд. У меня есть еще одна коллекция, которая занимает около секунды для 30 тысяч записей.
У меня также есть составные индексы для обеих коллекций. Поэтому я не думаю, что есть проблема с тем, что монго медленно возвращает данные. когда я печатаю журналы для MongoDB find
, это довольно быстро, но streamsupport
команда занимает 15 секунд.
Коллекция 1 (медленно)
{
"_id" : “1234”,
"orderNumber" : “1234”,
"lastUpdateDate" : ISODate("2021-09-11T00:00:00.000Z"),
"lastModifiedTime" : NumberLong(1631400026077),
"product” : “xyzzy”,
“Feature” : "1",
"brand" : "Brand abc”,
“amountUSD" : 100.2,
“Desc” : “test”,
“Desc”2 : “test “2,
“anotherDate" : ISODate("2021-09-19T00:00:00.000Z"),
“Date2” : ISODate("2021-09-23T00:00:00.000Z"),
“IdNew” : “3456”,
“Count” : 1,
“customerName" : “Dave”,
“occuranceTime" : ISODate("2021-09-03T00:00:00.000Z"),
"status" : “confirmed,
“aLocation" : [
-100.672735,
32.849354
],
“bLocation" : [
-69.816366,
42.808233
]
}
Коллекция 2 ( не медленная)
{
"_id" : “1234”,
"orderNumber" : “1234”,
"lastUpdateDate" : ISODate("2021-09-11T00:00:00.000Z"),
"lastModifiedTime" : NumberLong(1631400026077),
"product” : “xyzzy”,
“Feature” : "1",
"brand" : "Brand abc”,
“amountUSD" : 100.2,
“Desc” : “test”,
“Desc”2 : “test “2,
“anotherDate" : ISODate("2021-09-19T00:00:00.000Z"),
“Date2” : ISODate("2021-09-23T00:00:00.000Z"),
“IdNew” : “3456”,
“Count” : 1,
“customerName" : “Dave”,
“occuranceTime" : ISODate("2021-09-03T00:00:00.000Z"),
"status" : “confirmed,
“Location”Id : “8888”,
“aLocation" : [
3.063211,
50.633679
]
}
Комментарии:
1. можете ли вы подробнее рассказать о различиях между двумя упомянутыми вами коллекциями (кроме количества записей)? Форма документов будет играть большую роль в производительности. Если у вас большие документы или неограниченные массивы, сериализация займет намного больше времени. Кроме того, используете ли вы фреймворки или какие-либо пользовательские кодеки? Какой драйвер вы используете?
2. коллекция 1 (более медленный отклик) содержит 2
geoWithin
и 2 индекса дат коллекция 2 содержит 1geoWithin
и 2 индекса дат. Но моя отладка говорит, что результат от mongo довольно быстрый, но преобразование в список происходит медленно.3. не могли бы вы, пожалуйста, добавить примеры данных — из обеих коллекций?
4. обновил свой первоначальный вопрос с помощью образца коллекции
5. … и не могли бы вы предоставить предикат фильтра запроса?