Node + SQL Server:以stream的forms获取行数据
我尝试使用Microsoft驱动程序的 Node.Js连接器与SQL Server进行通信。 在连接器文档中,我find了一个名为'stream'的好选项。 它增加了asynchronous获取行对象的能力。
我的数据有一些具体的 – 一些列有大的二进制数据(> 100 Mb)。 所以即使是一排也许真的很大。 我正在寻找能够将每行数据作为一个stream。 这是可能的.NET驱动程序( CommandBehavior.SequentialAccess枚举)。 在Node.js中可能吗?
更新这里是一个代码来演示这个问题:
自定义可写stream模块:
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') });
我这个_write
方法的chunk
参数包含了dblogging的全部数据,而不是一个stream。 由于Data
域包含一个大的varbinary数据存储节点进程也是巨大的。
是的,您可以使用node-mssql
包进行查询,如下所述: https : //github.com/patriksimek/node-mssql
stream – streamlogging集/行,而不是一次返回它们作为callback的参数(默认值:false)。 您也可以独立启用每个请求的stream式传输(request.stream = true)。 如果您打算处理大量的行,请始终将其设置为true。