假设我有一个查询将返回一个非常大的响应。可能有数千条记录,也可能有千兆字节的数据。
通常在 UI 中,我们只显示此数据的单个页面。现在我需要一个选项来获取整个结果集并将其流式传输到一个文件中。然后用户可以在闲暇时下载。
那么如何使用查询构建器从查询中选择所有结果,然后将其分块流式传输到文件中,而不会耗尽内存?
最佳答案
如果需要文档描述符,可以打开一个对象流,如下例所示:
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
希望对你有帮助
关于javascript - MarkLogic 8 - 将大型结果集流式传输到文件 - JavaScript - Node.js 客户端 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30711613/