Всем привет. Столкнулся с такой штукой - при параллельных запросах вылазиет

иногда ошибка "Command update failed: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction"
Это в документации советуют проверять и делать повторную попытку записи.
А нельзя ли как-то указать монге чтобы она не начинала транзакцию или операцию, пока не окончена предыдущая? Ну как бы работала чтобы просто в 1 поток и всё

12 ответов

94 просмотра

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

Easy Rider-Lord Автор вопроса
Nick
начинать или нет говорит клиент, т.е. ваш софт и д...

Почему особенная ситуация? Это абсолютно нормально. Транзакции нужны и повсеместно используются. Монга просто ведет себя уродски. Она пытается взять блокировку при начале транзакции в течение 5 миллисекунд, и если не получилось, выдает ошибку. А я хочу чтоб она до победного пыталась это сделать. Ну или хотя бы чтобы можно было указать - например, 5000 миллисекунд. Иначе придется везде писать обвязку - чтобы повторные попытки записи были. Лишний код получается, там где его могло бы не быть

Easy Rider Lord
Почему особенная ситуация? Это абсолютно нормально...

а поподробней можно что за инфа про 5 мс, ссылочкой бы

Easy Rider Lord
Почему особенная ситуация? Это абсолютно нормально...

а особенная потому что обычно все решается обычными апдейтами без транзакций которые как раз просто на уровне документа работают без блокировок

Easy Rider-Lord Автор вопроса
Nick
а поподробней можно что за инфа про 5 мс, ссылочко...

Да я щас с телефона, на компе гуглил. В mongo shell это можно поменять. И когда я поменял, там вылезло что «изменено с 5 на 5000», то есть не наврали. Правда это не сработало, как были ошибки так и остались

Easy Rider Lord
Да я щас с телефона, на компе гуглил. В mongo shel...

настройки сессий наверняка надо на каждой сессии указывать, а не разово гдето

Easy Rider-Lord Автор вопроса
Nick
а особенная потому что обычно все решается обычным...

Если мне надо изменить документы сразу в 2 коллекциях или в 2 документах в 1 коллекции? Классический пример. Списываем деньги с 1 юзера и добавляем другому. До кучи можно еще куда-то добавлять инфу о том что был перевод средств. Если не использовать транзакции, то при сбое, могут списаться деньги с 1 человека, а второму не зачислиться, и лог об этом тоже не будет создан. Деньги просто как бы исчезнут. Ну в журнале можно будет посмотреть, но это уже не бизнес-логика приложения будет, а ручная работа по поиску пропавшего бабла

Easy Rider Lord
Если мне надо изменить документы сразу в 2 коллекц...

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

Easy Rider Lord
Если мне надо изменить документы сразу в 2 коллекц...

вот конкретно сейчас в приложении вы что делаете в транзакциях?

Easy Rider-Lord Автор вопроса
Nick
это чуть ли не единственная ситуация применения тр...

Таких ситуаций миллиард. Например вот у меня ситуация такая щас. Я логгирую все обращения к api бекенда. Запись идет просто о запросе (юзерагент, заголовки, тело и т.д.) и потом сразу пишу в другую таблицу количество запросов пользователя за конкретный день (вставка или инкремент). Это должно быть согласовано.

Easy Rider Lord
Таких ситуаций миллиард. Например вот у меня ситуа...

у вас реально в одной транзакции это делается?

Easy Rider-Lord Автор вопроса
Nick
у вас реально в одной транзакции это делается?

Да, но это только 1 пример, таких наверное еще пара десятков.

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта