博客
关于我
千万级别的数据量如何设计导出
阅读量: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 - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>