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

标签 javascript node.js streaming marklogic

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

通常在 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/

相关文章:

javascript - 使用适用于 iOS 应用程序的 php 在没有网页的情况下加载 URL

javascript - addEventListener ('click' , ...) 通过点击 'numbers' 按钮,显示屏上的文本应该等于该数字

javascript - 如何调整/缩放 geojson 多边形的大小

javascript - 从 Node 路由中的json访问数组中的对象值

javascript - Electron JS : Uncaught TypeError: Cannot read property "BrowserWindow"/ "getCurrentWindow" of undefined

node.js - 无法从 NodeJS 程序建立到 MongoDB 的 SSL 连接

视频末尾的 Java .mp4 流损坏 - 网络错误

database - 将 Twitter Streaming API 推文原样转储到 Apache Cassandra 进行后期处理

php - 如何使用 PHP 向 JavaScript 提供信息?

azure - 将 Azure Functions 与事件中心链集成的最佳参数是什么