表数据个性化导出文件

表数据导出文件,是信息系统中比较常见的数据处理场景,多用于跨系统大批量数据交互等。针对关系型数据库,导出的文件内容格式往往是行列格式,有的会加上文件头,文件尾,对文件内容完整性要求较高的,会有额外的校验文件,针对文件数量较多的,对文件名还会有特定要求,等等,太多通用场景,这里不再赘文。

因此,导出文件模块需支持以下功能:

  • 文件生成路径、导出数据口径可配置;
  • 文件名、文件头、行记录、文件尾可自定义;
  • 文件名后缀可配置,主要针对文件压缩方式;
  • 支持多线程导出;
  • 记录导出文件情况,以供查询;
  • 对于配套的校验文件同样支持以上几点功能;
  • 导出功能服务化。

该功能主要面向数据,就从数据角度来描述导出流程:

  1. 将需要导成文件的完整数据统一打个标志(例如标志值1),像数据库是ORACLE之类的,可使用分区特性,将标志值1作为一个分区;
  2. 单个文件总有大小限制,所以把数据拆分多个文件,每次开始写一个文件,就把对应数据打上另外一个标志(例如标志值2),同样可以使用分区特性,将标志值2作为另一个分区;
  3. 数据库的读取缓存也是有大小限制的,如果单个文件过大,就需要分多次读取数据来写文件,每读取一小段数据,则打上第三种标志(例如标志值3);
  4. 最后将已写入文件的数据再改一次标志(例如标志值4),也就是说,从刚开始的分区(标志值1),到文件完全生成完毕,数据的标志将全部变为4。

这里对几点关键思路做下说明:

  • 从流程上来说,基本上是采用化整为零的做法,目的是降低应用、数据库的资源占用。因此,导出数据的口径,需要先有分区、分文件、分片的修改动作,然后是读取分片数据动作,最后是归还分片的动作;
  • 文件格式方面,主要是要素,例如文件名需体现文件序号,text.001,text.002,text.003……这些要素,目前是需要侵入式的、贯穿整个流程来进行记录,一有改动,会牵扯到主要逻辑,但好处是,所有文件类型都可共享要素;
  • 多线程模式,主要是单个文件占用一个线程,并发地读数据写文件,这点小弟偷懒,没有实现;
  • 至于服务化,目前唯独数据口径没有完全参数化,其他配置可通过接口传入;

完整工程,详见https://github.com/Monicazxz/FileCreate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值