【问题标题】:Knex js stream large dataKnex js流大数据
【发布时间】:2022-06-29 05:12:47
【问题描述】:

我有一个包含数百万数据的 MySQL 表。 对于每一行,我必须应用自定义逻辑并在另一个表上更新修改后的数据。

使用 knex.js 我运行查询以使用 stream() 函数读取数据

一旦我得到 Stream 对象,我就会将我的逻辑应用于数据事件。 一切正常,但在某个时候它会停止而不会出现任何错误。

我尝试在新表中的每个更新操作之前暂停流,并在完成更新后重新启动它,但问题没有解决。 尝试限制查询,例如 1000 个结果,系统工作正常。

示例代码:

const readableStream = knex.select('*')
  .from('big_table')
  .stream();

readableStream.on('data', async(data) => {
    readableStream.pause() // pause stream
    const toUpdate = applyLogic(data) // sync func
    const whereCond = getWhereCondition(data) // sync func
    try {
       await knex('to_update').where(whereCond).update(toUpdate)
       console.log('UPDATED')
       readableStream.resume() // resume stream
    } catch (e) {
       console.log('ERROR', e)
    }

    readableStream.resume() // resume stream
    
}).on('finish', () => {
   console.log('FINISH')
}).on('error', (err) => {
   console.log('ERROR', err)
})

谢谢!

【问题讨论】:

    标签: mysql node.js kubernetes knex.js


    【解决方案1】:

    我解决了。

    问题不是由于 knex.js 或流,而是由于我的开发环境。 我在gcp上使用k3d模拟生产环境。因此,为了在本地测试我的脚本,我对 MySQL 服务进行了端口转发。

    我不清楚系统为什么会崩溃,但是通过使用我的脚本创建一个容器以便它连接到 MySQL 服务,该算法可以按我的预期工作。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多