【问题标题】:MarkLogic 8 - Stream large result set to a file - JavaScript - Node.js Client APIMarkLogic 8 - 将大型结果集流式传输到文件 - JavaScript - Node.js 客户端 API
【发布时间】:2015-08-23 01:33:54
【问题描述】:

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

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

那么如何使用查询构建器从查询中选择所有结果,然后将其分块流式传输到文件中而不会耗尽内存?

【问题讨论】:

    标签: javascript node.js streaming marklogic


    【解决方案1】:

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

    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

    希望对你有所帮助

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2014-12-06
      • 2014-12-21
      • 2015-08-26
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多