• 导入导出的系统设计


    导入

    导入在系统中属于比较常见的功能。
    新增数据时,每次只新增一条数据,会比较慢。
    可以通过导入excel文件,进行批量导入。

    导入的主要流程

    (1)用户点击下载excel导入模板
    (2)用户填写模板数据后,点击上传文件,选中文件进行上传
    (3)解析导入文件
    (4)校验字段,并给出提示
    数据全部校验通过,就批量新增/更新,导入成功后提示成功。
    部分数据校验不通过,不导入数据,直接提示失败的行数/列数,以及错误原因。

    文件存储

    如果文件直接放进系统所在的服务器上,时间久了,必然会占用大量的服务器资源,进而影响整个系统,必须用定时任务定时清除历史久远的文件。
    如果项目或者公司有 OSS (Object Storage Service,对象存储服务),最好使用 OSS。
    将文件上传到 OSS 上,需要导出时,再从OSS下载。
    OSS一般会有一个失效时间,需要长期保存的文件就设置为永久,临时的文件可以根据业务需求跟产品确认后进行调整。

    文件命名

    文件上传到OSS时,每个文件需要设置一个唯一的文件id,以区分不同文件。
    唯一的文件id,可以使用uuid。如果是分布式的项目,可以采用分布式唯一id。
    文件id相同的视为同一文件,上传后会对旧文件进行更新替换。

    导入模板

    如果没有导入模板,用户不知道该输入哪些数据,也不知道具体的格式。
    excel的导入模板,需要给出列标题,以及校验规则。可以在第二行或者批注中给出校验规则,以及示例。

    字段校验

    字符串字段,提示字段长度不能超过多少。
    日期字段,提示日期格式。比如日期格式为 2022-08-01,或者 2022/08/01。
    包含多个选项的字段,可以在excel中设置下拉选项,让用户直接选择。

    批量插入/批量更新

    最好有一个流水号的字段。相当于主键id。这样才能够确认数据是新增,还是更新。
    数据校验通过之后,需要进行批量插入/更新。
    如果使用的是Mysql,可以使用 INSERT ON DUPLICATE KEY UPDATE,可以实现“不存在则插入,存在则更新”。
    详情见: https://www.cnblogs.com/expiator/p/14417406.html

    分批处理

    数据量比较大时,可以进行分批处理。
    可以采用 谷歌Guava包的Lists.partition去做分批处理。
    详情见: https://blog.csdn.net/qq_39416311/article/details/83310591

    导出

    导出文件的命名

    导出文件,可以用"功能模块--用户id--日期时间"的格式进行命名。

    导出的主要流程:

    (1)用户点击导出
    (2)异步处理,根据输入条件,查询出结果
    (3)填充excel列标题,将查询结果写入excel,并生成文件id以及文件名称
    (4)将excel异步上传到OSS
    (5)获取OSS Url并持久化
    (6)用户可以从导出列表下载excel

    缓存

    如果不是实时的数据,或者数据变更不频繁,可以使用缓存。加快查询数据的速度。

    查询结果写入excel

    可以使用 Poi,也可以使用 EasyExcel。
    详情见: https://www.cnblogs.com/expiator/p/7424189.html

    导出列表

    设计一个导出列表,用户重新下载会比较方便,也容易定位问题。
    导出列表,可以显示文件名称,导出时间,状态(导出成功,导出失败,导出中),失败原因,下载等。

  • 相关阅读:
    重塑矩阵
    买卖股票
    两个数组的交集
    洛谷 P3700
    HDU 6987
    Solution -「NOI 2021」「洛谷 P7740」机器人游戏
    「NOI 2021」酱油记
    Solution -「UNR #5」「UOJ #671」诡异操作
    CD from Codeforces Round #703 (Div. 2)
    CD from Codeforces Round #701 (Div. 2)
  • 原文地址:https://www.cnblogs.com/expiator/p/16631746.html
Copyright © 2020-2023  润新知