我使用Node JS。 (Sails JS框架,但那不太重要)。
目的
下载包含从MongoDB转换的数据的CSV文件。
这是服务器响应大数据下载请求的情况
因此,用户需要将这些大数据下载到他们的浏览器中。
我不确定处理此类请求的最佳方法是什么。
答案 0 :(得分:0)
MongoDB内置了对流的支持,Node.js客户端可以为游标提供可读的流。所有HTTP响应对象还提供了一种通过一系列写入来流式传输响应主体的方法,或者在使用WebSockets时可以管道到套接字。大部分工作将被卸载到MongoDB服务器,而Node.js是为满足这些要求而开发的。
如果您要在客户端使用HTTP,则可以使用fetch()
并将响应主体流式传输到内存中。以下是excellent article,其中显示了如何有效处理大型CSV文件的响应:
const res = await fetch('/big-data.csv')
const csvStream = response.body
.pipeThrough(new TextDecoder())
.pipeThrough(new CSVDecoder())
for (;;) {
const {row, done} = await csvStream.read()
if (done) break
drain(row)
}
不要忘记服务器和客户端都支持编码内容,因此请确保压缩响应以进一步改善I / O.
答案 1 :(得分:-1)