Показать сообщение отдельно
  #1 (permalink)  
Старый 13.02.2016, 00:57
Новичок на форуме
Отправить личное сообщение для zett Посмотреть профиль Найти все сообщения от zett
 
Регистрация: 09.01.2016
Сообщений: 9

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к)

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

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

Последний раз редактировалось zett, 14.02.2016 в 01:27.
Ответить с цитированием