иногда ошибка "Command update failed: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction"
                  
                  
                  Это в документации советуют проверять и делать повторную попытку записи.
                  
                  
                  А нельзя ли как-то указать монге чтобы она не начинала транзакцию или операцию, пока не окончена предыдущая? Ну как бы работала чтобы просто в 1 поток и всё
                  
                  
                
начинать или нет говорит клиент, т.е. ваш софт и делается это всегда в явном виде, проверяйте код где вы стартуете их. Вообще использование транзакций - это особенная ситуация, когда почемуто другими способами вы не можете решить проблему и осознанно выбираете этот путь, и значит вы понимаете их ограничения и что в случае фейла транзакции надо чтото делать либо ретраить либо еще чтото либо вообще просто ошибку юзеру показать и откинуть запрос.
 Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Почему особенная ситуация? Это абсолютно нормально. Транзакции нужны и повсеместно используются. Монга просто ведет себя уродски. Она пытается взять блокировку при начале транзакции в течение 5 миллисекунд, и если не получилось, выдает ошибку. А я хочу чтоб она до победного пыталась это сделать. Ну или хотя бы чтобы можно было указать - например, 5000 миллисекунд. Иначе придется везде писать обвязку - чтобы повторные попытки записи были. Лишний код получается, там где его могло бы не быть
а поподробней можно что за инфа про 5 мс, ссылочкой бы
а особенная потому что обычно все решается обычными апдейтами без транзакций которые как раз просто на уровне документа работают без блокировок
 Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да я щас с телефона, на компе гуглил. В mongo shell это можно поменять. И когда я поменял, там вылезло что «изменено с 5 на 5000», то есть не наврали. Правда это не сработало, как были ошибки так и остались
настройки сессий наверняка надо на каждой сессии указывать, а не разово гдето
 Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Если мне надо изменить документы сразу в 2 коллекциях или в 2 документах в 1 коллекции? Классический пример. Списываем деньги с 1 юзера и добавляем другому. До кучи можно еще куда-то добавлять инфу о том что был перевод средств. Если не использовать транзакции, то при сбое, могут списаться деньги с 1 человека, а второму не зачислиться, и лог об этом тоже не будет создан. Деньги просто как бы исчезнут. Ну в журнале можно будет посмотреть, но это уже не бизнес-логика приложения будет, а ручная работа по поиску пропавшего бабла
это чуть ли не единственная ситуация применения транзакций в принципе, когда без них реально нельзя. Вы же говорили что это обычная ситуация и они походу нужны чуть ли не на каждый чих
вот конкретно сейчас в приложении вы что делаете в транзакциях?
 Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Таких ситуаций миллиард. Например вот у меня ситуация такая щас. Я логгирую все обращения к api бекенда. Запись идет просто о запросе (юзерагент, заголовки, тело и т.д.) и потом сразу пишу в другую таблицу количество запросов пользователя за конкретный день (вставка или инкремент). Это должно быть согласовано.
у вас реально в одной транзакции это делается?
 Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Easy Rider
                          Lord
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, но это только 1 пример, таких наверное еще пара десятков.
Обсуждают сегодня