Итак, я столкнулся с проблемой mongodb (3.6.4), в которой используются кластерные реплики, сложения / вычитания наборов чисел, и мне нужна помощь для их решения.
Есть коллекция players
, документы игроков имеют номерстолбец balance
, который по умолчанию равен 0.
Теперь столбец баланса обновляется путем добавления или вычитания его, и он хорошо работает, если операции между сохранениями превышают ~ 200 мс.
Еслия пытаюсь обновить его слишком быстро, одно из обновлений теряется.
Цикл выглядит так:
1. Find player document
2. Add some number to balance
3. Save player document
4. Repeat
Как я понимаю, в большинстве случаев последнее обновление не синхронизируется между наборами реплик ив другом цикле я получаю старые данные документа.По какой-то причине он пишет в одну реплику и читает в другую.
Так что мой вопрос заключается в том, как предотвратить потерю таких данных?
Помогло бы обновление mongodb с этим?
db.players.update(
{ _id: "id" },
{ $inc: { balance: -2 } }
)
Прямо сейчас мы не используем это, потому что мы регистрируем значения до / после / количества в другой коллекции тоже