Spring Data Mongo @Indexed создает индекс несколько раз - PullRequest
0 голосов
/ 09 января 2019

Я использую аннотацию @Indexed, используя Spring Data Mongo, за которой следует @Document на уровне класса.

Я замечаю из журналов, что каждый раз, когда устанавливается соединение с БД Mongo, создается индекс.

Это нормальное поведение и не создаст ли перегрузку базы данных?

Пожалуйста, дайте мне понять жизненный цикл аннотации @Indexed и есть ли способ игнорировать создание индекса, если он уже создан?

Я не могу найти ничего задокументированного для этого.

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Как я знаю, что бы вы ни делали, приложение вызывает команду для создания индекса (новый или уже выход). И этот процесс хорош для запуска приложения и проверки всего. О том, что эта команда делает в MongoDb, давайте посмотрим подробнее

  1. Что делает Index и как это работает (https://en.wikipedia.org/wiki/Database_index) Сортировка: сделайте копию и отдайте этот заказ (все, что с правилами, поможет ускорить поиск) Может быть, это B-Tree или другая структура

  2. Что будет делать команда createIndex? https://jira.mongodb.org/browse/SERVER-12699 https://jira.mongodb.org/browse/SERVER-10879 Эти два вопроса проясняют это, он не будет делать то же самое, что уже выход Так что логика проста.

Приложение: я хочу кое-что (создайте индекс и убедитесь, что он там будет) ~> Я должен вызвать CreateIndex

MongoDb: принять команду: - Я вижу, что это новое: создать его - Я вижу это дубликатом: О, сбрось действие, я пропущу это и дам тебе знать.

Это мое быстрое исследование этой проблемы

0 голосов
/ 09 января 2019

Использование @Indexed обеспечивает при первом доступе к объекту, в котором созданы объявленные индексы. Spring Data MongoDB IndexOperations вызывает createIndex(…). Обычно это не работает, если индекс существует с заданной спецификацией. Обычно применяется к приложениям, которые запускаются и работают довольно долго

AWS Lambda скорее очищает экземпляры, которые не используются для освобождения ресурсов. Я не уверен, как это влияет на производительность MongoDB, когда вы звоните, например, createIndex(…) каждую минуту или около того. Если вы не видите негативного воздействия, то все может быть хорошо

Создание индекса в MongoDB подготавливает эксклюзивную блокировку (IX, намерение монопольной блокировки) и увеличивает эту блокировку во время создания индекса. Это может оказать влияние, если достаточные процессы попытаются вызвать createIndex(…).

Какие есть альтернативы?

  • Сохранить постоянный экземпляр службы (что в некоторой степени противоречит AWS Lambda)
  • Полностью удалить @Indexed и переместить создание индекса во внешний процесс (Создание индексов извне)
  • Удалите @Indexed и создайте индексы программно (это рекомендуемый подход, обеспечивающий максимальную гибкость. Вы можете проверить, имеются ли требуемые индексы, и пропустить создание индекса).

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...