@nodejs_ru

Страница 663 из 2748
я люблю грин дей
18.03.2017
17:51:30
Подскажите по sequelize пожалуйста, а то не догоняю. Нужно инстанс db в роуты пробрасывать или нет ? Nипа в app.js ипортировали все модели , и в роутреы отдавать route(app, db); У них в примере, в каждом роуте импортируются все модели.
Или, чуть более зашкваренный метод, но тоже сработает. В express есть .app свойство. В нем делаешь ссылку на сиквелайз, а сиквелайзом в инит файле импортишь все модели. Потом просто request.app.sequelize.model('model').

AlexMist
18.03.2017
17:52:25
Ды вот , как то так и думал. Реально же получается, что они на каждый роутер создаются ?

В их примере

https://github.com/sequelize/express-example

Google
я люблю грин дей
18.03.2017
17:53:36
Они создаются один раз, а в каждый роут идут по ссылке

AlexMist
18.03.2017
17:54:10
https://github.com/sequelize/express-example/blob/master/routes/users.js

var models = require('../models'); в каждом роуте

я люблю грин дей
18.03.2017
18:20:51
var models = require('../models'); в каждом роуте
я не знаю как там под капотом устроено, но почему-то почти уверен, что оно кешируется или что-то такое, если ты об этом

Алексей
18.03.2017
18:33:07
Ды вот , как то так и думал. Реально же получается, что они на каждый роутер создаются ?
Первый вызов require инициализирует модуль, то есть выполняет его код и возвращает module.exports из модуля, а все последующие только возвращают уже готовый module.exports из модуля без повторного выполнения кода модуля. Так что модели там не на каждый роутер заново создаются.

AlexMist
18.03.2017
18:35:44
Спасибо большое! Так и подумал сначала, но что то сомнения закрались ? За это получается сам движок отвечает ?

Прсто про это нормально, мало где написано. Хотя если бездумно кодить )))

Алексей
18.03.2017
18:36:41
Спасибо большое! Так и подумал сначала, но что то сомнения закрались ? За это получается сам движок отвечает ?
Да. Кстати в случае сомнений можно на практике проверить, вставив в код каждого модуля console.log(имя_модуля)

AlexMist
18.03.2017
18:37:27
В сам модуль, и по идее если его 100 раз импортировать то он 1 раз исполнится ?

Алексей
18.03.2017
18:37:50
можно кстати ещё влезть во фронтенд (например скачать какой-нибдуь проект) и посмотреть какой код webpack для модулей генерирует

модуль - это просто кусок кода

Google
Алексей
18.03.2017
18:38:31
который может установить объект module.exports

а может не устанавливать и просто выполнить некий код

А вообще я удивлён, что для ноды почти не практикуется такая штука как dependency injection. На ES6 это довольно просто делается и это позволило бы избавиться от такой проблемы: require('../../../../../my-module')

Sergey
18.03.2017
18:45:52
Подскажите пжлст, в чем может быть проблема: Копирую 3000 файлов из одной диры в другую, перед этим сравниваю их имена с записями в бд и переименовываю. Все очень медленно делается пять файла в минуту. Почему?

Сделал то же самое со 100 файлами, все это сделалось за меньше минуты

Alex
18.03.2017
18:47:54
кстати да а что вы делаете на ноде с проблемой require('../../../../../my-module')? в вебпаке там алиасы есть

Sergey код пожаласта

Sergey
18.03.2017
18:49:07
150 строк, сейчас на гист закину

Alex
18.03.2017
18:49:29
ок

Sergey
18.03.2017
18:51:22
https://gist.github.com/SergProduction/84ecf93b85c0857f29429d98a355a2c9

Json там очень большой, я его кусками из файла читаю, на него можно не обращать внимания

Kanat
18.03.2017
18:53:46
почему var в начале кода?

Kanat
18.03.2017
18:53:56
потом es6 дальше

Sergey
18.03.2017
18:54:06
Проверь. Не в этом проблема)

Alex
18.03.2017
18:54:39
let dirArr = fs.readdirSync( path.join(__dirname, 'base/jpg/') )

мб тут?

если там 5к жпегов

Sergey
18.03.2017
18:55:09
Ааа

Может

Google
Sergey
18.03.2017
18:55:21
Но думаю нет

Alex
18.03.2017
18:55:25
хотя... он же файлнеймы читает

вообще --inspector творит просто магию

Sergey
18.03.2017
18:58:02
Сто файлов он обрабатывает меньше чем за минуту

3к файлов, я запустил 10 мин назад, только 300 обработал

Alex
18.03.2017
18:59:20
глянь в htop

мб память скушалась

Sergey
18.03.2017
19:00:18
Не скушалась, вроде же нода не может задействовать всю память. Точно не знаю, поэтому и спрашиваю

Alex
18.03.2017
19:00:38
baseArray.forEach( (row, i, arr) => { fileName.forEach( (file, z) => {

Sergey
18.03.2017
19:00:51
Может быть, есть способы задействовать всю оперативу

?

Alex
18.03.2017
19:01:42
вставь на вызове equalBase вывод длины baseArray

Sergey
18.03.2017
19:02:30
baseArray.forEach( (row, i, arr) => { fileName.forEach( (file, z) => {
Ааа, да - кажется здесь. baseArray.length = 220k fileName.length = 3k

Alex
18.03.2017
19:02:43
там цикл в цикле

Sergey
18.03.2017
19:03:00
И Того 220к * 3к

Alex
18.03.2017
19:03:06
а задача-то вообще какая?

Sergey
18.03.2017
19:03:55
там цикл в цикле
Естественно, а и иначе как сравнить имя файла с записями в бд(baseArray)

Alex
18.03.2017
19:04:22
чето тут не бд, а json

Sergey
18.03.2017
19:04:35
Ага

Alex
18.03.2017
19:05:31
https://www.npmjs.com/package/lowdb

Google
Alex
18.03.2017
19:06:53
если там 220*3 кк, то чтение json целиком и парсинг могут оказаться значительно быстрее, чем гоняние массивов

хотя... без индексов anyway тормоза будут это же seqScan

Sergey
18.03.2017
19:09:54
Там json на 40мб я сперва пробывал его целиком прочесть, нода выкинула ошибку о том что память закончилась, теперь я читаю кусками через потоки

Alex
18.03.2017
19:10:31
readJsonСhunk -> insert manipulating delete * from table

перебор на 220 строк это ужс что

Sergey
18.03.2017
19:19:22
Может быть есть способы задействовать всю оперативу?

Kanat
18.03.2017
19:21:06
Не сдавайся, ответ совсем рядом.

Alex
18.03.2017
19:24:36
оператива не даст тебе нормальный поиск)

/stat@combot

Admin
ERROR: S client not available

Combot
18.03.2017
19:25:48
combot.org/chat/-1001041204341

Sergey
18.03.2017
19:25:54
С поиском все нормально, 100 картинок копируются меньше чем за минуту с той же базой.

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

Alex
18.03.2017
19:29:03
эм

ну лан)

или брать дерево

но деревьев будет несколько судя по количеству сравнений

Sergey
18.03.2017
19:29:33
Ммм

Alex
18.03.2017
19:31:53
row[5] == file.date && row[4] == file.show && row[3].match(/\d+/)[0] == file.id субд такое сделает за мгновение + если ты ищешь конкретно по row[3].match - стоит положить это доп. элементом в массив?

Сергей
18.03.2017
19:33:48
С поиском все нормально, 100 картинок копируются меньше чем за минуту с той же базой.
хороший тебе вариант предложили прочитай файл кусками и запхай во временную базу с индексами затем оперируй уже тем что есть в базе после нужных операций, просто пройдись по файликам и переименовывай или что там а потом снеси записи

Google
Sergey
18.03.2017
19:34:48
Да, придется

Сергей
18.03.2017
19:35:21
я когда писал утилитку в электрон так и делал

Sergey
18.03.2017
19:35:24
Не хотелось задействовать бд, но вижу что здесь она необходима

Alex
18.03.2017
19:36:35
можно и деревьями, но надо в деревья уметь:)

Сергей
18.03.2017
19:37:44
а какая разница, если данные в памяти не помещаются?

Alex
18.03.2017
19:40:39
там 220к строк поиск идет по date, show (не знаю че там, мб буль?) и fileid все три легко кастятся в int три дерева на 220к листьев влезут в ram

хотя тут не совсем дерево-то ну короче алгоритмы и структуры затащщат если надо,

Сергей
18.03.2017
19:42:23
а вообще ты мог выкидывать копирование в отдельные процессы. было бы в разы быстрее

Yan
18.03.2017
19:48:58
ребят, еще вопросик

по ресту модифаить отдельные доки лучше через пут или патч?

я почитал, используются оба, но вот бест практис не увидел, в каких случаях какой запрос выбирать

Сергей
18.03.2017
19:51:02
по ресту модифаить отдельные доки лучше через пут или патч?
PUT - полное обновления ресурса, то есть ты должен кинуть весь ресурс целиком PATCH - частичное, ты можешь кидать только то, что нужно обновить

Sergey
18.03.2017
19:52:02
сделал npm install amazon-cognito-identity-js, пытаюсь запустить следующий скрипт с помощью node scriptname.js ошибка TypeError: Cannot read property 'AuthenticationDetails' of undefined Что я не так делаю? var AWSCognito = require('amazon-cognito-identity-js'); var authenticationData = { Username : '123456n@yandex.ru', Password : 'thai4EengG2@', }; var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); https://github.com/aws/amazon-cognito-identity-js

Alex
18.03.2017
20:02:55
Sergey а сколько там ram? я сейчас json на 180Мб на 400к+ строк распарсил за 7 секунд на 1 гб оперативы

зохавало 700-800 Мб примерно

даже меньше

632Мб

Alex
18.03.2017
20:15:23
да, там уже гига вряд ли будет лишнего

тогда точно через субд - они умеют хорошо работать в условиях "не влазит в ram"

Sergey
18.03.2017
20:16:51
Дело в том, что я открываю диспечер задач, и вижу что нода даже половины оперативны не использует

Страница 663 из 2748