如何将 比较大的数据量 用stream 下载?
工作中遇到的问题 原先是 后端执行sql语句查询了很多数据 然后转成xlsx 返回给前端 前端啥都不用干直接get请求这个就行了 就能下载了
但是有一天返回的数据量特别大 容易504 我就寻思着使用stream 查询 返回给前端
Model.where('created').gte(twoWeeksAgo).stream().pipe(writeStream);
就像这样
但是这样前端就要自己拼接buffer Blob 处理 然后转成xlsx ?
又或者 使用stream 查询数据库 然后用 stream 一部分先转xlsx 返回给前端?
请问这两种方法可行么
问问 大家平时遇到这样的问题都怎么处理的
7 回复
这个业务我刚做过,也想了你的这个问题,还没优化,小公司数据不多
@dengnan123 请问是怎么解决的?
@gjc9620 我没优化啊 小公司 我是直接下载的 所以后面代码肯定要改的
如果前端只是下载,我觉得方法二靠谱一点呀 如果后端能append加入xlsx就更方便了, 不知道你504是,写xlsx的服务器蹦了还是下载蹦了,服务器蹦了。 下载导致服务器崩溃的话,走流或者直接nginx应该就可以了吧
- 可以使用excel js 直接以文件流形式传到前端
- 后端返回数据,前端使用数据构建文件
应该是内存原因,
来自酷炫的 CNodeMD
我有一点想法,对于大数据我们应该控制流的写入速度,避免占用内存太高