深入了解数据导入的一些解决方案

挨呀小黄 2021/2/23 8:10:40

项目中除了有数据导出之外,也存在批量数据导入的场景。比如通过Execl电子表格进行批量开卡,批量导入用户或者部门信息等。今天探讨一下常见的数据导入方案。# 0x01:同步导入如果批量导入的数据就是几十条到一两百条的数据量的话;而且每条数据导入时,所做的业务不是特…

项目中除了有数据导出之外,也存在批量数据导入的场景。比如通过Execl电子表格进行批量开卡,批量导入用户或者部门信息等。今天探讨一下常见的数据导入方案。


# 0x01:同步导入

如果批量导入的数据就是几十条到一两百条的数据量的话;而且每条数据导入时,所做的业务不是特别耗时的话,可以采用同步导入方案。该方案只需一个接口,该接口的主要功能是上传Execl电子表格数据,然后解析Execl电子表格里的数据,进行业务操作,导入到数据库里即可。

http://img2.sycdn.imooc.com/60320c200001919b08000493.jpg

如果有需要的话,可以在解析Execl电子表格的数据时,把对数据的验证记录按照同一个批次保存到数据库,然后返回一个批次号 batchNo 给客户端,然后在写一个接口导出导入的数据的各记录的导入情况。

http://img3.sycdn.imooc.com/60320c360001886008000524.jpg


# 0x02:异步导入

如果数据量比较大的话,同步导入显然不合适,可以采用异步导入数据的方案。主要设计两个接口。

第一个接口:该接口负责上传Execl电子表格;然后在Redis设置一个未完成的标识,同时开启一个线程执行解析Execl电子表格数据;最后执行业务操作把数据导入到数据,完成后把在Redis设置的标识标志成完成;

第二个接口:用做轮询,获取导入数据完成的情况

http://img3.sycdn.imooc.com/60320c5200016a2508000463.jpg


同理,如果需要记录记录行的验证情况,可以把验证的记录行情况记录到数据库,然后再设计一个接口导出记录行的导入情况。


# 0x03:导入服务


前面两种方案,都没有把上传的Execl电子表格文件、导入时间、导入人的相关信息记录下来。如果出现一些意向不到的问题的话,非常不方便排查错误。所以有时需要设计一个库表,把这些信息记录下来,方便在出现问题时,进行排查。设计的记录表的字段可以大致如下:

```

id:主键id

file_path:上传的文件的路径

file_type:文件类型

module:  所属业务模块

opr_state:导入的总体状态,0成功,1失败

upload_time:上传时间

upload_user:上传人

```

这个方案再结合第一种或者第二种方案,就可以完成一个导入服务功能。

总体来说设计一个比较好的导入功能需要两张表和三个接口

+ 两张表:导入信息记录表、Execl记录行数据验证状态及该行导入情况表

+ 三个接口:上传Execl电子表格与异步数据导入功能接口、轮询是否导入成功状态接口、下载导入Execl记录行数据验证状态及该行导入情况接口


随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[深入了解数据导入的一些解决方案]http://www.zyiz.net/tech/detail-152039.html

上一篇:JUnit5学习之二:Assumptions类

下一篇:Spring Security 实战干货:OAuth2登录获取Token的核心逻辑

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程