我有一個包含數百萬資料的 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)
})
謝謝!
uj5u.com熱心網友回復:
我解決了。
問題不是由于 knex.js 或流,而是由于我的開發環境。我在gcp上使用k3d模擬生產環境。因此,為了在本地測驗我的腳本,我對 MySQL 服務進行了埠轉發。
我不清楚系統為什么會崩潰,但是通過使用我的腳本創建一個容器以便它連接到 MySQL 服務,該演算法可以按我的預期作業。
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483208.html
標籤:mysql 节点.js Kubernetes knex.js
