Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Node.JS и множество insert-запросов в MsQSL (https://javascript.ru/forum/node-js-io-js/61318-node-js-i-mnozhestvo-insert-zaprosov-v-msqsl.html)

zett 13.02.2016 00:57

Node.JS и множество insert-запросов в MsQSL
 
Всем здравствуйте.
Тема такая: нужно делать много(30k+) insert-запросов в MsSQL из ноды.
Вроде как реализовал, но через одно место. Все запросы шлю в один коннекшн.
Если слать не большими порциями, по 3-4к то все ок. Если все сразу, то такое ощущение что база захлебывается и нода схавав 1Гб рамы висит, периодически освобождая и снова съедая небольшой (40-140Мб) кусок памяти. Продебажить и точно понять что к чему - не удалось.

Я понял что надо как-то давать запросы дозировано и решил заюзать генератор.
Толком их не понимая и юзая ужасным образом сделал следующее:

В качестве модуля под MsSQL решил взять mssql-q.

function saveToDB(queries) {
  // ...
  let db = new sql(config)
  queriesRunner(queryGen, db, queries)
  // ...
}

function* queryGen(db, query) {
  yield db.DataQuery(query)
}

function queriesRunner(generator, db, queries) {
  if (queries.length < 1) return

  let query = queries.shift()
  let gen  = generator(db, query.query)

  let next = gen.next()
  next.value.then(
    result => queriesRunner(generator, db, queries),
    err    => console.error(query.query, '\n---> ' + err + '\n')
  )
}


Проблема в том что все это работает через раз, то идеально все (30к запросов за раз), то тупо висит и получается только небольшими частями слать запросы (3-4к)

Как вообще надо писать подобные вещи? Хочу понять как это реализовать красивее и проще

Заранее огромное спасибо

Zend 19.02.2016 23:50

https://toster.ru/q/16033

Vlasenko Fedor 20.02.2016 00:20

Zend,
в приведенной ссылке нет ответа для больших данных
в mysql к примеру есть LOAD DATA INFILE смотрите подобное для MsSQL

zett 23.02.2016 16:00

Цитата:

Сообщение от Poznakomlus (Сообщение 408516)
Zend,
в приведенной ссылке нет ответа для больших данных
в mysql к примеру есть LOAD DATA INFILE смотрите подобное для MsSQL

Cпасибо, идею понял. Должно быть это действительно красивее.


Часовой пояс GMT +3, время: 18:31.