Size: a a a

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

2020 May 03

В

Виталий in Node.js — русскоговорящее сообщество
меня на фронте то от него тошнит
источник

В

Виталий in Node.js — русскоговорящее сообщество
самый ужасный оверхед, который могли придумать в мире фронтэнда
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Iliya Kobaliya
Ребят ,есть модуль для работы с  БД.В ней есть 2 метода,(добавить/удалить).Я до конца не понял как и зачем,но есть шанс ,что пользователь выполнит сразу 2 операции(что сломает приложение).Как мне лишить пользователя выполнить сразу 2 операции?То есть пока не выполнится  первая,не выполнять вторую?(без транзакции).Все это не сервере express ))Какие то практики есть?
Если выполняете вторую операцию в то время, как действие должно быть недоступным, то что вы хотите:
• Ждать, пока не будет свободно – и выполнить её?
Или
• Вернуть сообщение/ошибку о том, что действие невозможно? (Это можно и проигнорировать, равносильно «дропнуть запрос и ничего не делать»).
источник

В

Виталий in Node.js — русскоговорящее сообщество
Kool Guy
я кстати юзал редакс на сервере один раз
кстати, из любопытства, я молчу что у тебя может быть несколько машин, на которых исполняется твой стейт-зависимый код, но даже если мы просто возьмем идею о том что у тебя кластер 4 процессов на 1 машине, как ты свой редакс причесывал
источник

В

Виталий in Node.js — русскоговорящее сообщество
Алексей Клименко
Если выполняете вторую операцию в то время, как действие должно быть недоступным, то что вы хотите:
• Ждать, пока не будет свободно – и выполнить её?
Или
• Вернуть сообщение/ошибку о том, что действие невозможно? (Это можно и проигнорировать, равносильно «дропнуть запрос и ничего не делать»).
ждать нельзя, это растит память исполняемого процесса и при нагрузке он просто умрет
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Алексей Клименко
Если выполняете вторую операцию в то время, как действие должно быть недоступным, то что вы хотите:
• Ждать, пока не будет свободно – и выполнить её?
Или
• Вернуть сообщение/ошибку о том, что действие невозможно? (Это можно и проигнорировать, равносильно «дропнуть запрос и ничего не делать»).
Я думаю логично бы было дождаться окончания первой и выполнить вторую )(но это не точно))))
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Виталий
ждать нельзя, это растит память исполняемого процесса и при нагрузке он просто умрет
Понял)
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Виталий
ждать нельзя, это растит память исполняемого процесса и при нагрузке он просто умрет
Можно ждать, вообще-то от задачи зависит.
источник

В

Виталий in Node.js — русскоговорящее сообщество
кстати любопытный кейс. прям уже вижу, пользователь 1 создает запрос в бд на создание , пользователь 2 еще не получив элемента по запросу или эвенту (сокты, нтификации) уже откуда-то о нем знает и дает команду удалить, конечно же идальный кейс поставить чекер через сеттаймаут пока в бд это не запишется чтобы потом дропнуть, лайк....
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Виталий
ждать нельзя, это растит память исполняемого процесса и при нагрузке он просто умрет
Что-то не так написано если ожидание растит память
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Виталий
кстати любопытный кейс. прям уже вижу, пользователь 1 создает запрос в бд на создание , пользователь 2 еще не получив элемента по запросу или эвенту (сокты, нтификации) уже откуда-то о нем знает и дает команду удалить, конечно же идальный кейс поставить чекер через сеттаймаут пока в бд это не запишется чтобы потом дропнуть, лайк....
Может быть 2 запроса на создание
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
Виталий
если нода запущена не в кластере, то гарантированно выполняется только 1 элемент кода
Это же io, там есть параллелизм
источник

В

Виталий in Node.js — русскоговорящее сообщество
если у тебя есть ожидание, у тебя есть минимум объекты реквеста и респонса, они не маленькие, у тебя в замыкании стопудова еще что-=то есть
источник

В

Виталий in Node.js — русскоговорящее сообщество
а дальше эти крохи умножаем на время ожидания и число пользователей и смотрим как ноде становится все хуже и хуже
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Ох блин)
источник

В

Виталий in Node.js — русскоговорящее сообщество
Алексей Попов
Это же io, там есть параллелизм
параллелизм чего? ты когда-нибудь удалял из базы то о чем не знаешь?
источник

MK

Mihail Kuzmin in Node.js — русскоговорящее сообщество
Виталий
параллелизм чего? ты когда-нибудь удалял из базы то о чем не знаешь?
можно апдейтить параллельно 1 сущность, например
источник

В

Виталий in Node.js — русскоговорящее сообщество
я конечно не претендую на истину в последней инстанции но зачем парню засорять мозг на вопросе, где ему надо рассмотреть кейс с другой стороны?
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Ну вот моя банальнейшая реализация залоченного коллбека:

function lock(key,cb){
 if(!lock.locks)
   lock.locks = Object.create(null);
 if(!key)
   throw new Error('lock("",...) is not allowed!');
 if(lock.locks[key])
   lock.locks[key].push(cb);
 else {
   lock.locks[key] = [];
   process.nextTick(cb);
 }
};

function unlock(key){
 if(!lock.locks)
   throw new Error('lock() not called!');
 if(!key)
   throw new Error('unlock("") is not allowed!');
 let cur = lock.locks[key];
 if(!cur)
   throw new Error('unlock('+key+') was not locked!');
 if(!cur.length)
   delete lock.locks[key];
 else
   process.nextTick(cur.shift());
};


Лочит по глобальному строковому ключу.
Каждый запрос на lock обязан сделать и unlock, что пустит в очередь следующий запрос.

В префиксованный key разумно добавить айди клиента, или как-то так.
источник

АП

Алексей Попов... in Node.js — русскоговорящее сообщество
Виталий
параллелизм чего? ты когда-нибудь удалял из базы то о чем не знаешь?
Параллелизм работы с внешним миром
А ты когда-нибудь удалял записи по условию, а не по id?
источник