Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 March 22

¿

¿hope in NodeUA - JavaScript and Node.js in Ukraine
Мне особенно понравилась недавно обнаруженная мною "фича" тайпорм - возвращать первый элемент в базе при вызове метода findOne, когда передаёшь ему undefined.
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
azim
так а паттерн Репозиторий не разделаят на слои? можно же в нем либо использовать сиквели либо орм.
Можна просто написати репозиторій, що буде використовувати моделі, а запити писати на тому ж чистому sql для прикладу.
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
¿hope
Мне особенно понравилась недавно обнаруженная мною "фича" тайпорм - возвращать первый элемент в базе при вызове метода findOne, когда передаёшь ему undefined.
Мене більше посміхнуло з того, що в sql достатньо дописати LIMIT 1, щоб добитись такого ж результату, як в findOne() . Важко повірити, що це складно вивчити і з кожним таким обговоренням мені все більше здається, що люди забули, що таке "нормалізація" і як правильно робити JOIN .

P.S. треба буде перевірити за undefined. 😅
источник

¿

¿hope in NodeUA - JavaScript and Node.js in Ukraine
Кай
Мене більше посміхнуло з того, що в sql достатньо дописати LIMIT 1, щоб добитись такого ж результату, як в findOne() . Важко повірити, що це складно вивчити і з кожним таким обговоренням мені все більше здається, що люди забули, що таке "нормалізація" і як правильно робити JOIN .

P.S. треба буде перевірити за undefined. 😅
Я это сам недавно на работе обнаружил, чему был весьма удивлён, ибо кому такое поведение нужно - я не знаю, а багов и уязвимостей это лишь добавит, отчего либо костыли, или, что мне куда больше нравится - отказываться от этих орм и использовать чистые запросы в паре с каким-то query builder.
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Якщо тут є люди, що використовували mysql/mysql2 пакети і перейшли на pg (чи інший пакет) відчули "приріст перформенсу"? Чудово було б знати, особливо, якщо була нагода перевірити це на складних запитах чи тих, що повертають велику кількість записів.
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Здраствуйте. Подскажите как решить проблему
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Переслано от rvv880
Не получается правильно организовать порядок использования: я сначала считываю папку uploads, получаеться массив файлов, которые нужно обработать. Этот массив разделяю между воркерами - cluster.fork() - и каждому припадает свое задание. Они паралельно начинают исполняться. Их задача свою часть - массив - пропустить через функцию compress она создает папку images и сжимает файлы, потом после сжатия нужно пройти через функцию add, оно берет файлы из папки images и подписывает их красной строчкой - sample watermark.

Так должно работать: такой порядок исполнения.
Но у меня получаеться, что функция подписи - add - она иногда срабатывает раньше чем compress.
( Там проверка на наличие файла в ней: exists )
И поэтому файлы не подписывает.
И еще некоторые файлы теряються: не попадают в папку images. На входе их 73, а на выходе 55-57.

Как сделать так чтобы функция add запускалася после того как функция compress полностью завершит свою работа ---- как огранизовать правильный порядок исполнения функцию?
источник

@

@andrii in NodeUA - JavaScript and Node.js in Ukraine
Алексей Карташов
Если подходить с умом, то и орм не нужна, да. Я же говорю про ситуацию, когда разработчик спрашивает - "а работает ли орм с экспрессом?" Вот при таком подходе ни о каком сознательном и профессиональном подходе говорить не приходится, кмк. Поэтому лучше взять орм, почитать доку, описать связи, положить модельки в отдельную папочку и вот уже есть какое-то подобие разделения слоёв, типизация и множество готовых методов и подходов для работы с бд, описанных прямо в документации. Такой код при прочих равных и читать будет проще, и поддерживать. А уж objection это будет, или typeorm - вопрос второй)
Согласен, дайте пример если не трудно по добвалению данных в несколько таблиц связанных join в sequalize
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Переслано от rvv880
Не получается правильно организовать порядок использования: я сначала считываю папку uploads, получаеться массив файлов, которые нужно обработать. Этот массив разделяю между воркерами - cluster.fork() - и каждому припадает свое задание. Они паралельно начинают исполняться. Их задача свою часть - массив - пропустить через функцию compress она создает папку images и сжимает файлы, потом после сжатия нужно пройти через функцию add, оно берет файлы из папки images и подписывает их красной строчкой - sample watermark.

Так должно работать: такой порядок исполнения.
Но у меня получаеться, что функция подписи - add - она иногда срабатывает раньше чем compress.
( Там проверка на наличие файла в ней: exists )
И поэтому файлы не подписывает.
И еще некоторые файлы теряються: не попадают в папку images. На входе их 73, а на выходе 55-57.

Как сделать так чтобы функция add запускалася после того как функция compress полностью завершит свою работа ---- как огранизовать правильный порядок исполнения функцию?
А почему кластер? Это же скорее просто основной процесс, который раздаёт задания, и пачка дочерних, которые при старте получают своё задание
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
А почему кластер? Это же скорее просто основной процесс, который раздаёт задания, и пачка дочерних, которые при старте получают своё задание
Так и есть. Но появила еще одна проблема. Когда в папке 5 файлов, то работает хорошо. Если на вход дам 40-50 файлов, то оно сжимать успевает, а подписать нет.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Так и есть. Но появила еще одна проблема. Когда в папке 5 файлов, то работает хорошо. Если на вход дам 40-50 файлов, то оно сжимать успевает, а подписать нет.
Не понял про так и есть. Ты упомянул claster.fork. Ты с помощью cluster порождаешь дочерние процессы, или через child_process?
Да и вообще похоже что тебе нужна очередь. И пулл из пары дочерних процессов, которые её разбирают
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Могу скинуть репозиторий, посмотрите.  
Команда для запуска:
node multicore

https://github.com/RV8V/Task_2?files=1
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Карташов
Переходя на чистые sql-запросы, никогда не забывайте про prepared statements. Или юзайте knex
Knex уже используем, полет нормальный)
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Могу скинуть репозиторий, посмотрите.  
Команда для запуска:
node multicore

https://github.com/RV8V/Task_2?files=1
Ну вот кластер там не нужен
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Ну вот кластер там не нужен
Cluster нормально подходит. Вопрос в том почему при большом обьеме файла идут пропуски? Часть файлов подписана, а часть нет. Но все они сжаты.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Могу скинуть репозиторий, посмотрите.  
Команда для запуска:
node multicore

https://github.com/RV8V/Task_2?files=1
setTimeout(() => Fal.add(file) ,1000)
Это что?
forEach не дружит с промисами
Поэтому иногда вам везёт, иногда нет
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
@andrii
Согласен, дайте пример если не трудно по добвалению данных в несколько таблиц связанных join в sequalize
с Sequelize'ом уже давно не работал, не могу подсказать
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Cluster нормально подходит. Вопрос в том почему при большом обьеме файла идут пропуски? Часть файлов подписана, а часть нет. Но все они сжаты.
Не подходит. Вы неправильно его применяете, вам не он нужен, а child_process
источник

R

Roman in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
setTimeout(() => Fal.add(file) ,1000)
Это что?
forEach не дружит с промисами
Поэтому иногда вам везёт, иногда нет
Я сделал setTimeout чтобы функция add пролезла (успела отработать). Без этого она 'впролете'
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Roman
Я сделал setTimeout чтобы функция add пролезла (успела отработать). Без этого она 'впролете'
Ну при таком подходе - делайте таймаут минуту, и надейтесь, что этого времени хватит
источник