Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询1500万行并使用node js进行处理_Sql_Node.js - Fatal编程技术网

Sql 查询1500万行并使用node js进行处理

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万行更快,并高效地使用内存处理

我正在查询超过1500万行的mssql数据库表,并使用node处理所有返回的数据。对于一个基本的SQL查询,这似乎是一个问题,因为要写入内存的数据量会使NodeJ崩溃

或者,我使用--max old space size=8000为节点提供了更多内存,但这似乎也没什么帮助。我也尝试过使用node js streams,尽管我不确定我是否错了,但是如果我按块处理数据而不是整个数据,那么streams是否有用

考虑到我正在对整个数据进行排序、分组和映射,要使查询1500万行更快,并高效地使用内存处理数据,最好的方法是什么

目前,我看到的所有示例都建议流式处理,但所有流式处理示例都是按块处理数据。如果你能把一个简单的例子和你的建议结合起来,那将非常有帮助

可能的想法

  • 如果我们说流式传输是一种方式,那么在一点一点地流式传输数据的同时,是否可以先将数据存储在内存中,然后对数据进行一次完整的处理
  • 感谢文档中的

    关于流媒体而不崩溃,有一个很好的解释。你应该间歇性地暂停你的请求

    当流式传输大数据集时,您希望回退或分块正在处理的数据量,以防止内存耗尽问题;可以使用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();
    }
    
    在文件中

    关于流媒体而不崩溃,有一个很好的解释。你应该间歇性地暂停你的请求

    当流式传输大数据集时,您希望回退或分块正在处理的数据量,以防止内存耗尽问题;可以使用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();
    }
    

    由于我不是在块中处理数据,您认为这种方法适合通过数据进行排序、筛选和映射吗?因为我不是在块中处理数据,您认为这种方法适合通过数据进行排序、筛选和映射吗?