#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
Можно удалить, хотя теперь уникальность поля обрабатывается индексом, поэтому вместо ошибки проверки при попытке сохранить документ вы получаете исключение, поэтому мне пришлось изменить некоторые части кода, который обрабатывал создание документа, имейте это в виду, если вам придется иметь дело с подобной ситуацией.