Ami*_*ein 4 node.js node-mysql
我正在使用 NodeJS。我想对 1,000,000 行做一些事情而不将所有行加载到内存中。(for-each)
以前,当我使用 ASP Classic 时,我做了:
do while not rec.eof
//do something
rec.movenext
loop
Run Code Online (Sandbox Code Playgroud)
在 node-mysql 中,我没有发现任何类似于游标的东西。只要
connection.query('select * from bigdata',function(err,rows))
Run Code Online (Sandbox Code Playgroud)
问题是,我不想一次加载所有行。
我找到了答案,放在下面。我保留这个问题是为了帮助其他有同样问题的人
感谢Ziggy Jonshon,我在 node-mysql 中找到了类似于 cursor 的东西,使用流。
我可以通过流获取查询结果,并自动暂停:
const mysql = require('mysql');
const stream = require('stream');
connection.query('SELECT * FROM `bigdata`')
.on('error', function(err) {
// Do something about error in the query
})
.stream()
.pipe(new stream.Transform({
objectMode: true,
transform: function (row, encoding, callback) {
// Do something with the row of data
callback();
}
}))
.on('finish', function() {
connection.end();
});
Run Code Online (Sandbox Code Playgroud)
这样我就不需要将所有数据加载到节点进程的内存中。
| 归档时间: |
|
| 查看次数: |
4081 次 |
| 最近记录: |