Sql 查询1500万行并使用node js进行处理
我正在查询超过1500万行的mssql数据库表,并使用node处理所有返回的数据。对于一个基本的SQL查询,这似乎是一个问题,因为要写入内存的数据量会使NodeJ崩溃 或者,我使用--max old space size=8000为节点提供了更多内存,但这似乎也没什么帮助。我也尝试过使用node js streams,尽管我不确定我是否错了,但是如果我按块处理数据而不是整个数据,那么streams是否有用 考虑到我正在对整个数据进行排序、分组和映射,要使查询1500万行更快,并高效地使用内存处理数据,最好的方法是什么 目前,我看到的所有示例都建议流式处理,但所有流式处理示例都是按块处理数据。如果你能把一个简单的例子和你的建议结合起来,那将非常有帮助 可能的想法Sql 查询1500万行并使用node js进行处理,sql,node.js,Sql,Node.js,我正在查询超过1500万行的mssql数据库表,并使用node处理所有返回的数据。对于一个基本的SQL查询,这似乎是一个问题,因为要写入内存的数据量会使NodeJ崩溃 或者,我使用--max old space size=8000为节点提供了更多内存,但这似乎也没什么帮助。我也尝试过使用node js streams,尽管我不确定我是否错了,但是如果我按块处理数据而不是整个数据,那么streams是否有用 考虑到我正在对整个数据进行排序、分组和映射,要使查询1500万行更快,并高效地使用内存处理
let rowsToProcess = [];
request.on('row', row => {
rowsToProcess.push(row);
if (rowsToProcess.length >= 15) {
request.pause();
processRows();
}
});
request.on('done', () => {
processRows();
});
function processRows() {
// process rows
rowsToProcess = [];
request.resume();
}
在文件中
关于流媒体而不崩溃,有一个很好的解释。你应该间歇性地暂停你的请求
当流式传输大数据集时,您希望回退或分块正在处理的数据量,以防止内存耗尽问题;可以使用Request.pause()函数执行此操作
查看以15为一批管理行的示例
let rowsToProcess = [];
request.on('row', row => {
rowsToProcess.push(row);
if (rowsToProcess.length >= 15) {
request.pause();
processRows();
}
});
request.on('done', () => {
processRows();
});
function processRows() {
// process rows
rowsToProcess = [];
request.resume();
}
由于我不是在块中处理数据,您认为这种方法适合通过数据进行排序、筛选和映射吗?因为我不是在块中处理数据,您认为这种方法适合通过数据进行排序、筛选和映射吗?