Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 April 16

MK

Mykola Kozin in NodeUA - JavaScript and Node.js in Ukraine
❓використовую бібліотеку, яка підключається до веб-сокетів з високою інтенсивністю потоку даних...
підписуюсь на відповідні події, і маю одну колбек функцію для обробки подій відповідно...
також у мене є таймер - використовую node-cron, для того щоб на початку кожної хвилини робити збереження в базу...
при інтенсивності подій біля 100 в секунду, таймер перестає спрацьовувати :( як можна цьому зарадити?  дякую!
источник
2020 April 17

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Здравствуйте, товарищи ;)
Нужна ваша помощь в поиске правильного решения, надеюсь кто-то с подобным сталкивался)
Есть 2 массива, размером ~7000объектов в каждом. Задача состоит в том, чтобы сравнить объекты первого массива с объектами второго. Каким образом можно реализовать данный перебор? Потому что цикл в цикле кажется плохой идеей)
источник

II

Ivan Ivanov in NodeUA - JavaScript and Node.js in Ukraine
Просто сравнить? А после сравнения что делать?
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
По некоторым параметрам сравниваются объекты и получаем среднее значение, если больше определенного %, то добавляем в массив, который после добавляется в БД
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
А в каждом объекте есть еще массив дочерних объектов, которые так же перебираются циклом, то есть в итоге получается уже 4 вложенных цикла
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Примерно такого вида массивы [{ id, items: [{ title }] }], где перебираем массив, а в нем дочерний массив items и сравниваем в нем по title
источник

II

Ivan Ivanov in NodeUA - JavaScript and Node.js in Ukraine
А сравниние по какому признаку происходит? title == title? Или есть другие условия? Не очень ясно насчет "больше определенного %".
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Ivan Ivanov
А сравниние по какому признаку происходит? title == title? Или есть другие условия? Не очень ясно насчет "больше определенного %".
Нет, сравнение не через "===", а через функцию, которая высчитывает % схожести строк.
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
На данный момент просто это реализовано в таком порядке:
- цикл первого массива
 - цикл дочернего массива первого массива
   - цикл второго массива
     - цикл дочернего массива второго массива
       - высчитываем % схожести по title, если он > 70%, то добавляем в массив результатов и идем дальше
источник

II

Ivan Ivanov in NodeUA - JavaScript and Node.js in Ukraine
"- высчитываем % схожести по title, если он > 70%, то добавляем в массив результатов и идем дальше" — для элемента каждого массива? И оба кладем в результирующий?
источник

II

Ivan Ivanov in NodeUA - JavaScript and Node.js in Ukraine
Имеете ввиду сортировку по ключу?
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Ivan Ivanov
"- высчитываем % схожести по title, если он > 70%, то добавляем в массив результатов и идем дальше" — для элемента каждого массива? И оба кладем в результирующий?
Да, сравнение проводиться по всем элементам, а в результирующий кладем только id объектов родительских массивов
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Интересует конкретно реализация, которая будет более оптимизирована под большие массивы. Возможно разбивка на чанки или еще что-то, чтобы не крутить одновременно 4 цикла. Возможно кто-то уже находил такую волшебную пилюлю)
источник

O

OxFAB in NodeUA - JavaScript and Node.js in Ukraine
Из задачи мне не совсем понятно: сравнение идет строго по номерам во всех этих массивах ( a1[i][j].title === a2[i][j].title ) или первый элемент первого массива может найти соответствие необязательно на таком же индексе второго массива (a1[i][j].title === a2[k][l].title) ?
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Еще уточню, что проблема конкретно во времени и нагрузке, т.к. есть еще сравнение изображений, где необходимо скачать изображение и выполнить через resemble-js compareTo метод. Просто это занимаем достаточно много времени.
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
OxFAB
Из задачи мне не совсем понятно: сравнение идет строго по номерам во всех этих массивах ( a1[i][j].title === a2[i][j].title ) или первый элемент первого массива может найти соответствие необязательно на таком же индексе второго массива (a1[i][j].title === a2[k][l].title) ?
нет не строго. просто идет перебор массивов через for ... of без использования индексов
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Vlad Reminniy
Интересует конкретно реализация, которая будет более оптимизирована под большие массивы. Возможно разбивка на чанки или еще что-то, чтобы не крутить одновременно 4 цикла. Возможно кто-то уже находил такую волшебную пилюлю)
во время обработки данных в процессе еще что-то делается? (возможно качаются данные по сети или порт открыт) т.е. критично ли блокирование ивентлупа?
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
во время обработки данных в процессе еще что-то делается? (возможно качаются данные по сети или порт открыт) т.е. критично ли блокирование ивентлупа?
данный скрипт запускается кроном рядом с REST API, думаю критично. А в самой обработке качают изображения из сети
источник

VR

Vlad Reminniy in NodeUA - JavaScript and Node.js in Ukraine
Так же, не смог найти решение, что означают ошибки "Killed" и "Aborted (core dumped)"? Они возникали в процессе выполнения этих циклов и приложение крашилось.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Vlad Reminniy
данный скрипт запускается кроном рядом с REST API, думаю критично. А в самой обработке качают изображения из сети
тут нужно сделать очередь входящих запросов с таймаутом, таймаут обработки, ограничение на параллельно запущенную обработку, блокировки параллельного доступа к одним и тем же данным (если может быть, что к одним и тем же могут лезть несколько запросов), потом реализовать неблокирующую обертку вокруг структуры данных, через интерфейс async iterable, ну и декомпозировать это в несколько функций.
источник