Запросы к БД в setInterval без утечек памяти

Рейтинг: 0Ответов: 0Опубликовано: 18.04.2023

Как правильно использовать setInterval или вложенный setTimout, чтобы делать запросы к бд каждые n секунд?

На данный момент реализация самая простая:

setInterval(async () => {
   await new Test(dbconnection).getData()
}, 3000)

Если в запросе много данных, то спустя время выкидывает ошибку reach heap out of memory

Прочитал, что это связано с утечкой памяти, как ее избежать?

Данный сервер перекидывает данные из MSSQL в POSTGRESQL:

class Test {
    constructor(db) {
        this.db = db
        this.result = null
    }

  getData() {
    return new Promise(resolve => {
        let request = new Request(
            'SELECT ... FROM ... WHERE DateTime > dateadd(dd,-1,getdate()) FOR JSON PATH',
            err => {
                if (err) {
                    console.log(err)
                }
            }
        )
        let string = ''

        request.on('row', columns => {
            columns.forEach((column, num) => {
                return (string += column.value)
            })
        })

        request.on('requestCompleted', async function (rowCount, more) {
            if (string) {
                this.result = JSON.parse(string)

                await this.result.forEach(async item => {
                    await db.query(
                        `INSERT INTO ... (...) values (...) ON CONFLICT DO NOTHING`,
                        [
                            ...
                        ]
                    )
                })
            }
            resolve(this.result)
        })

        this.db.execSql(request)
    })
}

}

Ответы

Ответов пока нет.