本發(fā)明屬于數(shù)據(jù)抽取,具體涉及一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取方法及系統(tǒng)。
背景技術(shù):
1、面對海量的數(shù)據(jù)資源,如何高效、準(zhǔn)確地抽取有價(jià)值的信息,成為了當(dāng)前信息化邁向數(shù)據(jù)化過程中亟待解決的問題;企事業(yè)單位往往多個(gè)系統(tǒng),不同數(shù)據(jù)庫產(chǎn)品;當(dāng)前主流的數(shù)據(jù)抽取工具往往存在效率低下、資源投入巨大等弊端,無法滿足現(xiàn)代企業(yè)、政府對數(shù)據(jù)處理的時(shí)效性、經(jīng)濟(jì)性要求。
2、系統(tǒng)運(yùn)行成本、讀寫同步速度、易用性、不同數(shù)據(jù)庫的支持性、任務(wù)可干預(yù)性、可監(jiān)控性等是數(shù)據(jù)同步軟件選擇的重要考量因素,當(dāng)前軟件技術(shù)數(shù)據(jù)同步方式所使用技術(shù)主要分為以下5種模式:
3、數(shù)據(jù)庫特性模式:通過數(shù)據(jù)庫特性連接,通過select讀取數(shù)據(jù),insert寫入數(shù)據(jù),如數(shù)據(jù)聯(lián)邦(db2)、dblink(oracle、達(dá)夢、postgresql、mysql)等;該模式速度較快、成本低,但該模式不支持復(fù)雜多種類異構(gòu)數(shù)據(jù)庫的匯聚、內(nèi)部讀寫串行,執(zhí)行中沒有干預(yù)提升超大同步任務(wù)的手段。
4、多任務(wù)串型模式:多線程先讀后寫形式,讀時(shí)寫等待,寫時(shí)讀等待,該模式系統(tǒng)邏輯簡單、成本較低;該模式多應(yīng)用于政務(wù)部門數(shù)據(jù)中心進(jìn)行數(shù)據(jù)開發(fā)匯聚;但是多任務(wù)串型模式服務(wù)器資源利用率低、速度較慢,沒有干預(yù)提升超大同步任務(wù)的手段。
5、多任務(wù)并行模式:采用多線程進(jìn)行讀寫并行,讀取線程將數(shù)據(jù)寫入內(nèi)存,讀取服務(wù)連續(xù)讀取;寫入線程從內(nèi)存拿數(shù)據(jù),寫入線程連續(xù)寫,如ibm?datastage、開源kettle等產(chǎn)品。該模式對資源利用率高,商業(yè)產(chǎn)品速度較快,但費(fèi)用高,開源產(chǎn)品速度一般;并行任務(wù)數(shù)無法控制,內(nèi)存占用率無法控制,過多線程引起cpu時(shí)間片頻繁切換導(dǎo)致同步速度降低,沒有干預(yù)提升超大同步任務(wù)的手段。
6、分布式消費(fèi)模式:通過zookeeper等應(yīng)用程序進(jìn)行服務(wù)調(diào)度,采用多機(jī)多線程讀取數(shù)據(jù),一個(gè)任務(wù)分配給一個(gè)機(jī)器,一個(gè)讀取任務(wù)可設(shè)定1個(gè)或多個(gè)寫入任務(wù)。獲取讀取任務(wù)機(jī)器開啟讀線程,將讀取數(shù)據(jù)按一定條數(shù)進(jìn)行分片打包,打包后的數(shù)據(jù)發(fā)送到mq消息中間件;獲取寫入任務(wù)機(jī)器開啟寫線程,通過從mq消息中間件獲得一個(gè)數(shù)據(jù)分片,將數(shù)據(jù)寫入目標(biāo)庫。該模式支持多種不同數(shù)據(jù)庫、同步速度快、讀寫能力可以進(jìn)行有限的水平擴(kuò)展,但需要多服務(wù)器硬件疊加堆積,投入成本高、結(jié)構(gòu)復(fù)雜部署難度較大、單機(jī)處理能力較差、調(diào)度服務(wù)有腦裂風(fēng)險(xiǎn)、沒有干預(yù)提升超大同步任務(wù)的手段。
7、流式同步模式:采用數(shù)據(jù)庫日志分析,往往通過日志操作時(shí)間點(diǎn)打點(diǎn),先串行同步存量數(shù)據(jù),再從記錄的時(shí)間點(diǎn)開始使用日志分析,進(jìn)行流式增量處理,一般cdc進(jìn)行日志數(shù)據(jù)分析,通過spark、flink等框架對分析日志進(jìn)行流式處理,如apache?seatunne系統(tǒng)。該模式電商用戶行為分析推薦系統(tǒng)使用居多,以處理增量數(shù)據(jù)為目標(biāo),全量數(shù)據(jù)處理慢、依賴數(shù)據(jù)庫歸檔日志、結(jié)構(gòu)復(fù)雜部署難度較大、沒有干預(yù)提升超大同步任務(wù)的手段。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的之一在于提供一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取方法,實(shí)現(xiàn)高性能、較低成本、集中式、易部署實(shí)施的數(shù)據(jù)抽取。
2、為實(shí)現(xiàn)上述目的,本發(fā)明所采取的技術(shù)方案為:
3、一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取方法,所述多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取方法,包括:
4、建立抽取計(jì)劃,并針對每一個(gè)抽取計(jì)劃建立一個(gè)或多個(gè)抽取任務(wù);
5、對抽取計(jì)劃中的每一個(gè)抽取任務(wù)設(shè)定為抽取前執(zhí)行或抽取后執(zhí)行;
6、觸發(fā)一個(gè)已建立的抽取計(jì)劃執(zhí)行;
7、根據(jù)cpu核數(shù)計(jì)算并行最大任務(wù)數(shù),基于并行最大任務(wù)數(shù)啟動(dòng)已觸發(fā)的抽取計(jì)劃中的抽取任務(wù),每個(gè)抽取任務(wù)初始開啟1個(gè)讀線程和n個(gè)寫線程;
8、監(jiān)控已啟動(dòng)的抽取任務(wù),若抽取任務(wù)中的讀線程連續(xù)等待寫入緩存次數(shù)大于等待閾值,同時(shí)空閑cpu核數(shù)不為零,則開啟該抽取任務(wù)新的一個(gè)寫線程,對讀線程連續(xù)等待寫入緩存次數(shù)清零,并持續(xù)監(jiān)控直至抽取任務(wù)完成。
9、以下還提供了若干可選方式,但并不作為對上述總體方案的額外限定,僅僅是進(jìn)一步的增補(bǔ)或優(yōu)選,在沒有技術(shù)或邏輯矛盾的前提下,各可選方式可單獨(dú)針對上述總體方案進(jìn)行組合,還可以是多個(gè)可選方式之間進(jìn)行組合。
10、作為優(yōu)選,所述并行最大任務(wù)數(shù)的計(jì)算方法為:并行最大任務(wù)數(shù)=(cpu核數(shù)-系統(tǒng)操作交互核數(shù))/(1+n)。
11、作為優(yōu)選,所述讀線程按數(shù)據(jù)條數(shù)對待讀取數(shù)據(jù)進(jìn)行分片,判斷是否滿足向內(nèi)存緩存中寫入數(shù)據(jù)分片;若滿足,則緩存數(shù)據(jù)分片,此時(shí)總緩存分片計(jì)數(shù)、目標(biāo)表緩存分片計(jì)數(shù)各加1;否則讀線程等待,讀線程連續(xù)等待寫入緩存次數(shù)加1;
12、所述寫線程消費(fèi)內(nèi)存緩存中的數(shù)據(jù)分片,此時(shí)總緩存分片計(jì)數(shù)、目標(biāo)表緩存分片計(jì)數(shù)各減1。
13、作為優(yōu)選,所述判斷是否滿足向內(nèi)存緩存中寫入數(shù)據(jù)分片,包括:
14、當(dāng)總緩存分片計(jì)數(shù)未達(dá)到設(shè)定的最大緩存分片總數(shù)dm1,同時(shí)目標(biāo)表緩存分片計(jì)數(shù)未達(dá)到設(shè)定的單表最大緩存分片數(shù)dm2時(shí),判斷為滿足;否則判斷為不滿足。
15、作為優(yōu)選,所述最大緩存分片總數(shù)dm1和單表最大緩存分片數(shù)dm2的動(dòng)態(tài)調(diào)整方式如下:
16、每間隔預(yù)設(shè)時(shí)間,判斷總緩存分片占用服務(wù)器內(nèi)存的占比是否超過占比閾值,若未超過,則不調(diào)整最大緩存分片總數(shù)dm1和單表最大緩存分片數(shù)dm2;否則調(diào)整最大緩存分片總數(shù)dm1和單表最大緩存分片數(shù)dm2如下:
17、
18、單表最大緩存分片數(shù)dm2=單表最大緩存分片數(shù)dm2-nj
19、式中,nj為預(yù)設(shè)的遞減步長。
20、作為優(yōu)選,還包括配置多個(gè)數(shù)據(jù)源,所述數(shù)據(jù)源包括:數(shù)據(jù)源名稱、數(shù)據(jù)庫類型、數(shù)據(jù)庫對應(yīng)驅(qū)動(dòng)、地址、端口、用戶名和密碼。
21、作為優(yōu)選,所述建立抽取計(jì)劃包括:建立抽取計(jì)劃名稱、選擇源頭數(shù)據(jù)源和選擇目標(biāo)數(shù)據(jù)源;
22、所述建立抽取任務(wù)包括:設(shè)定任務(wù)名、抽取源頭數(shù)據(jù)的獲取方式及目標(biāo)數(shù)據(jù)的寫入方式。
23、作為優(yōu)選,所述空閑cpu核數(shù)的計(jì)算方法為:空閑cpu核數(shù)=cpu核數(shù)-讀線程總數(shù)-寫線程總數(shù)-系統(tǒng)操作交互核數(shù)。
24、本發(fā)明的目的之二在于提供一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取系統(tǒng),提供一套不依賴數(shù)據(jù)庫歸檔、速度快、部署成本低、結(jié)構(gòu)復(fù)雜度低、內(nèi)存數(shù)據(jù)量可控、自動(dòng)監(jiān)控調(diào)配cpu資源提升抽取速度的系統(tǒng)。
25、為實(shí)現(xiàn)上述目的,本發(fā)明所采取的技術(shù)方案為:
26、一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取系統(tǒng),所述多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取系統(tǒng),包括:
27、抽取計(jì)劃模塊,用于建立抽取計(jì)劃,并針對每一個(gè)抽取計(jì)劃建立一個(gè)或多個(gè)抽取任務(wù);
28、抽取加工設(shè)置模塊,用于對抽取計(jì)劃中的每一個(gè)抽取任務(wù)設(shè)定為抽取前執(zhí)行或抽取后執(zhí)行;
29、計(jì)劃執(zhí)行模塊,用于觸發(fā)一個(gè)已建立的抽取計(jì)劃執(zhí)行;
30、任務(wù)執(zhí)行模塊,用于根據(jù)cpu核數(shù)計(jì)算并行最大任務(wù)數(shù),基于并行最大任務(wù)數(shù)啟動(dòng)已觸發(fā)的抽取計(jì)劃中的抽取任務(wù),每個(gè)抽取任務(wù)初始開啟1個(gè)讀線程和n個(gè)寫線程;
31、任務(wù)監(jiān)控模塊,用于監(jiān)控已啟動(dòng)的抽取任務(wù),若抽取任務(wù)中的讀線程連續(xù)等待寫入緩存次數(shù)大于等待閾值,同時(shí)空閑cpu核數(shù)不為零,則開啟該抽取任務(wù)新的一個(gè)寫線程,對讀線程連續(xù)等待寫入緩存次數(shù)清零,并持續(xù)監(jiān)控直至抽取任務(wù)完成。
32、本發(fā)明提供的一種多線程數(shù)據(jù)緩存讀寫并行高性能數(shù)據(jù)抽取方法及系統(tǒng),為提升抽取速度,通過讀寫線程并行,去除讀寫串行等待時(shí)間;讀線程將數(shù)據(jù)寫入內(nèi)存緩存,寫線程從內(nèi)存緩存獲得數(shù)據(jù),減少寫獲得數(shù)據(jù)時(shí)間網(wǎng)絡(luò)消耗;多任務(wù)多線程提高cpu資源利用率,減少多任務(wù)總同步時(shí)間;根據(jù)服務(wù)器cpu核數(shù)控制并行最大任務(wù)數(shù),保證線程有對應(yīng)cpu核數(shù),消除線程頻繁切換導(dǎo)致cpu時(shí)間片切換的時(shí)間消耗及內(nèi)存損耗。