Индексация Mongodb должна быть переопределена каждый раз

1

Я действительно новичок в noSql и mongoDb, и многие вопросы в моей руке. После поиска я нашел Morphia, ODM framework для java, в документах Morphia мы можем увидеть некоторые аннотации, такие как @Indexed, которые приводят к созданию индекса для этого конкретного колонка. Но запутанная проблема для меня - "datastore.ensureIndexes()", - говорится в документе.

Если вы используете @Indexedannotation, вы вызываете datastore.ensureIndexes() после регистрации объекта после запуска приложения.

Поэтому я могу видеть свой вопрос в своем уме после прочтения этого вопроса: "Мы должны каждый раз переопределять все индексы? Я ожидаю, что мы сможем определить индексы, когда-то, как mongeez (mongeez, похоже на Liquibase), запускаться один раз.

Теги:
mongodb-query
nosql
morphia

2 ответа

2
Лучший ответ

Итак, вы имеете в виду документацию здесь и, возможно, затем немного разъясните, что это значит, а также мнения, которые предлагаются в этом документе.

Так как документ говорит, согласно вашей цитате, то, что определения индексов, которые вы предоставляете для своих классов "Entity", подхватываются методом .ensureIndex() в хранилище данных ", когда это вызывается для перехода и создать все эти индексы.

Второй пункт в документации определяет это "как пример" вместе с определениями сопоставления классов следующим образом:

Morphia m = ...
Datastore ds = ...

m.map(Product.class);
ds.ensureIndexes(); //creates all defined with @Indexed 

И действительно, это будет вызываться каждый раз, когда ваше приложение будет запущено, а некоторые считают эту передовую практику, чтобы все определения были "обновлены" как есть. Но также обратите внимание, это только мнение.

Как вы, кажется, указываете, вероятно, было бы лучше, если бы у вас просто был какой-то крюк "post deploy", в котором можно было бы вызывать, когда вы фактически "развертываете" свое приложение или "по необходимости", где вы определяете, определение ваших индексов действительно требуется.

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

Таким образом, фактическая интерпретация заключается в том, что использование Morphia фактически не означает, что ваши индексы переопределяются каждый раз, когда приложение запускается "автоматически", но если вы поместите вызов этого .enssureIndexes() где-нибудь, где он будет вызываться каждый раз приложение запускается, то он будет делать это.

Не называйте это в том же месте, что и сопоставления классов. Поместите его в другое место, где вы можете контролировать это, и проблема решена.

  • 0
    Я просто думаю, что мы можем рассмотреть для индексации с Mongeez?
3

Вызов securityIndexes() практически свободен, если индексы уже установлены. Вы можете (и, возможно, должны) поместить этот вызов непосредственно после ваших картографических вызовов без какого-либо ощутимого воздействия. Будут созданы новые индексы, но существующие индексы будут по существу не-ops.

Для чего это стоит, документацию по морфию можно найти здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню