Совместное использование большого набора данных между рабочими потоками Nodejs

#node.js

#node.js

Вопрос:

Внутри моего сервера nodejs мне нужно выполнить вычисления с интенсивным использованием ЦП для большого набора данных, поступающего из базы данных SQL Server. Я читал о рабочих потоках как о способе параллельной обработки моих данных, поскольку мне нужно как можно быстрее завершить все свои вычисления.

У меня есть около 50 различных математических операций, которые необходимо выполнить с одним и тем же набором данных. Я никоим образом не изменяю набор данных во время выполнения операций, и рабочие не зависят от результатов других рабочих для их вычисления.

Каков наилучший подход к совместному использованию этой огромной таблицы SQL между всеми моими рабочими? Я думал о том, чтобы запросить данные в основном потоке, а затем сохранить их где-нибудь, где они могли бы быть доступны каждому рабочему потоку, но не мог понять, как это сделать.

Ответ №1:

В NodeJS нет концепции потоков, поскольку он однопоточный, вы можете добиться того же, используя C и N-API

Подход, отличный от C , заключается в создании нескольких процессов для этого.

SQL -> поток в основной поток -> запуск нескольких процессов из основного потока -> передача данных дочерним процессам через IPC -> при получении данных каждый процесс может начать обработку

Вы также можете положиться на Pub-sub для того же.

SQL -> основной процесс -> опубликовать событие с набором данных -> иметь несколько подписчиков для выполнения назначенных операций.

RabbitMQ — один из вариантов, доступно множество бесплатных и платных брокеров сообщений.

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

надеюсь, это вам как-то помогло 🙂 приветствия