После обновления SpringData MongoDB от 1.6.1 до 1.7.0 У меня возникают проблемы с производительностью.SpringData MongoDB ошибка производительности/выпуск после обновления
Особенно это плохо запрос:
@Query(value = "{$and: [{?0 : { $exists: true }}, {'lastChanged': {$gt: ?1}}] }")
List<Event> findAllByPrefixedInvitedUserAndLastChangedLessThan(String prefixedUserID, LocalDateTime lastChanged);
где prefixedUserID
запрашивает встроенный документ (доступ по строке "invitedUser.userID"
, которая, кстати, вещь, которую я не мог решить, используя синтаксис стандартного запроса ни с пользовательским запросом)
Фактическая проблема заключается в том, что этот запрос занимает около 8-10 секунд с базой данных, содержащей 4 (!!!) события.
Для исследования на эту плохую работу, я уменьшил уровень журнала для пружинных данных для отладки и получил файл журнала ~ 20,0000 линии для вызова одной функции (getAllEventsForUser
функции из класса de.steilerdev.myVerein.server.controller.user.EventController
называется -> можно найти в мой repo). Я положил журнал в this gist.
Как вы можете видеть, MongoDbUtils [doGetDB] - Getting Mongo Database name=[myVerein]
называется тысячи раз. Я не могу действительно отладить эту проблему, поэтому я надеюсь, что любой из разработчиков проекта изучит это.
Другая возможность - проблема конфигурации, но я не мог найти никакого уведомления в редакторе изменений, в котором говорилось, что я должен был изменить какую-либо конкретную запись при обновлении. Тем не менее, вы можете найти всю базу данных и пружинную конфигурацию, связанные в этой папке моего репо (ссылка выше):
/src/main/webapp/WEB-INF/configuration/
(К сожалению, у меня нет достаточной репутации размещать более двух ссылок)
I надеюсь, есть кто-то, кто может помочь мне в решении этой проблемы. Заранее спасибо!
PS: неоднократно вызов функции doGetDB
происходит на все мои запросы, но реже («только» несколько сот раз)
PPS: Я бег MongoDB версия 3.0.1
Любая возможность добавить тестовый пример, который воспроизводит выход журнала? Вызов метода репозитория или тому подобное? –
Я не уверен, что вы ищете, но да, вызов этой функции репозитория вызывает большую часть этого вывода. Полный журнал был создан функцией, упомянутой выше, которая может быть найдена в связанном репозитории github. Это функция 'getAllEventsForUser' из класса [de.steilerdev.myVerein.server.controller.user.EventController] [1]. Надеюсь, это то, что вы ищете. [1]: https://github.com/steilerDev/myVerein/blob/master/Code/Server/src/main/java/de/steilerdev/myVerein/server/controller/user/EventController.java –
Я ищу некоторый код, который я могу выполнить, чтобы воспроизвести вывод журнала, который вы видите. Обычно это тест. –