雙創(chuàng)文檔查重性能改進(jìn)方案

文檔目的

目前查重功能的主要問題

目前系統(tǒng)的查重功能只用在立項(xiàng)表單的提交功能上枝冀。當(dāng)立項(xiàng)功能提交時(shí)觸發(fā)查重檢查吠裆。由于查重算法本身性能不是很快吞鸭,在文檔有1000多個(gè)時(shí)耗時(shí)大概5秒多俊扳;如果文檔數(shù)量增加远寸,耗時(shí)只會(huì)更多抄淑。

文檔的要點(diǎn)

本文檔主要討論雙創(chuàng)查重模塊性能改進(jìn)的方式方法屠凶。核心目標(biāo)是改善用戶體驗(yàn)驰后。我們也許最終沒有加快查重算法的性能,但是矗愧,我們的目標(biāo)是改善用戶的體驗(yàn)灶芝。使用戶在使用過程中不會(huì)有不舒服的情緒。

文檔目錄

本文檔討論話題如下:

  • 預(yù)先觸發(fā)
  • 支持增量數(shù)據(jù)
  • 保存運(yùn)行結(jié)果
  • 改進(jìn)運(yùn)行節(jié)點(diǎn)
  • 多節(jié)點(diǎn)運(yùn)行

支持增量數(shù)據(jù)

目前的程序不支持增量查重?cái)?shù)據(jù)唉韭,這意味著新通過的成果推廣或者立項(xiàng)無法作為參考依據(jù)夜涕。可改進(jìn)程序属愤,支持增量數(shù)據(jù)寫入緩存女器。

改進(jìn)點(diǎn)

立項(xiàng)

1、立項(xiàng)通過后住诸,添加到文檔查重緩存中
2驾胆、立項(xiàng)刪除后,從文檔查重緩存中刪除(如果有)
3贱呐、通過狀態(tài)的立項(xiàng)修改后丧诺,重新加載到緩存(如果有)

成果推廣

1、成果推廣通過后奄薇,添加到文檔查重緩存中
2驳阎、成果推廣刪除后,從文檔查重緩存中刪除(如果有)
3、通過狀態(tài)的成果推廣修改后呵晚,重新加載到緩存(如果有)

性能改進(jìn)點(diǎn)

為了提升用戶的體驗(yàn)蜘腌,加快文檔查重對(duì)比結(jié)果的輸出可以在如下幾點(diǎn)入手:

預(yù)先觸發(fā)

目前觸發(fā)檢查的點(diǎn)是立項(xiàng)提交時(shí)同時(shí)運(yùn)行查重的程序。一般用戶需要等待4-5秒的時(shí)間劣纲。那么逢捺,在提交之前預(yù)先觸發(fā)檢查可以減少用戶等待或者免于用戶等待。

預(yù)先觸發(fā)的方案

方案一 在立項(xiàng)的表單頁面添加“對(duì)比”按鈕癞季。

添加方式說明

在立項(xiàng)表單頁添加對(duì)比按鈕劫瞳。當(dāng)用戶填寫完項(xiàng)目論證信息后,可以點(diǎn)擊對(duì)比按鈕绷柒。那么系統(tǒng)將在后臺(tái)觸發(fā)查重檢查操作志于。

解決用戶點(diǎn)擊“對(duì)比”后再修改數(shù)據(jù)的問題

如果用戶在點(diǎn)擊完“對(duì)比”后發(fā)現(xiàn)先前填寫的數(shù)據(jù)需要修改呢?

用戶返回修改數(shù)據(jù)是無法避免的問題废睦。
如果用戶修改了項(xiàng)目論證中的數(shù)據(jù)伺绽,只能再次觸發(fā)查重。這里涉及到兩個(gè)問題:

  1. 如果之前的查重任務(wù)還沒有完成嗜湃,我們應(yīng)該采取什么樣的操作奈应?
  2. 如果多次觸發(fā)查重,是否會(huì)帶來系統(tǒng)多重任務(wù)造成性能問題购披?
解決方法

由于頁面提供了預(yù)先觸發(fā)的功能杖挣,那么重復(fù)提交查重功能是無法避免的。但是刚陡,重復(fù)提交查重請(qǐng)求不代表我們一定會(huì)執(zhí)行惩妇。由于我們后臺(tái)的查重任務(wù)是分頁抽取文檔數(shù)據(jù)執(zhí)行算法的,我們可以對(duì)同一個(gè)立項(xiàng)設(shè)置一個(gè)任務(wù)id,后面的提交請(qǐng)求執(zhí)行前可以先檢查是否正在對(duì)同一個(gè)立項(xiàng)執(zhí)行查重任務(wù)筐乳。如果有歌殃,我們可以設(shè)置下一個(gè)分頁任務(wù)不再執(zhí)行,而重新開始新的查重任務(wù)蝙云。

方案二 不添加“對(duì)比按鈕”,自動(dòng)執(zhí)行查重任務(wù)

當(dāng)用戶填寫完一個(gè)項(xiàng)目論證項(xiàng)后氓皱,自動(dòng)對(duì)該填寫觸發(fā)檢查
說明:
1、用戶在填寫項(xiàng)目論證時(shí)勃刨,每一個(gè)框填寫的文字都是比較多的波材,這意味著每一項(xiàng)的填寫都是需要花費(fèi)至少一分鐘的時(shí)間;
2朵你、基于上一點(diǎn)各聘,如果用戶填寫第一項(xiàng)時(shí),再填寫第二項(xiàng)時(shí)抡医,自動(dòng)觸發(fā)對(duì)第一項(xiàng)的查重檢查躲因,并不會(huì)影響用戶早敬,因?yàn)橛脩敉ǔT诘诙?xiàng)沒有填寫完成時(shí)第一項(xiàng)的查重結(jié)果就返回來了;
3大脉、由于項(xiàng)目論證下面還有需要用戶填寫的內(nèi)容搞监,所以當(dāng)用戶填寫完項(xiàng)目論證以后,通沉螅可以繼續(xù)正常填寫下面的內(nèi)容琐驴。所有查重結(jié)果返回后,用戶并不會(huì)感覺系統(tǒng)已經(jīng)提前完成了查重的任務(wù)秤标;
4绝淡、用戶在提交時(shí),系統(tǒng)已經(jīng)完成了所有項(xiàng)目論證的查重工作苍姜,所以用戶不會(huì)等待查重結(jié)果返回牢酵。

用戶返回修改項(xiàng)目論證的數(shù)據(jù)

與方案一一樣,用戶同樣有可能返回修改先前填寫的數(shù)據(jù)衙猪。這時(shí)解決思路是一樣的馍乙。我們可以設(shè)置一個(gè)查重任務(wù)id,當(dāng)同一個(gè)查重?cái)?shù)據(jù)到來時(shí)垫释,先前的任務(wù)如果還沒有結(jié)束丝格,可以提前讓它結(jié)束;從而開始執(zhí)行當(dāng)前查重任務(wù)棵譬。

保存對(duì)比結(jié)果

由于目前的設(shè)計(jì)不保存檢查的結(jié)果显蝌,那么當(dāng)工單進(jìn)入專家審核環(huán)節(jié)時(shí),必須再次觸發(fā)檢查茫船,這樣的檢查沒有意義琅束。保存檢查的結(jié)果可以減少查重的次數(shù)扭屁。

保存方案的設(shè)計(jì)原則

查重的數(shù)據(jù)應(yīng)該獨(dú)立于業(yè)務(wù)模塊
查重應(yīng)該是一個(gè)獨(dú)立的公用模塊
查重模塊的代碼和數(shù)據(jù)表應(yīng)獨(dú)立于業(yè)務(wù)模塊(代碼目前是獨(dú)立的模塊)
查重模塊的代碼應(yīng)該可以方便抽取成為微服務(wù)
數(shù)據(jù)表設(shè)計(jì)盡量簡(jiǎn)單算谈,避免復(fù)雜

數(shù)據(jù)表設(shè)計(jì)

查重的表是獨(dú)立的模塊,但是料滥,它還是要保存少量的業(yè)務(wù)數(shù)據(jù)然眼。比如業(yè)務(wù)id和業(yè)務(wù)類型(隨意自定義)。

字段名 中文名字 類型 備注
id id的值 varchar2
business_id 業(yè)務(wù)id varchar2 32位葵腹,與業(yè)務(wù)類型組成復(fù)合主鍵
business_type 業(yè)務(wù)類型 varchar2 自定義相應(yīng)的類型
hash 哈希值 varchar2 對(duì)應(yīng)內(nèi)容的哈希值高每,不需要直接保存原始內(nèi)容值,只需要保存哈希践宴,以此檢測(cè)內(nèi)容是否改變過
create_time 保存時(shí)間 date
state 狀態(tài) varchar2 1運(yùn)行查重中 2 查重結(jié)束
result_state 是否存在可能重復(fù)的文檔 varchar2 1存在 2 不存在
result 查重結(jié)果 clob 如果觸發(fā)前檢查發(fā)現(xiàn)hash值沒有發(fā)生變化鲸匿,直接返回該字段結(jié)果

邏輯說明

1、業(yè)務(wù)模塊創(chuàng)建一個(gè)查重任務(wù)阻肩。

參數(shù):
業(yè)務(wù)id 業(yè)務(wù)類型 查重內(nèi)容

2带欢、檢查該業(yè)務(wù)查重任務(wù)是否正在運(yùn)行

如果正在運(yùn)行运授,則提前結(jié)束該任務(wù)(禁止下一個(gè)分頁的查重,標(biāo)志必須結(jié)束任務(wù))
執(zhí)行該查重任務(wù)

3乔煞、返回查重結(jié)果吁朦。查重結(jié)果可以立即顯示也可以先緩存,在需要的時(shí)候再顯示渡贾。
4逗宜、一個(gè)業(yè)務(wù)類型可能查重的觸發(fā)次數(shù)不止一次。當(dāng)下一次觸發(fā)時(shí)空骚,如果檢查hash的結(jié)果與先前一致纺讲,不必觸發(fā)查重任務(wù),只需要返回先前查重的結(jié)果囤屹。

改進(jìn)運(yùn)行節(jié)點(diǎn)

由于查重算法比較耗系統(tǒng)的資源刻诊,可以將查重任務(wù)轉(zhuǎn)移到其他模塊獨(dú)立運(yùn)行:

轉(zhuǎn)換到BPP模塊。
設(shè)置獨(dú)立的微服務(wù)模塊牺丙。并多節(jié)點(diǎn)運(yùn)行则涯。這個(gè)方案受限于系統(tǒng)的硬件資源情況。

多節(jié)點(diǎn)運(yùn)行

多節(jié)點(diǎn)可以將查重的數(shù)據(jù)量N倍減少冲簿∷谂校可以大大提升效率,但對(duì)資源比較敏感峦剔。由于正式環(huán)境節(jié)點(diǎn)數(shù)量和開發(fā)難度的問題档礁,目前這個(gè)方案可以作為備選方案。

多節(jié)點(diǎn)運(yùn)行方案(草稿)

1吝沫、接到任務(wù)的節(jié)點(diǎn)成為查重任務(wù)的管理者和協(xié)調(diào)者(NameNode)
2呻澜、管理者根據(jù)文檔總數(shù)量確定各節(jié)點(diǎn)任務(wù),向各節(jié)點(diǎn)(taskNode,也可以是它自身)發(fā)送任務(wù)
3惨险、任務(wù)的參數(shù)為查重的內(nèi)容和分頁的游標(biāo)羹幸,文檔數(shù)量
4、NameNode等待各節(jié)點(diǎn)返回各自的查重結(jié)果
5辫愉、所有taskNode返回查重結(jié)果后栅受,NameNode合并結(jié)果,排序恭朗,生成最后結(jié)果
6屏镊、任何一個(gè)節(jié)點(diǎn)運(yùn)行出錯(cuò)或者沒有返回,該查重任務(wù)失敗痰腮。(沒有必要設(shè)計(jì)復(fù)雜的容錯(cuò)能力)

延時(shí)處理

性能改進(jìn)的另一種思路是使用消息隊(duì)列延時(shí)處理查重任務(wù)而芥。但目前系統(tǒng)要求查重不能延時(shí)處理,因此這個(gè)方案可以作為備選膀值。

延時(shí)處理概念方案

1棍丐、確定延時(shí)通知方案(短信弟翘、站內(nèi)信、其他通知手段)
2骄酗、設(shè)計(jì)延時(shí)提交方案稀余。(可以設(shè)置工單必須等待查重任務(wù)結(jié)束后才可以實(shí)質(zhì)提交(系統(tǒng)自動(dòng)提交),如果有重復(fù)內(nèi)容趋翻,需要用戶手動(dòng)確認(rèn))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睛琳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子踏烙,更是在濱河造成了極大的恐慌师骗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨惩,死亡現(xiàn)場(chǎng)離奇詭異辟癌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荐捻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門黍少,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人处面,你說我怎么就攤上這事厂置。” “怎么了魂角?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵昵济,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我野揪,道長(zhǎng)访忿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任斯稳,我火速辦了婚禮海铆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘平挑。我一直安慰自己游添,他們只是感情好系草,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布通熄。 她就那樣靜靜地躺著,像睡著了一般找都。 火紅的嫁衣襯著肌膚如雪唇辨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天能耻,我揣著相機(jī)與錄音赏枚,去河邊找鬼亡驰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饿幅,可吹牛的內(nèi)容都是我干的凡辱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼栗恩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼透乾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磕秤,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤乳乌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后市咆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汉操,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蒙兰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷瘤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搜变,死狀恐怖膀斋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痹雅,我是刑警寧澤仰担,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站绩社,受9級(jí)特大地震影響摔蓝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愉耙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一贮尉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朴沿,春花似錦猜谚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坚芜,卻和暖如春览芳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸿竖。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工沧竟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铸敏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓悟泵,卻偏偏與公主長(zhǎng)得像杈笔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糕非,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容