Всем здравствуйте.
Тема такая: нужно делать много(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к)
Как вообще надо писать подобные вещи? Хочу понять как это реализовать красивее и проще
Заранее огромное спасибо