Node + SQL Server:以流

时间:2015-09-29 14:41:25

标签: sql-server node.js stream

我尝试将Node.Js connectorMicrosoft driver一起使用来与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参数包含db记录的整个数据,而不是流。因为Data字段包含一个大的varbinary数据存储器,节点进程也变大了。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用此处所述的{{1}}包进行查询:https://github.com/patriksimek/node-mssql

  

stream - 流记录集/行,而不是一次性返回它们作为回调的参数(默认值:false)。您还可以单独为每个请求启用流式传输(request.stream = true)。如果您打算使用大量行,请始终设置为true。