美文网首页
千万级海量数据导出中间件的思考

千万级海量数据导出中间件的思考

作者: DreamsonMa | 来源:发表于2019-03-20 10:42 被阅读0次

导出主要考虑生成Excel文件存储数据。但是,Excel一般是有行列的最大限制的。因此,实现导出逻辑的时候需要把一个表存储多少行、多少列,创建多少表的方案考虑进去。

遇到海量数据,如超百万的导出,我们又该如何处理?

Excel的限制

Excel2003及以前版本支持65536行,256列;Excel2007及以后版本支持1048576行,16384列;Excel2003一个工作簿中最多有255个工作表,而在Excel2007及以上的版本没有限制。

所以,遇到海量数据,如超百万数据的导出,一般会很慢、超时或者卡死。

海量数据导出方案思考

导出思路概要

导出单机版

导出单机版,通过服务端定时从数据库拉取任务队列,然后通过拆分查询的方式,远程获取导出客户端的数据,汇总成导出文件,最后存储到MongoDB中。

导出服务端处理逻辑

前端则通过轮询的方式,异步获取后端结果。如果成功,则下载Excel汇总文件。从而,避免前端超时。

导出前端处理逻辑

定时任务,可基于es-job分片处理,将不同导出拆分到不同的SERVER端执行。

分布式版本

导出的分布式实现,由导出单机版本抽取出来,同一个导出实现拆分为多个SERVER端执行,最终结果存储于MongoDB中,再汇总打包成一个zip包。有效提高单机版对单个海量数据导出的性能和提高可用性。

原则上SERVER端可以无限扩展,因此,能支持海量数据的导出处理。

流程参考:导出服务端处理逻辑

通用代码

曾经每一个导出功能的实现,都需要实现一段几乎一样的代码。因此,抽离通用的代码段,实现统一的入口、出口,以任务类型作为区分不同的代码实现。并引入脚本引擎,实时更新导出的逻辑实现。

提供QLExpress和Groovy脚本支持。

导出脚本编译逻辑

提供预处理、查询、数据组装三块脚本逻辑处理。

导出脚本实现逻辑

客户端集成

由于客户端需要跟提供查询功能的APP集成在一起。因此,提供导出的SDK集成,只要简单配置即可实现一个通用导出客户端。例如,使用dubbo的RPC处理。可以利用group区分不同的客户端。

导出多客户端支持

异常处理与补偿

维护一个导出的状态队列,并设置超时时间。全部成功视为成功;存在失败,则重试失败,超时则跳过并给出相应提示。如下列表:

分片ID 处理参数 处理结果
1 {startTime:2019-2-20;endTime:2019-2-21;index:1,limit:2000} success
2 {startTime:2019-2-21;endTime:2019-2-22;index:1,limit:2000} failed
3 {startTime:2019-2-22;endTime:2019-2-23;index:1,limit:2000} success
... ... ...

相关文章

  • 千万级海量数据导出中间件的思考

    导出主要考虑生成Excel文件存储数据。但是,Excel一般是有行列的最大限制的。因此,实现导出逻辑的时候需要把一...

  • 海量数据导出之优化

    随着公司的业务量越来越大,已经达到了上百G的数据量,算是一般互联网公司的小型数据量了,但也可以称为海量数据。 ...

  • EMQ X + ClickHouse 实现物联网数据接入与分析

    物联网数据采集涉及到大量设备接入、海量的数据传输,EMQ X 物联网消息中间件 与 ClickHouse 联机分析...

  • 千万级数据导出

    转载注明地址:https://www.jianshu.com/p/d4551af0fef1

  • vue数据导出

    需求 每个订单页面导出数据【订单数据量较大】 思考 先罗列集中导出的方式 1. 纯前端实现导出(数据量小) 2. ...

  • MQ新选择之tubemq

    简介 TubeMQ 是腾讯在 2013 年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传...

  • HBase作为NoSQL数据库适用于哪些场景?

    (1)海量数据场景 表来形容,单表在千万以内级别的数据量,基本都是小数据,千万级别的数据量,最多只能说是中等数据量...

  • ElasticSearch第1节 Elasticsearch概述

    小伦超正经_ElasticSearch 7.0.0博客 一、ES产生背景 海量数据组合查询 毫秒级或秒级返回数据 ...

  • MySQL的数据导入导出

    MySQL数据库的导入导出 导出 导出数据库 导出数据 导出单表数据 导出单表数据结构 操作数据库 导出整个数据库...

  • 性能优化:大表数据导出

    最近项目中有一个需求:根据查询条件导出(mysql)单表数据(几千万条数据量级的导出)。而查询条件各种各样,无法在...

网友评论

      本文标题:千万级海量数据导出中间件的思考

      本文链接:https://www.haomeiwen.com/subject/hriamqtx.html