用 nodejs 实现 总共有 12 个 table,每次导出需要把 12 张表里的部分内容全部导出,导出的数据总共加起来最多几万行左右(应该不超过 5W ) 要求把导出的结果放在 excel 或者.csv 文件里,看了下.csv 好像不支持多个标签 如果放在 excel 里的话可以用一个文件+12 标签搞定(分 12 个文件也没问题),.csv 的话应该只能分 12 个文件了,不过也可以
现在主要的问题是如何导出:
1.用户点击了导出按钮,12 张表依次 select 然后保存到 excel,然后再下载(或者全部导出写到一个文件里最后下载,或者 12 个文件打成 zip 再下载)
2.好像有一个SELECT INTO OUTFILE
的语句,这样的话就是分别导出为 12 个文件最后下载
不知道各位大佬有没有做过类似的功能,上面 2 种方式哪个效率高,还有别的实现方案吗?
1
liuzuo 2018-02-02 12:25:36 +08:00
是不是可以使用 mysqldump 导出?
|
2
imherer OP mysqldump 能导出为除 sql 以外的格式么?
|
3
fuyufjh 2018-02-02 12:44:14 +08:00 2
SELECT INTO OUTFILE 是个反模式,最好不要用。数据库应该只提供数据服务,不应该存储文件。举个例子,万一某天应用服务器和 MySQL 分开部署了呢?
个人觉得最佳方案是创建一个后台任务,异步执行,成功以后把文件放到指定的位置,把 URL 通知给前端 |
4
wdlth 2018-02-02 13:14:53 +08:00 via iPhone 1
用计划任务比较好,最好是配一个只读从库用于导出操作,不要在线上业务库做。
|
5
panpanpan 2018-02-02 14:27:31 +08:00 1
mysqldump 效率最高,并且支持 csv,导出之后一封邮件就发出去了
|
6
Cbdy 2018-02-02 14:38:06 +08:00 via Android
起一个异步任务,导出打包存到 OSS,然后通知后端服务,最近我就这么做了一个功能,Node.js 百来行代码
|
7
eslizn 2018-02-02 14:42:00 +08:00 1
6L 的异步才是正解,不然你数据量大了 web 实时处理必超时
|
10
abusizhishen 2018-02-02 17:22:21 +08:00 via Android
@fuyufjh 这个方式不错
|
11
qiuleo 2018-02-02 17:40:32 +08:00 1
生成数据的导出是 nodejs 的问题,跟 Mysql 一点关系都没有。如果说有关系,那就是怎么用 SQL 语句从 mysql 查出来而已,而怎么组装成需要的数据格式,是在 nodejs 里做的。看场景,如果只是一次导出,用 mysql 的 dump 也是可以。
|
12
neocanable 2018-02-02 17:53:24 +08:00 1
第二种明显是不可取的,千万不要用。
SELECT INTO OUTFILE 要求写入的目录 mysql 至少有写权限,如果你的程序再赋这个目录的权限,到时候你会哭。 |