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

MarkLogic 8 - Stream large result set to a file - JavaScript - Node.js Client API

假设我有一个查询将要 return 一个非常大的响应。可能有数千条记录,可能有千兆字节的数据。

通常在 UI 中,我们只显示该数据的一页。现在我需要一个选项来获取整个结果集并将其流式传输到一个文件中。然后用户可以随意下载。

那么我如何 select 使用查询生成器的查询的所有结果,然后将其以块的形式流式传输到文件中,而不会 运行 内存不足?

如果需要文档描述符,可以打开一个对象流,如下例所示:

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

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

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

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

  • 在写入流上调用 end() 以关闭文件

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

希望对您有所帮助