Node + SQL Server:以流形式获取行数据

问题描述 投票:0回答:2

我尝试使用 Node.Js 连接器Microsoft 驱动程序 与 SQL Server 进行通信。在连接器文档中,我找到了一个名为“stream”的好选项。它增加了异步获取行对象的能力。

我的数据有一些特定的 - 有些列有大量二进制数据(> 100 Mb)。所以即使是一排也可能很大。我正在寻找将每行数据作为流获取的能力。这可以在 .NET 驱动程序中实现(CommandBehavior.SequentialAccess 枚举)。在 Node.js 中可以吗?

更新 这是演示该问题的代码:

自定义可写流模块:

var stream = require('stream');
var util = require('util');

function WritableObjects() {

    stream.Writable.call(
        this,
        {
            objectMode: true
        }
    );

}

util.inherits( WritableObjects, stream.Writable );

WritableObjects.prototype._write = function( chunk, encoding, doneWriting ) {
    console.log('write', chunk, encoding);
    doneWriting();
};


module.exports = {
    WritableObjects: WritableObjects
};

以及数据库查询代码:

var sw = new wstream.WritableObjects();
var request = new sql.Request(connection);
request.stream = true;
request.pipe(sw);
request.query('SELECT DataId, Data FROM ds.tData WHERE DataId in (1)');

sw.on('error', function(err) {
    console.log('Stream err  ', err)
});

sw.on('pipe', function(src) {
    console.log('Stream pipe ')
});

sw.on('finish', function(data) {
    console.log('Stream finish')
});

我这个例子中

chunk
方法的参数包含数据库记录的全部数据,而不是流。因为
_write
字段包含很大的 varbinary 数据,节点进程的内存也变得巨大。
    

sql-server node.js stream
2个回答
1
投票
Data

包进行流式查询,如下所述:

https://github.com/patriksimek/node-mssql

stream - 流式传输记录集/行,而不是作为回调参数一次返回所有记录集/行(默认值: false)。您还可以独立地为每个请求启用流式传输(request.stream = true)。如果您计划处理大量行,请始终设置为 true。


0
投票
async/await 包装器

)来执行您想要的操作: node-mssql

© www.soinside.com 2019 - 2024. All rights reserved.