MarkLogic 8 – 将大型结果集stream式传输到文件 – JavaScript – Node.js客户端API

比方说,我有一个查询将返回一个非常大的响应。 可能有成千上万的logging和可能的千兆字节的数据。

通常在UI中,我们只显示这个数据的一个页面。 现在我需要一个选项来获取整个结果集并将其输出到一个文件中。 然后用户可以在闲暇时间下载。

那么,如何使用查询构build器从查询中select所有结果,然后以块的forms将其stream出到文件中而不会耗尽内存?

如果您需要文档描述符,则可以按照以下示例打开一个对象stream:

https://github.com/marklogic/node-client-api/blob/develop/examples/query-builder.js#L38

如果您只想要文档的内容,则可以使用分块stream,如以下示例所示(查询可以使用相同的方法):

https://github.com/marklogic/node-client-api/blob/develop/examples/read-stream.js#L27

一般的做法如下:

  • 打开目标文件作为写入stream

https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options

  • 查询文档的第一页,将文档的读取streampipe道传输到文件的写入stream,注意将结束选项设置为false:

https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options

  • 循环阅读文档,按页面长度增加开始页面直到完成阅读

  • 调用writestream上的end()来closures文件

https://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback

希望有帮助