最近在做后臺(tái)管理相關(guān)的功能诽偷,處理數(shù)據(jù)的時(shí)候坤学,涉及到了數(shù)據(jù)批量導(dǎo)入功能疯坤,之前也做過(guò)批量導(dǎo)入,這里想聊聊自己對(duì)這個(gè)功能的一些思考拥峦。
大家好贴膘!我是 落霞孤鶩
,今天想聊一聊數(shù)據(jù)批量導(dǎo)入功能的產(chǎn)品思考略号。作為中臺(tái)刑峡、后臺(tái)、B端產(chǎn)品經(jīng)理玄柠,設(shè)計(jì)數(shù)據(jù)批量導(dǎo)入功能大概率會(huì)遇到突梦,因?yàn)楹蠖酥饕芾淼木褪菙?shù)據(jù),比如用戶信息羽利、資源信息宫患、訓(xùn)練語(yǔ)料等等。
這個(gè)功能本身这弧,表現(xiàn)出來(lái)的界面一般都會(huì)比較簡(jiǎn)單娃闲,甚至是簡(jiǎn)陋:可能就是一個(gè)上傳按鈕,彈出一個(gè)文件選擇框匾浪,選擇一個(gè)本地文件皇帮,然后就完成了數(shù)據(jù)的導(dǎo)入。
但就是這么一個(gè)操作簡(jiǎn)單界面簡(jiǎn)陋的功能蛋辈,其前前后后需要思考的點(diǎn)還是挺多的属拾,我這里按照一個(gè)產(chǎn)品設(shè)計(jì)的流程來(lái)進(jìn)行拆解。
一冷溶、需求背景
數(shù)據(jù)批量導(dǎo)入功能渐白,一般是為了滿足幾個(gè)方面的需求:
業(yè)務(wù)數(shù)據(jù)的快速初始化,比如我們搭建知識(shí)庫(kù)時(shí)逞频,通過(guò)Excel完成數(shù)據(jù)的整理纯衍,然后通過(guò)批量導(dǎo)入功能快速導(dǎo)入知識(shí)
數(shù)據(jù)遷移,比如我們?cè)跍y(cè)試環(huán)境維護(hù)了很多業(yè)務(wù)數(shù)據(jù)苗胀,等系統(tǒng)測(cè)試上線后托酸,希望把這一部分業(yè)務(wù)數(shù)據(jù)快速轉(zhuǎn)移到線上系統(tǒng)
數(shù)據(jù)批量維護(hù),比如我們給數(shù)據(jù)打標(biāo)簽時(shí)柒巫,可以通過(guò)Excel表格強(qiáng)大的數(shù)據(jù)編輯能力,實(shí)現(xiàn)大量數(shù)據(jù)的調(diào)整和維護(hù)谷丸,然后通過(guò)Excel表格完成導(dǎo)入
有了這些需求渠道堡掏,在數(shù)據(jù)管理功能界面上,或多或少會(huì)有批量導(dǎo)入的影子刨疼。
二泉唁、需求分析
基于上面的需求背景鹅龄,我們仔細(xì)分析一下這個(gè)功能需求需要具備哪一些功能點(diǎn)。
2.1 導(dǎo)入按鈕
上傳按鈕是數(shù)據(jù)導(dǎo)入功能的入口亭畜,一般會(huì)放在數(shù)據(jù)管理列表頁(yè)面表格的左上方或著右上方扮休。
給出的按鈕文案可能是導(dǎo)入,也可能是上傳拴鸵,同時(shí)會(huì)配備一個(gè)上傳的icon
玷坠,或者直接沒(méi)有文字,就是一個(gè)icon
劲藐。
一般我們點(diǎn)擊導(dǎo)入按鈕時(shí)八堡,都會(huì)直接彈出文件選擇框,我這里提供一種不同的思路聘芜。
考慮一下這個(gè)場(chǎng)景:
當(dāng)我們想起來(lái)要導(dǎo)入數(shù)據(jù)的時(shí)候兄渺,正常的思路是找導(dǎo)入按鈕,然后點(diǎn)擊導(dǎo)入按鈕的時(shí)候汰现,如果這個(gè)時(shí)候彈出一個(gè)文件選擇框時(shí)挂谍,才想起來(lái)了,導(dǎo)入好像需要一個(gè)模板瞎饲。
按照這樣的情景設(shè)定口叙,導(dǎo)入按鈕點(diǎn)擊后的效果,最合適的并不是彈出一個(gè)文件選擇框企软,而是提供一個(gè)模板下載界面庐扫,并提供一些說(shuō)明,然后在這個(gè)界面上仗哨,提供選擇文件的按鈕形庭,選擇文件后,如果發(fā)現(xiàn)選擇錯(cuò)誤文件后厌漂,還可以提供刪除功能萨醒,最終確認(rèn)后,點(diǎn)擊彈框中的導(dǎo)入按鈕苇倡。
2.2 模板
2.2.1 模板下載
模板下載的入口富纸,如前面提到的,在點(diǎn)擊導(dǎo)入按鈕后的彈出框中提供旨椒,會(huì)是一個(gè)比較合適的交互晓褪。
2.2.2 數(shù)據(jù)填寫說(shuō)明
模板中除開(kāi)給出具體的字段外,一般需要做一個(gè)說(shuō)明综慎,每一列如何填寫涣仿,一列多值怎么處理,父子關(guān)系如何填寫等,這些說(shuō)明是為了更好的知道用戶在整理數(shù)據(jù)時(shí)不要出現(xiàn)太明顯的錯(cuò)誤好港。
其中有一些列的數(shù)據(jù)來(lái)自一些字典值愉镰,比如性別、狀態(tài)钧汹、類型等等丈探,這些就需要給出每一種值,可以在對(duì)應(yīng)的列通過(guò)Excel的列數(shù)據(jù)定義成列表拔莱,在列表中規(guī)范所有的值碗降,保證填寫的準(zhǔn)確性。
2.3 文件選擇
在點(diǎn)擊選擇文件后按鈕或這鏈接后辨宠,我們考慮兩個(gè)問(wèn)題:過(guò)濾文件類型和限定文件大小
2.3.1 支持的文件類型
如果我們做過(guò)圖片上傳的功能遗锣,對(duì)文件類型的篩選就不會(huì)默認(rèn),一般前端會(huì)來(lái)確認(rèn)需要支持的文件類型是什么嗤形。
在數(shù)據(jù)導(dǎo)入的場(chǎng)景下精偿,也需要考慮文件類型的約束,目的有兩個(gè):
減少文件數(shù)據(jù)赋兵,讓用戶更容易找到文件
降低出錯(cuò)的可能笔咽,如果我們只支持2007版本以后的Excel,那么上傳2003版本的Excel文件或者直接上傳其他文件格式霹期,這種錯(cuò)誤其實(shí)是沒(méi)有必要讓用戶觸發(fā)的叶组。
2.3.2 文件大小
在選擇文件的時(shí)候, 我們還需要考慮文件大小历造,文件大小直接決定了數(shù)據(jù)量甩十,比如我們約定大小是10M以內(nèi),如果10M都是數(shù)據(jù)吭产,其實(shí)已經(jīng)是一個(gè)非常大的數(shù)據(jù)量了侣监。
做這個(gè)約束,更多的是為了導(dǎo)入的時(shí)候能稍微減輕一下后端的壓力臣淤,用戶當(dāng)然希望所有數(shù)據(jù)可以一次導(dǎo)入橄霉,但實(shí)際情況是需要考慮業(yè)務(wù)處理的復(fù)雜度和后端的承受能力。
因此做文件大小的約束邑蒋,實(shí)際也是在處理系統(tǒng)可用性和易用性的一個(gè)平衡姓蜂。
2.4 數(shù)據(jù)處理
在選擇了文件后,導(dǎo)入數(shù)據(jù)的重點(diǎn)開(kāi)始了医吊,我們需要將選擇的文件先上傳到后臺(tái)服務(wù)器中钱慢,然后提取表格中的數(shù)據(jù),對(duì)數(shù)據(jù)做處理卿堂,完成數(shù)據(jù)的導(dǎo)入滩字。
2.4.1 數(shù)據(jù)處理進(jìn)度
一般批量導(dǎo)入的數(shù)據(jù)量都會(huì)比較大,成百上千,甚至是上萬(wàn)條的情況都有麦箍,這個(gè)時(shí)候,界面上要如何知道導(dǎo)入的進(jìn)度呢陶珠?
采用的方式有兩種:前端輪循和任務(wù)試挟裂。
- 前端輪循
這個(gè)比較好理解,在選擇文件點(diǎn)擊確定后揍诽,前端調(diào)用上傳接口诀蓉,當(dāng)文件上傳成功后,上傳接口直接返回成功暑脆。后端不斷更新數(shù)據(jù)處理進(jìn)度渠啤,可以通過(guò)數(shù)據(jù)庫(kù)保存進(jìn)度,也可以通過(guò)Redis等后端技術(shù)實(shí)現(xiàn)消息發(fā)布和訂閱添吗,然后前端輪循一個(gè)數(shù)據(jù)處理狀態(tài)查詢接口沥曹,基于查詢到的數(shù)據(jù),更新前端界面的進(jìn)度條或保持Loading
狀態(tài)碟联。
- 任務(wù)式
這個(gè)會(huì)復(fù)雜一些妓美,就是點(diǎn)擊確定后,上傳接口接收文件的同時(shí)鲤孵,在數(shù)據(jù)庫(kù)中記錄了一個(gè)任務(wù)壶栋,同時(shí)會(huì)創(chuàng)建了一個(gè)異步線程,然后返回成功普监,而這個(gè)異步線程會(huì)去讀取這個(gè)任務(wù)數(shù)據(jù)贵试,并負(fù)責(zé)處理數(shù)據(jù),最后將處理結(jié)果記錄在數(shù)據(jù)庫(kù)中凯正。前端提供一個(gè)導(dǎo)入任務(wù)管理頁(yè)面毙玻,在管理頁(yè)面上可以看到這個(gè)任務(wù)的狀態(tài)。
2.4.2 數(shù)據(jù)處理
數(shù)據(jù)處理一般都是一個(gè)比較復(fù)雜的過(guò)程漆际,因?yàn)槭峭ㄟ^(guò)Excel完成的數(shù)據(jù)整理淆珊,批量的方式完成數(shù)據(jù)更新,所以這里面對(duì)數(shù)據(jù)的校驗(yàn)工作一定要做到位奸汇,如果沒(méi)有處理好數(shù)據(jù)校驗(yàn)施符,就會(huì)帶來(lái)大量的錯(cuò)誤數(shù)據(jù)和垃圾數(shù)據(jù),從而影響系統(tǒng)正常的業(yè)務(wù)功能和流程擂找。
2.4.2.1 出現(xiàn)異常是否回滾
為了保證數(shù)據(jù)導(dǎo)入后能夠正常使用戳吝,會(huì)在嚴(yán)格的校驗(yàn),如果校驗(yàn)時(shí)某一條數(shù)據(jù)沒(méi)有通過(guò)贯涎,那么這次的導(dǎo)入是要整體失敗還是單條記錄為失斕蕖?
- 單條異常,不影響整體導(dǎo)入:這里其實(shí)主要考慮每一條數(shù)據(jù)是否獨(dú)立是獨(dú)立個(gè)體陆盘,如果是獨(dú)立個(gè)體普筹,就可以單條異常不導(dǎo)入,其他正常數(shù)據(jù)繼續(xù)導(dǎo)入
這里面還需要保證一點(diǎn)隘马,如果一條數(shù)據(jù)中設(shè)計(jì)多個(gè)業(yè)務(wù)對(duì)象數(shù)據(jù)導(dǎo)入太防,則需要處理好事物,即:其中一個(gè)業(yè)務(wù)對(duì)象導(dǎo)入失敗酸员,則其他已經(jīng)導(dǎo)入的業(yè)務(wù)數(shù)據(jù)也需要回滾蜒车,保證數(shù)據(jù)的一致性。
- 單條異常幔嗦,整體導(dǎo)入異常:如果說(shuō)數(shù)據(jù)間有關(guān)聯(lián)酿愧,單條數(shù)據(jù)的異常會(huì)影響到其他待導(dǎo)入數(shù)據(jù),則一條數(shù)據(jù)異常邀泉,就需要終止導(dǎo)入嬉挡。
2.4.2.2 異常數(shù)據(jù)如何處理
如果我們?cè)试S單條數(shù)據(jù)異常,其他數(shù)據(jù)可以繼續(xù)導(dǎo)入呼渣,那么緊接著的問(wèn)題就是棘伴,這些異常數(shù)據(jù)如何處理?
有兩種比較好的處理方式:
提供一個(gè)異常數(shù)據(jù)查詢界面屁置,將數(shù)據(jù)和異常原因展示出來(lái)焊夸。
或者提供一個(gè)異常數(shù)據(jù)下載功能,在數(shù)據(jù)處理完成后蓝角,將異常數(shù)據(jù)摘出來(lái)阱穗,生成一個(gè)新的表格,格式和導(dǎo)入表格的格式一致使鹅,并再最后一列寫入錯(cuò)誤原因揪阶。
這么做的原因是,這個(gè)表格用戶可以下載下來(lái)患朱,然后打開(kāi)后可以在表格里面基于錯(cuò)誤對(duì)數(shù)據(jù)做調(diào)整鲁僚,然后刪除最后一列的錯(cuò)誤原因,再用這個(gè)表格數(shù)據(jù)繼續(xù)上傳導(dǎo)入裁厅。
2.5 數(shù)據(jù)導(dǎo)入后的批量操作支撐
計(jì)算機(jī)和人的區(qū)別就是冰沙,人容易犯小錯(cuò)誤,比如導(dǎo)入數(shù)據(jù)這個(gè)操作执虹,經(jīng)常是導(dǎo)入到系統(tǒng)后才發(fā)現(xiàn)導(dǎo)入的數(shù)據(jù)有問(wèn)題拓挥,需要修改,但是數(shù)據(jù)已經(jīng)導(dǎo)入成功了袋励,而且量還很大侥啤,這個(gè)時(shí)候当叭,刪除數(shù)據(jù)就是一個(gè)吃力的工作。
所以這里我們?nèi)绻峁┝伺繉?dǎo)入功能后盖灸,相對(duì)應(yīng)的數(shù)據(jù)操作功能蚁鳖,基本上都需要提供批量操作的能力:
批量修改某一個(gè)字典類型的字段
批量調(diào)整狀態(tài)
批量刪除
批量導(dǎo)出
到此為止,我理解一個(gè)相對(duì)完整的數(shù)據(jù)批量導(dǎo)入功能才算完備赁炎。