CNode

如何将 比较大的数据量 用stream 下载?

问答
Ggjc9620发布于9 年前最后回复9 年前7 回复4587 浏览0 收藏

工作中遇到的问题 原先是 后端执行sql语句查询了很多数据 然后转成xlsx 返回给前端 前端啥都不用干直接get请求这个就行了 就能下载了

但是有一天返回的数据量特别大 容易504 我就寻思着使用stream 查询 返回给前端 Model.where('created').gte(twoWeeksAgo).stream().pipe(writeStream); 就像这样 但是这样前端就要自己拼接buffer Blob 处理 然后转成xlsx ? 又或者 使用stream 查询数据库 然后用 stream 一部分先转xlsx 返回给前端? 请问这两种方法可行么 问问 大家平时遇到这样的问题都怎么处理的

查看回复

回复 (7)

D
dengnan123#1·9 年前

这个业务我刚做过,也想了你的这个问题,还没优化,小公司数据不多

D
dengnan123#3·9 年前
引用 gjc9620@dengnan123 请问是怎么解决的?

@gjc9620 我没优化啊 小公司 我是直接下载的 所以后面代码肯定要改的

K
koroshi#4·9 年前

如果前端只是下载,我觉得方法二靠谱一点呀 如果后端能append加入xlsx就更方便了, 不知道你504是,写xlsx的服务器蹦了还是下载蹦了,服务器蹦了。 下载导致服务器崩溃的话,走流或者直接nginx应该就可以了吧

O
o6875461#5·9 年前
  1. 可以使用excel js 直接以文件流形式传到前端
  2. 后端返回数据,前端使用数据构建文件
Z
zswnew#6·9 年前

应该是内存原因,

来自酷炫的 CNodeMD

F
fightAndLearn#7·9 年前

我有一点想法,对于大数据我们应该控制流的写入速度,避免占用内存太高

参与回复
登录后即可参与回复。登录