2014-01-20 5 views
3

Я пишу веб-приложение, где больше пользователей может выполнять одновременную работу в том же документе в mongodb. Я использую стек mean.io, но я новичок в этом. Мне было интересно, как мангуста управляет параллелизмом. Каждая операция «щелчок пользователя» выполняет сначала чтение, чтобы получить документ, и сохранение после некоторых вычислений. Конечно, последовательность read-calculate-save не является атомарной. Работает ли мангуста с политикой «последнее изменение выигрыша» или же она порождает ошибку в версии? Имеет ли смысл в этом случае использовать очередь?Параллельный доступ к документу с mongoose

Спасибо, с наилучшими пожеланиями.

ответ

4

Да, последнее изменение выиграет.

Очередь может быть хорошим вариантом, чтобы решить эту проблему, но я предложу 2 другие способы:

  1. Вы можете использовать более сложные команды MongoDB, такие как $ вкл (http://docs.mongodb.org/manual/reference/operator/update/inc/) для вычисления attomically (если ваши вычисления слишком сложны, возможно, это невозможно)
  2. Если вам не обязательно нужно иметь правильный счет в любое время, вы можете использовать подход «больших данных» и просто хранить информацию о необработанных кликах. Всякий раз, когда вам нужны данные (или говорят каждый час или день), вы можете использовать структуру агрегата mongodb или их функцию mapreduce для вычисления правильного счета.
+0

Благодарим вас за ответ. Это очень хорошая новость для меня, потому что изменения, которые мой пользователь делает с документами, не соответствуют друг другу (каждый пользователь меняет только свою часть документа). – Enrico

+0

Затем убедитесь, что вы только обновляете эту часть документа, а не извлекаете весь документ, а затем сохраняете весь документ. – saintmac

+1

Не совсем верно, что последние выигрыши: http://aaronheckmann.tumblr.com/post/48943525537/ mongoose-v3-part-1-versioning – WiredPrairie

1

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

a-pattern-for-handling-concurrent

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