MarkLogic 8 – 将大型结果集流式传输到文件 – JavaScript – Node.js客户端API
作者:互联网
假设我有一个将返回非常大的响应的查询.可能有数千条记录和可能的千兆字节数据.
通常在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
>查询文档的第一页,将文档的读取流传输到文件的写入流,注意将end选项设置为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,node-js,streaming,marklogic 来源: https://codeday.me/bug/20190702/1359648.html