Node.js: ошибка блокирования потока

preview_player
Показать описание
Частая ошибка новичка, в которой мы блокируем поток тяжелыми вычислениями.
Рекомендации по теме
Комментарии
Автор

Я представил, если я буду сейчас забирать в своей базе 14млн пользователей и буду сортировать таким образом... Кто так вообще делает?)))

Nini-svbd
Автор

limit не забывайте при любом запросе и будет вам счастье

omg-govf
Автор

Спасибо за информацию! Но как-то не очень смотрится, когда показана проблема, но не показано решение.

alekseybord
Автор

Спасибо! Как раз столкнулась с вопросом, почему лучше через запрос в базе проводить фильтры и сортировки. Не успела подумать, а вы уже один из вариантов ответа подкинули)

Velichkina_a
Автор

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

cmumhgc
Автор

Подскажите, как организовать отдельный поток. Очень интересно

skirrsolo
Автор

думаю, пагинация или хотя бы лимит здесь подошли бы как идеальное дополнение для доп. манипуляций на клиенте

just_old_memories_
Автор

Досмотрел до конца. Ошибка конечно имеет место быть, но как можно вынести действия в отдельный поток, если JS однопоточный, сценарный язык, где продуктивность достигается при помощи асинхронности с помощью Event Loop. Автор молодец конечно, я смотрел много его видео где сказано по делу, но тут не тот случай.

lihlvrx
Автор

Проблема решается пагинацией, паттерн, товарищи)

vadim_matsul
Автор

О, да, это типичная проблема при работе с базой данных у очень многих программистов. Во-первых, многие программисты воспринимают базу данных как такую "корзинку", из которой можно достать любое количество данных за константное время, словно, это данные, которые хранятся в оперативной памяти на этом же компьютере. Не важно что это за данные, сколько их, как организована база данных - всегда ожидается константное время, более того - одинаковое для каждого из последовательных запросов. Вторая проблема - в коде им нужно вытащить все данные (все!), а фильтровать и обрабатывать их уже программно. Не важно что потребуется время на их выборку в БД (см. п. 1), передачу по сети, размещение в памяти на вызывающей машине - нужно тянуть все и потом уже обрабатывать в коде. Опять же, воспринимают БД как тупую "корзинку", которая умеет только хранить данные, разложив их по отдельным таблицам. Хотя, даже сложные вещи, типа, полнотекстового поиска, поиска по пространственным данным, СУБД часто может сделать лучше, чем программист в своём коде. При этом и данные лишние не нужно по сети ганять, и алгоритмы оптимизированы конкретно для решение этой задачи и представления данных в БД.

Ещё одна проблема это злоупотребление индексами, представление о них как о совершенно бесплатной вещи. Но, это уже совершенно другой уровень проблемы. Первые 2 - гораздо хуже. Даже синьйоры-дальше-некуда сеньйоры это, бывает, делают.

kmnvwwe
Автор

Очередь только, тк мы не можем проконтролировать на каком потоке выполнение идет имхо

YKupriyanov_
Автор

какое-то время назад я видел следующий запрос от толсткого клиента "Select * from Pos" и все бы ничего, но записей было 11 мил.... далее уже клиент выбирает тип клиента и временной диапазон.
sql сервер сходил сума, приложение сходило сума, прогер не мог понять почему всё тупит и как можно делать иначе...

sosinboxru
Автор

Интересно посмотреть в глаза человеку, который одним запросом хочет получить 10к пользователей

artemmorozov
Автор

А как же асинхронность запросов? Лучше бы рассказал как сделать чтобы не вис сервак.

dgutmci
Автор

А что если понемногу сортировать и использовать тот же settimeout дабы разблокировать поток. Хотя написав понял, что воркер легче сделать)

holingdev
Автор

С каких пор сортировка 10к элементов займет значимое время вообще? И что важнее кто всю таблицу юзеров загружает без фильтрации?

nightriver
Автор

А то что сортировка внутри метода возврата... чего туда еще г-на не напихать... и кодревьювер это не видит... а это значит что качество кода такое себе... что до что после...

fractonart
Автор

Любые выборки подобного плана должны пагинацией реализовываться

raymond
Автор

Сервис воркер для пагинации? Я б послал подальше если б мне в код ревью такой коммент оставили 😅. Для больших объемов данных существует серверная пагинация и сортировка, индексы и кеширование респонса.

jscode
Автор

Отдельный поток это вы имеете ввиду с помощью WebWorker делать такие сложные вычисления?

lovikuanyshev