Монгоидные индексы и проверки

#ruby-on-rails #mongodb #indexing #mongoid

#ruby-on-rails #mongodb #индексирование #mongoid

Вопрос:

У меня есть приложение Rails 5 / Mongoid 7, которое анализирует файлы и добавляет содержимое в базу данных. синтаксический анализ занимает все больше и больше времени после обработки каждого файла, и я думаю, это потому, что у меня есть validates_uniqueness_of в одном из полей, поскольку коллекция увеличивается, эта проверка должна проверять большую коллекцию, имеет смысл.

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

Кажется, что нигде не могу найти информацию об этом.

Модель:

 class SomeModel
  include Mongoid::Document
  include Mongoid::Timestamps

  field :some_field, type: String

  index({ some_field: 1 }, { unique: true, name: "some_field_index" })

  validates_uniqueness_of :some_field, { case_sensitive: false }
end
  

Примечание: Я запустил rake db:mongoid:create_indexes , но еще не пробовал новый синтаксический анализ, хотел сначала узнать, как с этим справиться.

Ответ №1:

Итак, я провел несколько тестов, и добавление индекса привело к огромной разнице во времени обработки, я оставлю свой ответ здесь для потомков.

validates_uniqueness_of Можно удалить, хотя теперь уникальность поля обрабатывается индексом, поэтому вместо ошибки проверки при попытке сохранить документ вы получаете исключение, поэтому мне пришлось изменить некоторые части кода, который обрабатывал создание документа, имейте это в виду, если вам придется иметь дело с подобной ситуацией.