Преобразование итерируемой в список — MongoDB Java

#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 содержит 1 geoWithin и 2 индекса дат. Но моя отладка говорит, что результат от mongo довольно быстрый, но преобразование в список происходит медленно.

3. не могли бы вы, пожалуйста, добавить примеры данных — из обеих коллекций?

4. обновил свой первоначальный вопрос с помощью образца коллекции

5. … и не могли бы вы предоставить предикат фильтра запроса?