Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 April 18

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
всем привет. как лучше организовать фичу статус онлайн у юзера? сейчас на коннекте и дисконетке юзера к вебсокету обновляется поле (bool) online в таблице. но мне кажется это как то много запросов в бд будет. вариант дебаунса на нодовском setTimeout() на каждого юзера нормально будет?
источник

V

Victor in NodeUA - JavaScript and Node.js in Ukraine
Alex
всем привет. как лучше организовать фичу статус онлайн у юзера? сейчас на коннекте и дисконетке юзера к вебсокету обновляется поле (bool) online в таблице. но мне кажется это как то много запросов в бд будет. вариант дебаунса на нодовском setTimeout() на каждого юзера нормально будет?
Я бы как минимум хранил подобное в каком-нибудь redis
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Victor
Я бы как минимум хранил подобное в каком-нибудь redis
еще нужно inner join запросы делать, где user.online = true. хз можно ли мускл и редис так связать
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Alex
еще нужно inner join запросы делать, где user.online = true. хз можно ли мускл и редис так связать
Ты в редисе делаешь сет активных юзеров и по нему проверяешь, в мускле это вообще не хранится
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
Ты в редисе делаешь сет активных юзеров и по нему проверяешь, в мускле это вообще не хранится
как в мускуле в inner join добавить эту проверку?
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Так идея в том чтобы мускул исключить из этой темы
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Ты создал в редисе сет активных подключений и по нему смотришь кто онлайн
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
Так идея в том чтобы мускул исключить из этой темы
да я бы с радостью, но нужно получить все заказы где продавец-пользователь онлайн
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Ну ты можешь делать два сета для продавцов и пользователей и пересекать их
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Вообще задача уже не звучит как изначальная :)
источник

DA

Dmitriy Alexandrovic... in NodeUA - JavaScript and Node.js in Ukraine
Alex
да я бы с радостью, но нужно получить все заказы где продавец-пользователь онлайн
С позиции бизнес-логики заказы и пользователи онлайн - это абсолютно 2 разные вещи. И если заказы хранятся в БД, то это не значит, что нужно туда тянуть и статус пользователя.

Можно получить сначала статус пользователя в Redis, а потом сходить за его заказами в БД, либо наоборот. Но не вместе.
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Dmitriy Alexandrovich
С позиции бизнес-логики заказы и пользователи онлайн - это абсолютно 2 разные вещи. И если заказы хранятся в БД, то это не значит, что нужно туда тянуть и статус пользователя.

Можно получить сначала статус пользователя в Redis, а потом сходить за его заказами в БД, либо наоборот. Но не вместе.
статус хранится в пользователях, а не в заказах

а как наоборот? нужно получить n заказов у которых пользователь онлайн. брать n от всех заказов и смотреть их пользователь онлайн в редисе, а если не хватает - то еще брать n заказов?
источник

DA

Dmitriy Alexandrovic... in NodeUA - JavaScript and Node.js in Ukraine
Alex
статус хранится в пользователях, а не в заказах

а как наоборот? нужно получить n заказов у которых пользователь онлайн. брать n от всех заказов и смотреть их пользователь онлайн в редисе, а если не хватает - то еще брать n заказов?
То есть если n = 10, то подойдёт любой пользователь онлайн, у которого 10 заказов? И других смотреть не нужно?
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Dmitriy Alexandrovich
То есть если n = 10, то подойдёт любой пользователь онлайн, у которого 10 заказов? И других смотреть не нужно?
сортировка по последним добавленным, может быть и 1 пользователь, может и 10
источник

DA

Dmitriy Alexandrovic... in NodeUA - JavaScript and Node.js in Ukraine
Alex
сортировка по последним добавленным, может быть и 1 пользователь, может и 10
По последним добавленным заказам?
источник
2020 April 19

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Dmitriy Alexandrovich
По последним добавленным заказам?
да
источник

DA

Dmitriy Alexandrovic... in NodeUA - JavaScript and Node.js in Ukraine
Alex
да
Select * from order where user in (Select id from user where status = active) order by order.createdAt limit 100;
источник

NK

ID:0 in NodeUA - JavaScript and Node.js in Ukraine
Как вы ограничиваете количество параллельно исполняемых запросов в Node.js серверах? Чтобы избежать ресурсного голодания в условиях высоких нагрузок.
Окончательные результаты
32%
Асинхронная очередь
7%
Семафор со счетчиком
1%
Переменная со счетчиком
2%
Просто в массив кладу
57%
Все само как-то работает
Проголосовало: 605
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
ID:0
Как вы ограничиваете количество параллельно исполняемых запросов в Node.js серверах? Чтобы избежать ресурсного голодания в условиях высоких нагрузок.
Окончательные результаты
32%
Асинхронная очередь
7%
Семафор со счетчиком
1%
Переменная со счетчиком
2%
Просто в массив кладу
57%
Все само как-то работает
Проголосовало: 605
Маловато вариантов.
Если запросы по сокетам приходят, то можно, например, через backpresure ограничивать. Почти как асинхронная очередь но с слегка иной реализацией.

Ещё, как вариант, который с натяжкой можно назвать семафором - это мониторинг ресурсов (ивентлуп, память, процессорное время) и при достижении ими заданных значений сервер просто прекращает прием запросов.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Автоскейлинг настроили, буквально на этой неделе делали load testing прекрасно скейлится при росте запросов
источник