MongoDB несколько одновременных обращений к одному документу
Я создаю приложение для социальной сети, и меня очень беспокоит следующая вещь. Что происходит, когда в mongoDB много пользователей (допустим, миллионы) пытаются изменить один и тот же документ одновременно. Будут ли какие-либо несоответствия, игнорируемые запросы или какое-либо неожиданное поведение?
Практический пример: 2 коллекции: посты 'posts' и 'likes' будут иметь поля id | имя | информация | numberOfLikes Like будет иметь поля id | пост | fromUser
Когда предполагается, что постам понравились миллионы пользователей, объект "лайк" появляется в коллекции "лайков", а бизнес-логика автоматически увеличивает число OfLikes для поста. Я подумал, что может возникнуть конфликт, когда тонны пользователей пытаются изменить количество лайков одновременно.
3 ответа
Базы данных имеют механизмы для предотвращения подобных ситуаций. Вы можете "заблокировать" различные логические структуры, чтобы быть уверенным, что ваши данные не повреждены - независимо от количества транзакций.
Смотрите больше ниже:
Пара вещей.
Вы говорите, что создаете социальное приложение и ожидаете миллионы лайков и "тонн" их одновременно. Конечно, хорошо учитывать производительность и масштабирование в начале проекта, но вы не собираетесь создавать следующий Facebook прямо сейчас.
Более того, вы, похоже, хотите использовать MongoDB в качестве основной базы данных для этого приложения, и вы, похоже, хотите использовать ее в качестве реляционной базы данных. Прочитайте несколько предвзятую озаглавленную статью " Почему вы никогда не должны использовать MongoDB".
Я бы посоветовал создать резервную копию вашего сайта с помощью реляционной базы данных (что также может быть лучше для запросов типа "Какие публикации понравились этому пользователю" и "Понравился ли этому пользователю этот пост") и регулярно денормализовать их в MongoDB.
В MongoDB операции являются атомарными на уровне документов. См. http://docs.mongodb.org/manual/core/data-modeling-introduction/