共计 947 个字符,预计需要花费 3 分钟才能阅读完成。
我的项目中除了有数据导出之外,也存在批量数据导入的场景。比方通过 Execl 电子表格进行批量开卡,批量导入用户或者部门信息等。明天探讨一下常见的数据导入计划。
0x01:同步导入
如果批量导入的数据就是几十条到一两百条的数据量的话;而且每条数据导入时,所做的业务不是特地耗时的话,能够采纳同步导入计划。该计划只需一个接口,该接口的次要性能是上传 Execl 电子表格数据,而后解析 Execl 电子表格里的数据,进行业务操作,导入到数据库里即可。
如果有需要的话,能够在解析 Execl 电子表格的数据时,把对数据的验证记录依照同一个批次保留到数据库,而后返回一个批次号 batchNo 给客户端,而后在写一个接口导出导入的数据的各记录的导入状况。
0x02:异步导入
如果数据量比拟大的话,同步导入显然不适合,能够采纳异步导入数据的计划。次要设计两个接口。
第一个接口:该接口负责上传 Execl 电子表格;而后在 Redis 设置一个未实现的标识,同时开启一个线程执行解析 Execl 电子表格数据;最初执行业务操作把数据导入到数据,实现后把在 Redis 设置的标识标记成实现;
第二个接口:用做轮询,获取导入数据实现的状况
同理,如果须要记录记录行的验证状况,能够把验证的记录行状况记录到数据库,而后再设计一个接口导出记录行的导入状况。
0x03:导入服务
后面两种计划,都没有把上传的 Execl 电子表格文件、导入工夫、导入人的相干信息记录下来。如果呈现一些动向不到的问题的话,十分不不便排查谬误。所以有时须要设计一个库表,把这些信息记录下来,不便在呈现问题时,进行排查。设计的记录表的字段能够大抵如下:
id:主键 id
file_path:上传的文件的门路
file_type:文件类型
module:所属业务模块
opr_state:导入的总体状态,0 胜利,1 失败
upload_time:上传工夫
upload_user:上传人
这个计划再联合第一种或者第二种计划,就能够实现一个导入服务性能。
总体来说设计一个比拟好的导入性能须要两张表和三个接口
- 两张表:导入信息记录表、Execl 记录行数据验证状态及该行导入情况表
- 三个接口:上传 Execl 电子表格与异步数据导入性能接口、轮询是否导入胜利状态接口、下载导入 Execl 记录行数据验证状态及该行导入状况接口