博客
关于我
千万级别的数据量如何设计导出
阅读量:143 次
发布时间:2019-02-28

本文共 743 字,大约阅读时间需要 2 分钟。

我们平台最近有个需求需要查询每天的业务日志,然后也有导出功能。

每天业务量数据很大。每天都好几千万的数据。

 

 

问题分析

首先你这日志存哪里呀?文件系统还是数据库表,还是 NoSQL,存的位置不一样处理方式不一样。

另外你的数据结构是怎么样的,是简单的数据结构,还是复杂结构,字段是不是很多。

假设你数据就在数据库中,查询的结果返回多少的数据?如果就返回几万,可以考虑转换为 CSV 文件,CSV 文件 Excel 是可以打开的,而且 Excel 也有打开限制,记录太多了 Excel 也会被拖死。

参考解决方案

针对你现在的数据库,千万级别的,不管采取什么方案,什么 POI 工具在线导出方案都会超时。

原因有:

  1. 数据处理时间会很长,生成的文件会很大,网络传输回来肯定会超时。
  2. 其次 Excel 建议的数据量一般是不超过 5 万,全部导入到一个文件中,客户的电脑是根本打不开的,Excel 早就会被拖死了。这样的数据给你们业务毫无意义。就算勉强打开了, Excel 的搜索功能根本用不了。
  3. 你这还是一个用户导出的情况,如果 10 个用户同时导出,你试试看?

所以,你需要和业务商量你们到底要这些数据干什么。但是放一个文件中肯定是没有任何意义的。

正常来说针对这种数据量的通常处理方案是 Spring Batch 做批量。根据数据库的时间或者 ID 来进行批量处理后生成文件。然后将生成的文件放到某一个存储位置,通常可以是云存储。

前端用户只提交请求,在导出界面可以这样设计,当用户导出数据量超过 2 万后,前台页面提示说:您的导出请求已经被后台批量程序处理,请检查邮件获得下载地址。

处理策略可以使用 API 调用或者消息。

正常的系统设计是针对这种数据量肯定不会做基于网页的数据导出的。

转载地址:http://lgld.baihongyu.com/

你可能感兴趣的文章
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>