最近在做后台管理相关的功能,处理数据的时候,涉及到了数据批量导入功能,之前也做过批量导入,这里想聊聊自己对这个功能的一些思考。
大家好!我是 落霞孤鹜
,今天想聊一聊数据批量导入功能的产品思考。作为中台、后台、B端产品经理,设计数据批量导入功能大概率会遇到,因为后端主要管理的就是数据,比如用户信息、资源信息、训练语料等等。
这个功能本身,表现出来的界面一般都会比较简单,甚至是简陋:可能就是一个上传按钮,弹出一个文件选择框,选择一个本地文件,然后就完成了数据的导入。
但就是这么一个操作简单界面简陋的功能,其前前后后需要思考的点还是挺多的,我这里按照一个产品设计的流程来进行拆解。
一、需求背景
数据批量导入功能,一般是为了满足几个方面的需求:
业务数据的快速初始化,比如我们搭建知识库时,通过Excel完成数据的整理,然后通过批量导入功能快速导入知识
数据迁移,比如我们在测试环境维护了很多业务数据,等系统测试上线后,希望把这一部分业务数据快速转移到线上系统
数据批量维护,比如我们给数据打标签时,可以通过Excel表格强大的数据编辑能力,实现大量数据的调整和维护,然后通过Excel表格完成导入
有了这些需求渠道,在数据管理功能界面上,或多或少会有批量导入的影子。
二、需求分析
基于上面的需求背景,我们仔细分析一下这个功能需求需要具备哪一些功能点。
2.1 导入按钮
上传按钮是数据导入功能的入口,一般会放在数据管理列表页面表格的左上方或着右上方。
给出的按钮文案可能是导入,也可能是上传,同时会配备一个上传的icon
,或者直接没有文字,就是一个icon
。
一般我们点击导入按钮时,都会直接弹出文件选择框,我这里提供一种不同的思路。
考虑一下这个场景:
当我们想起来要导入数据的时候,正常的思路是找导入按钮,然后点击导入按钮的时候,如果这个时候弹出一个文件选择框时,才想起来了,导入好像需要一个模板。
按照这样的情景设定,导入按钮点击后的效果,最合适的并不是弹出一个文件选择框,而是提供一个模板下载界面,并提供一些说明,然后在这个界面上,提供选择文件的按钮,选择文件后,如果发现选择错误文件后,还可以提供删除功能,最终确认后,点击弹框中的导入按钮。
2.2 模板
2.2.1 模板下载
模板下载的入口,如前面提到的,在点击导入按钮后的弹出框中提供,会是一个比较合适的交互。
2.2.2 数据填写说明
模板中除开给出具体的字段外,一般需要做一个说明,每一列如何填写,一列多值怎么处理,父子关系如何填写等,这些说明是为了更好的知道用户在整理数据时不要出现太明显的错误。
其中有一些列的数据来自一些字典值,比如性别、状态、类型等等,这些就需要给出每一种值,可以在对应的列通过Excel的列数据定义成列表,在列表中规范所有的值,保证填写的准确性。
2.3 文件选择
在点击选择文件后按钮或这链接后,我们考虑两个问题:过滤文件类型和限定文件大小
2.3.1 支持的文件类型
如果我们做过图片上传的功能,对文件类型的筛选就不会默认,一般前端会来确认需要支持的文件类型是什么。
在数据导入的场景下,也需要考虑文件类型的约束,目的有两个:
减少文件数据,让用户更容易找到文件
降低出错的可能,如果我们只支持2007版本以后的Excel,那么上传2003版本的Excel文件或者直接上传其他文件格式,这种错误其实是没有必要让用户触发的。
2.3.2 文件大小
在选择文件的时候, 我们还需要考虑文件大小,文件大小直接决定了数据量,比如我们约定大小是10M以内,如果10M都是数据,其实已经是一个非常大的数据量了。
做这个约束,更多的是为了导入的时候能稍微减轻一下后端的压力,用户当然希望所有数据可以一次导入,但实际情况是需要考虑业务处理的复杂度和后端的承受能力。
因此做文件大小的约束,实际也是在处理系统可用性和易用性的一个平衡。
2.4 数据处理
在选择了文件后,导入数据的重点开始了,我们需要将选择的文件先上传到后台服务器中,然后提取表格中的数据,对数据做处理,完成数据的导入。
2.4.1 数据处理进度
一般批量导入的数据量都会比较大,成百上千,甚至是上万条的情况都有,这个时候,界面上要如何知道导入的进度呢?
采用的方式有两种:前端轮循和任务试。
- 前端轮循
这个比较好理解,在选择文件点击确定后,前端调用上传接口,当文件上传成功后,上传接口直接返回成功。后端不断更新数据处理进度,可以通过数据库保存进度,也可以通过Redis等后端技术实现消息发布和订阅,然后前端轮循一个数据处理状态查询接口,基于查询到的数据,更新前端界面的进度条或保持Loading
状态。
- 任务式
这个会复杂一些,就是点击确定后,上传接口接收文件的同时,在数据库中记录了一个任务,同时会创建了一个异步线程,然后返回成功,而这个异步线程会去读取这个任务数据,并负责处理数据,最后将处理结果记录在数据库中。前端提供一个导入任务管理页面,在管理页面上可以看到这个任务的状态。
2.4.2 数据处理
数据处理一般都是一个比较复杂的过程,因为是通过Excel完成的数据整理,批量的方式完成数据更新,所以这里面对数据的校验工作一定要做到位,如果没有处理好数据校验,就会带来大量的错误数据和垃圾数据,从而影响系统正常的业务功能和流程。
2.4.2.1 出现异常是否回滚
为了保证数据导入后能够正常使用,会在严格的校验,如果校验时某一条数据没有通过,那么这次的导入是要整体失败还是单条记录为失败?
- 单条异常,不影响整体导入:这里其实主要考虑每一条数据是否独立是独立个体,如果是独立个体,就可以单条异常不导入,其他正常数据继续导入
这里面还需要保证一点,如果一条数据中设计多个业务对象数据导入,则需要处理好事物,即:其中一个业务对象导入失败,则其他已经导入的业务数据也需要回滚,保证数据的一致性。
- 单条异常,整体导入异常:如果说数据间有关联,单条数据的异常会影响到其他待导入数据,则一条数据异常,就需要终止导入。
2.4.2.2 异常数据如何处理
如果我们允许单条数据异常,其他数据可以继续导入,那么紧接着的问题就是,这些异常数据如何处理?
有两种比较好的处理方式:
提供一个异常数据查询界面,将数据和异常原因展示出来。
或者提供一个异常数据下载功能,在数据处理完成后,将异常数据摘出来,生成一个新的表格,格式和导入表格的格式一致,并再最后一列写入错误原因。
这么做的原因是,这个表格用户可以下载下来,然后打开后可以在表格里面基于错误对数据做调整,然后删除最后一列的错误原因,再用这个表格数据继续上传导入。
2.5 数据导入后的批量操作支撑
计算机和人的区别就是,人容易犯小错误,比如导入数据这个操作,经常是导入到系统后才发现导入的数据有问题,需要修改,但是数据已经导入成功了,而且量还很大,这个时候,删除数据就是一个吃力的工作。
所以这里我们如果提供了批量导入功能后,相对应的数据操作功能,基本上都需要提供批量操作的能力:
批量修改某一个字典类型的字段
批量调整状态
批量删除
批量导出
到此为止,我理解一个相对完整的数据批量导入功能才算完备。