【发布时间】:2015-08-23 01:33:54
【问题描述】:
假设我有一个查询将返回一个非常大的响应。可能有数千条记录和千兆字节的数据。
通常在 UI 中,我们只显示此数据的单页。现在我需要一个选项来获取整个结果集并将其流式传输到文件中。然后用户可以在闲暇时去下载它。
那么如何使用查询构建器从查询中选择所有结果,然后将其分块流式传输到文件中而不会耗尽内存?
【问题讨论】:
标签: javascript node.js streaming marklogic
假设我有一个查询将返回一个非常大的响应。可能有数千条记录和千兆字节的数据。
通常在 UI 中,我们只显示此数据的单页。现在我需要一个选项来获取整个结果集并将其流式传输到文件中。然后用户可以在闲暇时去下载它。
那么如何使用查询构建器从查询中选择所有结果,然后将其分块流式传输到文件中而不会耗尽内存?
【问题讨论】:
标签: javascript node.js streaming marklogic
如果你想要文档描述符,你可以打开一个对象流,如下例所示:
https://github.com/marklogic/node-client-api/blob/develop/examples/query-builder.js#L38
如果您只想要文档的内容,可以使用分块流,如下例所示(查询可以使用相同的方法):
https://github.com/marklogic/node-client-api/blob/develop/examples/read-stream.js#L27
一般做法如下:
https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
循环阅读文档,以页长递增起始页直到阅读完毕
在写入流上调用 end() 以关闭文件
https://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback
希望对你有所帮助
【讨论】: