Я запускаю тонны фоновых заданий и продолжаю работать в состоянии гонки на одной конкретной задаче.MongoDB: Установить уровень сбора пессимистического замка
Rails 4, Mongoid, Sidekiq, Redis
Профиль has_many ProfilePictures
Когда этот код вызывается несколькими потоками
def set_as_active_picture
ProfilePicture.where({
profile_id: self.profile.id,
selected: true}
).update_all('$set' => {selected: false})
self.set selected: true
self.profile.set(picture_url: self.image.url)
end
Я ударил состояние гонки, где несколько ProfilePicture документов выбранного набора к истине.
То, что я хотел бы сделать, это установить пессимистическую блокировку на набор документов ProfilePicture, которые удовлетворяют профилю profile_id == self.profile_id или, по крайней мере, в коллекции ProfilePicture.
Я ничего не могу найти о встроенной блокировке для Mongoid или Mongo, поэтому я посмотрел на некоторые драгоценные камни.
Я добавил afeld/mongoid-locker, но это работает только на экземплярах одной модели. Я попытался добавить оба trakio/mongo-lock и servio/mongo-locking, но не мог понять, как использовать mongo-lock (что делает ссылка «my_key»?) И mongo-locking дает мне исходную ошибку для Active_Support 3.0. 4
Как разместить пессимистическую блокировку в наборе документов ProfilePicture, принадлежащих к определенному профилю?
Вы работаете в классической проблеме mongodb - если ее можно избавиться от нее как можно скорее - хорошо читает: http://developer.olery.com/blog/goodbye-mongodb-hello-postgresql/ - https: // hn.algolia.com/?query=mongo&sort=byPopularity&prefix&page=0&dateRange=all&type=story – marvwhere
Ха-ха, вы говорите, что это классическая проблема монгодба? Отлично, еще одна причина, по которой я ненавижу манго. Я хотел бы переключиться на что-то вроде postgres, но, к сожалению, это не мое решение. – cvgw