2015-07-27 2 views
0

Я создаю приложение для социальной сети, и меня очень беспокоит следующая вещь. Что происходит, когда в mongoDB многие пользователи (предположим миллионы) пытаются изменить один и тот же документ одновременно , Будут ли какие-либо несоответствия или игнорируются запросы или какое-либо непредвиденное поведение?MongoDB несколько одновременных доступов к одному документу

Практический пример: 2 коллекции: 'posts' и 'нравится' сообщений будут иметь поля id | имя | информация | numberOfLikes нравится будет иметь поля id | сообщение | fromUser

Когда предполагалось, что миллионы пользователей, таких как почта, как объект, появляется в коллекции «любит», а бизнес-логика автоматически увеличивает числоOfLikes для сообщения. Я думал, что если конфликт может возникнуть, когда тонны пользователей попытаются изменить эту должность, нужно учитывать одновременно.

+0

Я на самом деле читаю это как просящий справедливый бит больше, чем уровни блокировки и concurreny. Это очень широкая проблема, особенно в контексте типа «социальной сети». Существуют различные способы подхода к различным способам моделирования этого. Вы можете рассмотреть возможность использования [socialite] (https://github.com/10gen-labs/socialite), который является эталонным проектом MongoDB, направленным на каналы, пользовательский график, агрегацию данных и другие общие понятия. Но я думаю, что конкретный «основной случай» или «расширенный случай» будет лучшим вопросом, который менее широк, чем это возможно. –

+0

@BlakesSeven мой случай - это коллекции 'events' 'activity (нравится, комментарии, goings, hashtags, упоминания и т. Д.). –

ответ

1

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

Смотреть еще ниже:

http://docs.mongodb.org/manual/faq/concurrency/

+0

это имеет смысл на действительно базовом уровне. Правильно ли я понял, что если база данных будет получать 100000 операций записи одновременно на одном документе, она объединит их всех в одну операцию записи? И не собирается ли перегружать базу данных (я имею в виду просто отставание)? @davsp –

0

Несколько вещей.

Вы говорите, что строите социальное приложение и ожидаете, что миллионы понравятся и «тонны» из них в одно и то же время. Конечно, неплохо рассмотреть производительность и масштабирование в начале проекта, но вы не собираетесь строить следующий Facebook прямо сейчас.

Furhtermore, похоже, вы хотите использовать MongoDB в качестве основной базы данных для этого приложения, и вы, похоже, хотите использовать его в качестве реляционной базы данных. Прочтите несколько предвзятую статью Why You Should Never Use MongoDB.

Я хотел бы предложить, поддерживая ваш сайт с реляционной базой данных (которая также может быть лучше для запросов, как «Что сделал сообщения этого пользователя как» и «ли этот пользователь уже как этот пост») и денормализации что в MongoDB через регулярные промежутки времени.

+0

Большое спасибо за ваш ответ, я просто использую MongoDB, чтобы он работал быстро, но знаете ли вы ответ на мой вопрос? –

+0

Другие уже ответили на это. – CodeCaster

Смежные вопросы