Size: a a a

Node.js — русскоговорящее сообщество

2020 May 11

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
А почему просто указание unique не подходит?
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Veaceslav Artiom
А зачем данные перекидывать между процессами ?
Один пользователь может сидеть в разных чатах
источник

nn

no name in Node.js — русскоговорящее сообщество
Алексей Попов
А почему просто указание unique не подходит?
Я использую плагин mongoose-auto-increment. Для поля(field) -- id.

К примеру, у меня в схеме есть уникальное поле telegramId. Так вот, при одновременном запуске 2-х запросов на создание одинаковых документов {telegramId: 1}, один из них выполняется, а второй  выдает ошибку, как и должен. Но вот счётчик лагает в плагине (auto-increment) и меняет значение на -1, и id (field) попавшего документа в коллекцию = 2. А ID 1 получается не попал в коллекцию из-за подозрения на дубликат, НО count под него было выделено и изменено на +1, что разрешило из-за гонки условий следующему документу получить ID 2.

Вот такое случилось когда у меня приложение зависло и бот в телеграме не отвечал. Потом я его перезапустил, он начал обрабатывать сообщения все сразу. Я отправил несколько сообщений, а проблема в том, что у меня стоит мидлвер, который проверяет наличие пользователя в базе по ID пользователя. И таким образом по начале обработки сообщений, несколько от одного пользователя сразу начинают параллельно обрабатываться и плагин auto increment'a лагает
источник

VA

Veaceslav Artiom in Node.js — русскоговорящее сообщество
Sergey 🛸
Один пользователь может сидеть в разных чатах
И что ?
источник

VA

Veaceslav Artiom in Node.js — русскоговорящее сообщество
Для каждого чата у вас отдельный воркер ?
источник

꧁岡

꧁倫太郎 岡部꧂... in Node.js — русскоговорящее сообщество
-сервер
источник

ЯЛ

Ярослав Лучер... in Node.js — русскоговорящее сообщество
🅚🅘🅝🅓🅔🅡🅦🅞🅝🅓
Metanit.com
Как пробежишься полностью по курсу - можешь углуляться в доку и статьи
Слушай, офигенный сайт
источник

🅚

🅚🅘🅝🅓🅔🅡🅦🅞🅝🅓... in Node.js — русскоговорящее сообщество
Ярослав Лучер
Слушай, офигенный сайт
Можешь в личку, если что
источник

VA

Veaceslav Artiom in Node.js — русскоговорящее сообщество
? Это типо стёб как я понимаю над идеей воркер = чат
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
no name
Я использую плагин mongoose-auto-increment. Для поля(field) -- id.

К примеру, у меня в схеме есть уникальное поле telegramId. Так вот, при одновременном запуске 2-х запросов на создание одинаковых документов {telegramId: 1}, один из них выполняется, а второй  выдает ошибку, как и должен. Но вот счётчик лагает в плагине (auto-increment) и меняет значение на -1, и id (field) попавшего документа в коллекцию = 2. А ID 1 получается не попал в коллекцию из-за подозрения на дубликат, НО count под него было выделено и изменено на +1, что разрешило из-за гонки условий следующему документу получить ID 2.

Вот такое случилось когда у меня приложение зависло и бот в телеграме не отвечал. Потом я его перезапустил, он начал обрабатывать сообщения все сразу. Я отправил несколько сообщений, а проблема в том, что у меня стоит мидлвер, который проверяет наличие пользователя в базе по ID пользователя. И таким образом по начале обработки сообщений, несколько от одного пользователя сразу начинают параллельно обрабатываться и плагин auto increment'a лагает
Ты хочешь сказать, что монга при указании, что индекс unique, может это указание проигнорировать, и создать записи с одинаковыми значениями? Не верится. Такой баг должен быть известен, и наверняка был бы достаточно оперативно исправлен
источник

VA

Veaceslav Artiom in Node.js — русскоговорящее сообщество
Алексей Попов
Ты хочешь сказать, что монга при указании, что индекс unique, может это указание проигнорировать, и создать записи с одинаковыми значениями? Не верится. Такой баг должен быть известен, и наверняка был бы достаточно оперативно исправлен
Да он походу там отдельный плагин использует. А монго явно в доках говорит что запрос на количество документов может быть чутка не правильный так как индексация не идёт сразу в ту же мил секунду. Плагин же видимо как раз на это и смотрит.
источник

VA

Veaceslav Artiom in Node.js — русскоговорящее сообщество
no name
Я использую плагин mongoose-auto-increment. Для поля(field) -- id.

К примеру, у меня в схеме есть уникальное поле telegramId. Так вот, при одновременном запуске 2-х запросов на создание одинаковых документов {telegramId: 1}, один из них выполняется, а второй  выдает ошибку, как и должен. Но вот счётчик лагает в плагине (auto-increment) и меняет значение на -1, и id (field) попавшего документа в коллекцию = 2. А ID 1 получается не попал в коллекцию из-за подозрения на дубликат, НО count под него было выделено и изменено на +1, что разрешило из-за гонки условий следующему документу получить ID 2.

Вот такое случилось когда у меня приложение зависло и бот в телеграме не отвечал. Потом я его перезапустил, он начал обрабатывать сообщения все сразу. Я отправил несколько сообщений, а проблема в том, что у меня стоит мидлвер, который проверяет наличие пользователя в базе по ID пользователя. И таким образом по начале обработки сообщений, несколько от одного пользователя сразу начинают параллельно обрабатываться и плагин auto increment'a лагает
А зачем тебе в прицепе делать типо инт ид ? Не легче использовать ид от монги ?
источник

nn

no name in Node.js — русскоговорящее сообщество
Алексей Попов
Ты хочешь сказать, что монга при указании, что индекс unique, может это указание проигнорировать, и создать записи с одинаковыми значениями? Не верится. Такой баг должен быть известен, и наверняка был бы достаточно оперативно исправлен
Нет, я написал, что один запрос выполняет и документ идёт в базу, а на втором выбивает ошибку из-за подозрения на дубликат. Но плагин через $inc увеличивает count у себя в системном значении и count становится на 1 больше, далее вызывает next() для передачи управления для дальнейшего сохранения документа, но на сохранении выбивает ошибку из-за дубликата, но count уже был увеличен и первому документу присвоен ID 2
источник

nn

no name in Node.js — русскоговорящее сообщество
И значения уже везде неверные)
источник

nn

no name in Node.js — русскоговорящее сообщество
Veaceslav Artiom
А зачем тебе в прицепе делать типо инт ид ? Не легче использовать ид от монги ?
Для натуральных чисел)
источник

nn

no name in Node.js — русскоговорящее сообщество
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
no name
Нет, я написал, что один запрос выполняет и документ идёт в базу, а на втором выбивает ошибку из-за подозрения на дубликат. Но плагин через $inc увеличивает count у себя в системном значении и count становится на 1 больше, далее вызывает next() для передачи управления для дальнейшего сохранения документа, но на сохранении выбивает ошибку из-за дубликата, но count уже был увеличен и первому документу присвоен ID 2
Так бага в плагине? Исправь её
Ну и точно ли тебе нужно то, что ты делаешь
источник

nn

no name in Node.js — русскоговорящее сообщество
Алексей Попов
Так бага в плагине? Исправь её
Ну и точно ли тебе нужно то, что ты делаешь
Баг в том, что у монгодб нету официальной поддержки авто инкремента
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
no name
Баг в том, что у монгодб нету официальной поддержки авто инкремента
Твоё описание проблемы касается плагина, а не монги. В конце концов никто не мешает тебе организовать автоинкремент самостоятельно, без плагина с его багами
источник

nn

no name in Node.js — русскоговорящее сообщество
Алексей Попов
Твоё описание проблемы касается плагина, а не монги. В конце концов никто не мешает тебе организовать автоинкремент самостоятельно, без плагина с его багами
Например как?
источник