林祥輝,張 瑾,黃康平,許 磊,許洪波,程學(xué)旗,程 工
(1. 中國科學(xué)院計(jì)算技術(shù)研究所,北京 100190;2. 中國科學(xué)院大學(xué),北京 100190;3. 國家計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心,北京 100190)
處于信息爆炸的時(shí)代,我們的生活被海量數(shù)據(jù)所包圍。從大量的數(shù)據(jù)源中挖掘出有價(jià)值的信息成為了大規(guī)模數(shù)據(jù)分析挖掘系統(tǒng)的重點(diǎn)。大規(guī)模數(shù)據(jù)分析挖掘系統(tǒng)的主要處理流程是收集來自各個(gè)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行存儲,然后對負(fù)責(zé)數(shù)據(jù)分析的應(yīng)用程序提供數(shù)據(jù)服務(wù),進(jìn)行數(shù)據(jù)分析處理。傳統(tǒng)的架構(gòu)是設(shè)立中心數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)的存儲和服務(wù)。各種數(shù)據(jù)源將數(shù)據(jù)寫入到中心數(shù)據(jù)庫中進(jìn)行統(tǒng)一存儲;應(yīng)用分析程序從數(shù)據(jù)庫中讀取數(shù)據(jù),進(jìn)行分析和處理。但是在海量數(shù)據(jù)環(huán)境下,隨著數(shù)據(jù)來源種類的增加、來源數(shù)據(jù)量的增長和應(yīng)用分析程序數(shù)目的增加,中心數(shù)據(jù)庫架構(gòu)的問題日益突顯。中心數(shù)據(jù)庫架構(gòu)的缺點(diǎn)主要體現(xiàn)在三個(gè)方面: 1.對數(shù)據(jù)庫寫入頻率的增加影響了數(shù)據(jù)庫的實(shí)時(shí)響應(yīng)性能;2.數(shù)據(jù)要經(jīng)過中心數(shù)據(jù)庫存儲后才能被應(yīng)用程序使用,這種串行的工作模式增加了數(shù)據(jù)處理延時(shí);3.隨應(yīng)用程序個(gè)數(shù)的增加,對數(shù)據(jù)庫的重復(fù)讀取次數(shù)呈線數(shù)增加,嚴(yán)重影響了數(shù)據(jù)庫的IO訪問性能。本文針對在海量數(shù)據(jù)環(huán)境下的基于中心數(shù)據(jù)庫的架構(gòu)所帶來的問題,提出了基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架,通過在數(shù)據(jù)庫之前增加了一個(gè)基于內(nèi)存的數(shù)據(jù)緩存層,改變了數(shù)據(jù)處理流程,實(shí)現(xiàn)了對于數(shù)據(jù)庫的讀寫分離?;趦?nèi)存的在線數(shù)據(jù)處理服務(wù)框架的使用提高了整個(gè)系統(tǒng)的響應(yīng)速度,縮短了平均數(shù)據(jù)處理延時(shí),減少了應(yīng)用分析程序讀取數(shù)據(jù)庫的次數(shù)。
本文的組織結(jié)構(gòu)如下: 第2節(jié)介紹基于中心數(shù)據(jù)庫架構(gòu)和數(shù)據(jù)處理的相關(guān)工作以及現(xiàn)有解決方案存在的問題;第3節(jié)提出了基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架并且介紹實(shí)現(xiàn)方法;第4節(jié)在實(shí)驗(yàn)中對比了基于中心式數(shù)據(jù)庫的處理框架和基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架的響應(yīng)速度和平均數(shù)據(jù)處理延時(shí);第5節(jié)對目前的工作成果進(jìn)行總結(jié)并展望下一步的研究內(nèi)容。
在數(shù)據(jù)分析處理應(yīng)用中,基于中心數(shù)據(jù)庫的分析處理架構(gòu)被廣泛使用。如圖1所示,大規(guī)模數(shù)據(jù)分析處理系統(tǒng)通常采用中心數(shù)據(jù)庫的架構(gòu),中心數(shù)據(jù)庫主要提供了存儲服務(wù)和數(shù)據(jù)服務(wù)。來自不同數(shù)據(jù)源的數(shù)據(jù)被寫入到中心數(shù)據(jù)庫中進(jìn)行存儲,應(yīng)用分析程序從數(shù)據(jù)庫中讀取數(shù)據(jù)進(jìn)行分析和處理。但是數(shù)據(jù)量的增長給基于中心數(shù)據(jù)庫的處理架構(gòu)帶來了挑戰(zhàn)。
圖1 基于中心數(shù)據(jù)庫的分析處理架構(gòu)示意圖
傳統(tǒng)的數(shù)據(jù)來源包括了新聞、論壇和博客[1-2]三種主要的信息渠道。隨著互聯(lián)網(wǎng)應(yīng)用的普及,來自搜索引擎、微博平臺[3-4]和社交網(wǎng)站的數(shù)據(jù)成為了新的數(shù)據(jù)來源。各種產(chǎn)生速率和數(shù)據(jù)量都不相同的數(shù)據(jù)源同時(shí)對中心數(shù)據(jù)庫提交請求,會增加數(shù)據(jù)庫事務(wù)的復(fù)雜性,增加數(shù)據(jù)庫鎖的處理時(shí)間從而降低了數(shù)據(jù)庫的實(shí)時(shí)響應(yīng)時(shí)間。在基于中心數(shù)據(jù)的處理架構(gòu)中數(shù)據(jù)需要經(jīng)過中心數(shù)據(jù)庫后才能被應(yīng)用分析程序所使用,這種串行的處理模式增加了數(shù)據(jù)平均處理延時(shí)。應(yīng)用程序個(gè)數(shù)的增加使得讀取數(shù)據(jù)庫的次數(shù)增加,每一條數(shù)據(jù)記錄都會被所有的分析程序請求,對于數(shù)據(jù)庫的讀請求的次數(shù)將會隨著應(yīng)用分析程序數(shù)目的增長呈線性增長。多次的數(shù)據(jù)讀操作導(dǎo)致數(shù)據(jù)庫讀操作的效率下降,影響了數(shù)據(jù)庫的性能。Brad Fitzpatrick在2003年開發(fā)了Memcached[5],通過在數(shù)據(jù)庫之前加入緩存,減輕了數(shù)據(jù)庫的讀取壓力,但是其無法有效降低對數(shù)據(jù)庫的寫負(fù)載。
隨著數(shù)據(jù)來源、數(shù)據(jù)量和應(yīng)用程序的增加,傳統(tǒng)的基于中心數(shù)據(jù)庫架構(gòu)的數(shù)據(jù)處理分析系統(tǒng)的缺點(diǎn)日益凸顯,亟須提出一種新的數(shù)據(jù)處理架構(gòu)來使得以上問題得到有效解決。
消息中間件[6-8]是一種由消息傳送機(jī)制或消息隊(duì)列模式組成的中間件技術(shù)。消息可以通過消息中間件被發(fā)送到各個(gè)應(yīng)用程序,通過使用消息中間件可以減少對數(shù)據(jù)庫的讀取。在大型的面向消息中間件系統(tǒng)中,發(fā)布/訂閱[9-11]模式是一個(gè)重要數(shù)據(jù)訪問范式。該模型通過一個(gè)消息隊(duì)列和數(shù)據(jù)訪問控制機(jī)制將應(yīng)用程序分為發(fā)布者和訂閱者,發(fā)布者負(fù)責(zé)將產(chǎn)生的消息放在消息隊(duì)列中,訂閱者可以從中獲取自己感興趣的數(shù)據(jù)。這種發(fā)布者和訂閱者的松散耦合可以允許更好的可擴(kuò)放性和數(shù)據(jù)訪問的控制。
消息中間件已經(jīng)廣泛應(yīng)用在金融、郵電、交通等行業(yè)。面向企業(yè)級應(yīng)用的產(chǎn)品如Apache ActiveMQ[12-13],IBM Websphere MQ[14-16]都是針對這種企業(yè)級的應(yīng)用需求而產(chǎn)生。在企業(yè)級應(yīng)用的需求中消息傳遞的關(guān)注點(diǎn)是要保證消息能夠安全到達(dá)對方,但是這種解決方案增加了數(shù)據(jù)處理和傳輸?shù)难訒r(shí)。
越來越多的公司和研究機(jī)構(gòu)嘗試使用分布式消息處理系統(tǒng)來緩解中心數(shù)據(jù)庫架構(gòu)所帶來的問題。LinkIn公司2010年提出的Kafka[17],VMWare公司支持的開源項(xiàng)目RabbitMQ[18-19]等都是基于分布式架構(gòu)的消息處理系統(tǒng),能夠高效處理海量數(shù)據(jù)環(huán)境下的消息服務(wù)。然而這些系統(tǒng)都是基于主鍵的數(shù)據(jù)讀寫,不能支持按照某一個(gè)關(guān)鍵字段的查詢,無法完全取代關(guān)系型數(shù)據(jù)庫的查詢功能。
針對基于中心數(shù)據(jù)庫的數(shù)據(jù)處理分析架構(gòu)的不足,我們提出了一種基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架,其工作原理如圖2所示,我們在原有的基于中心數(shù)據(jù)的數(shù)據(jù)處理分析處理系統(tǒng)的基礎(chǔ)上增加了一個(gè)內(nèi)存在線緩存層。來自不同數(shù)據(jù)源的數(shù)據(jù)寫入到基于內(nèi)存的數(shù)據(jù)緩存中。存在于緩存中的數(shù)據(jù)分成了兩個(gè)數(shù)據(jù)流向,一方面,寫入到緩存中的數(shù)據(jù)可以對應(yīng)用程序提供在線的數(shù)據(jù)服務(wù);另外一方面,緩存中的數(shù)據(jù)會被寫入到數(shù)據(jù)庫中進(jìn)行存儲。
圖2 基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架
內(nèi)存在線緩存層包括了多索引的數(shù)據(jù)存取模塊和數(shù)據(jù)訪問控制模塊。多索引的數(shù)據(jù)存取模塊通過多索引緩存結(jié)構(gòu)和高效的并發(fā)控制實(shí)現(xiàn)了對于高并發(fā)的讀寫請求的實(shí)時(shí)響應(yīng)。數(shù)據(jù)訪問控制模塊對應(yīng)用分析程序的數(shù)據(jù)讀取進(jìn)行記錄和控制,有效地減少了數(shù)據(jù)庫的讀寫次數(shù)。相比于基于中心數(shù)據(jù)庫的架構(gòu),增加了內(nèi)存在線緩存層之后數(shù)據(jù)庫只需要處理內(nèi)存在線緩存對于數(shù)據(jù)庫的寫請求,而原來對于數(shù)據(jù)庫的讀請求則由內(nèi)存在線緩存提供的在線數(shù)據(jù)服務(wù)進(jìn)行處理。數(shù)據(jù)在進(jìn)入中心數(shù)據(jù)庫之前就可以由基于內(nèi)存的在線緩存對應(yīng)用分析程序提供數(shù)據(jù)服務(wù)。內(nèi)存在線緩存層的加入實(shí)現(xiàn)了對于數(shù)據(jù)庫的讀寫分離,有效地減少了數(shù)據(jù)庫讀寫負(fù)載。
基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架為了高效地處理對于內(nèi)存在線緩存的讀寫請求,我們設(shè)計(jì)了一種多索引的高效數(shù)據(jù)存取模塊。如圖3所示,多索引的高效數(shù)據(jù)存取模塊采用Key-Value[20]數(shù)據(jù)存儲結(jié)構(gòu),同時(shí)借鑒了關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)思路,根據(jù)業(yè)務(wù)需求,在多個(gè)字段建立索引,以提高插入和查詢的效率。多索引數(shù)據(jù)存取模塊在平均情況下以O(shè)(1)的時(shí)間進(jìn)行去重操作,在最壞情況下以O(shè)(logn)的時(shí)間進(jìn)行插入和查詢操作。
首先,我們將來自不同數(shù)據(jù)源的數(shù)據(jù)按照Key-Value的方式進(jìn)行存儲,Key由一個(gè)全局唯一的64位的整型數(shù)字表示,Value包括了數(shù)據(jù)的一些原始屬性,包括發(fā)布時(shí)間、采集時(shí)間、原文內(nèi)容等字段。在內(nèi)存在線緩存中,我們規(guī)定所有數(shù)據(jù)的Key值是全局唯一的,如果有重復(fù)Key值要進(jìn)行寫操作時(shí),內(nèi)存在線緩存應(yīng)該阻止重復(fù)數(shù)據(jù)寫入內(nèi)存緩存中。不同的應(yīng)用分析程序會按照時(shí)間段在內(nèi)存在線緩存中進(jìn)行查詢,例如一個(gè)應(yīng)用分析程序會請求從 “19:00” 到“20:00”之間的數(shù)據(jù)。內(nèi)存緩存需要高效地處理應(yīng)用分析程序的讀請求為其提供數(shù)據(jù)服務(wù)。
其次,為了滿足高效的讀寫需求,我們針對不同的讀寫需求通過建立不同類型的索引結(jié)構(gòu)來提高內(nèi)存緩存的讀寫性能。針對數(shù)據(jù)Key值唯一性的要求, 我們對每一條記錄的Key值建立散列索引來判斷寫入的數(shù)據(jù)是否已經(jīng)存在。對Key值建立了散列索引后,只需要花費(fèi)O(1)的時(shí)間代價(jià)就可以判斷待寫入的數(shù)據(jù)是否重復(fù)。對于按照字段進(jìn)行區(qū)間查詢的需求,我們對查詢字段建立B+樹索引。應(yīng)用分析程序可以在內(nèi)存在線緩存中以O(shè)(logn)的時(shí)間代價(jià)按字段進(jìn)行區(qū)間查詢。
圖3 基于多索引的數(shù)據(jù)存取結(jié)構(gòu)
數(shù)據(jù)訪問控制模塊的任務(wù)是防止同一條數(shù)據(jù)被同一程序反復(fù)讀取?;趦?nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架對應(yīng)用分析程序提供了數(shù)據(jù)服務(wù),將原來對于數(shù)據(jù)庫的多次讀數(shù)據(jù)請求轉(zhuǎn)移到了內(nèi)存在線緩存層中。雖然基于內(nèi)存和網(wǎng)絡(luò)的數(shù)據(jù)服務(wù)的讀寫開銷要小于數(shù)據(jù)庫的讀寫,但是對于同一條數(shù)據(jù)記錄的多次讀取仍會造成網(wǎng)絡(luò)負(fù)擔(dān)。所以,我們在數(shù)據(jù)訪問控制模塊中采用了發(fā)布/訂閱者模型來進(jìn)行數(shù)據(jù)訪問控制,讓一條數(shù)據(jù)記錄以最少的次數(shù)被分析應(yīng)用程序所使用。在我們的應(yīng)用中各種不同的數(shù)據(jù)源是發(fā)布者,往在線緩存中發(fā)布數(shù)據(jù);應(yīng)用分析程序是訂閱者,對自己需要的數(shù)據(jù)進(jìn)行讀取。通過發(fā)布/訂閱模型控制一個(gè)應(yīng)用分析程序只能對同一條數(shù)據(jù)讀取一次, 這樣就避免了數(shù)據(jù)重復(fù)傳輸。訪問控制模塊由訂閱注冊器和匹配器組成,下面將介紹訂閱注冊器和匹配器的工作流程。
首先,應(yīng)用分析程序需要在在線緩存的注冊模塊進(jìn)行注冊申請,然后可以根據(jù)注冊所得到的訪問標(biāo)識來對數(shù)據(jù)進(jìn)行訪問。圖4中Register算法描述了分析程序在獲取數(shù)據(jù)之前需要進(jìn)行的注冊流程。我們設(shè)定注冊訂閱的程序的最大數(shù)目為32,用一個(gè)32位整數(shù)的每個(gè)比特位來標(biāo)識一個(gè)具體的分析程序。對于每一個(gè)申請注冊訂閱的分析程序,根據(jù)其名字在一個(gè)保存著應(yīng)用程序名字和數(shù)據(jù)獲取標(biāo)識的映射結(jié)構(gòu)。當(dāng)一個(gè)分析程序開始注冊時(shí),將在這個(gè)映射結(jié)構(gòu)中進(jìn)行查詢,如果分析已經(jīng)注冊成功,那么就將其之前注冊的數(shù)據(jù)獲取標(biāo)識返回給分析程序;如果一個(gè)分析程序是第一次進(jìn)行注冊,那么就把當(dāng)前最大位的左一位標(biāo)示的數(shù)字作為這個(gè)新注冊的分析程序的數(shù)據(jù)獲取標(biāo)識;如果目前已注冊的用戶達(dá)到了最大限度,那么算法將返回-1,表示分析程序注冊失敗。
圖4 Register算法
然后,在應(yīng)用分析程序注冊成功后通過匹配器對所需要的數(shù)據(jù)進(jìn)行讀取。分析程序使用自己的appName來進(jìn)行數(shù)據(jù)獲取請求,圖5-a中描述了應(yīng)用分析程序取數(shù)據(jù)庫的邏輯。首先根據(jù)分析程序的名字在名字—標(biāo)識映射結(jié)構(gòu)中取得appName所對應(yīng)的數(shù)據(jù)獲取標(biāo)識,然后針對目標(biāo)數(shù)據(jù)計(jì)算其數(shù)據(jù)訪問標(biāo)志位,如果此數(shù)據(jù)未被當(dāng)前分析程序所訪問過,則將這條數(shù)據(jù)返回給當(dāng)前的分析程序;如果此數(shù)據(jù)已經(jīng)被當(dāng)前分析程序使用過,那么算法則不會返回這條數(shù)據(jù)。
一個(gè)具體的數(shù)據(jù)訪問流程的例子如圖5-b所示。已知一條數(shù)據(jù)當(dāng)前的訪問標(biāo)識位為0000000000001000(十進(jìn)制標(biāo)示為8)。首先分析程序appName4,試圖請求獲取這條數(shù)據(jù),AccessData算法從之前的映射結(jié)構(gòu)中查詢得知appName4是已經(jīng)成功注冊的分析程序,其數(shù)據(jù)訪問標(biāo)識為8,然后將8和此數(shù)據(jù)的訪問控制位進(jìn)行按位與(&)運(yùn)算,在運(yùn)算結(jié)果中檢查appName4的數(shù)據(jù)訪問標(biāo)識所代表的位置(此處為第4位)的值,如果該值為1,說明appName4程序在之前已經(jīng)使用過這條數(shù)據(jù), 因此appName4就不能取得這條數(shù)據(jù)。然后分析程序appName5請求這條數(shù)據(jù),與之前的流程一樣,使用appName5的訪問控制標(biāo)識對數(shù)據(jù)的訪問控制位進(jìn)行按位與運(yùn)算之后,檢查appName5所對應(yīng)的位置的值為0,說明appName5在之前尚未訪問過這條數(shù)據(jù),所以算法會將此數(shù)據(jù)返回給appName5,同時(shí)會將這條數(shù)據(jù)的記錄訪問控制位置為1,以防止appName5在下一次重復(fù)訪問到這條記錄。
圖5?a AccessData算法圖5?b AccessData流程示意圖
為了驗(yàn)證我們所提出的基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架,通過內(nèi)存在線緩存提供的在線數(shù)據(jù)服務(wù),可以縮短數(shù)據(jù)平均處理延時(shí);通過內(nèi)存在線緩存對外提供讀寫服務(wù),可以減少數(shù)據(jù)庫的讀寫,同時(shí)縮短數(shù)據(jù)庫的平均響應(yīng)時(shí)間。我們分別采用基于中心數(shù)據(jù)庫(Oracle數(shù)據(jù)庫)的架構(gòu)和基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架進(jìn)行系統(tǒng)性能對比。實(shí)驗(yàn)部分分別對兩種架構(gòu)下的平均處理延時(shí)進(jìn)行統(tǒng)計(jì)和分析,并分析在兩種架構(gòu)下的數(shù)據(jù)庫的平均響應(yīng)時(shí)間的變化情況。
實(shí)驗(yàn)在數(shù)據(jù)規(guī)模相當(dāng)(1億條數(shù)據(jù))的兩套線上系統(tǒng)進(jìn)行,兩個(gè)系統(tǒng)分別采用了基于中心數(shù)據(jù)庫的架構(gòu)和基于內(nèi)存在線數(shù)據(jù)處理服務(wù)框架。我們將系統(tǒng)從數(shù)據(jù)源獲取到一條數(shù)據(jù)的時(shí)間到該數(shù)據(jù)被應(yīng)用分析程序處理完成的時(shí)間定義為一條數(shù)據(jù)的處理延時(shí)。圖6中我們分別統(tǒng)計(jì)了13批增量數(shù)據(jù)的平均處理延時(shí)。
圖6 數(shù)據(jù)處理延時(shí)對比圖
從圖6中可以看出,基于中心數(shù)據(jù)庫架構(gòu)的數(shù)據(jù)延時(shí)曲線整體高于基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架的數(shù)據(jù)處理延時(shí)曲線,這說明數(shù)據(jù)通過在線緩存進(jìn)行轉(zhuǎn)發(fā)能夠有效的提高數(shù)據(jù)處理的時(shí)效性。從表1中可以看出,在基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架下,數(shù)據(jù)的平均處理延時(shí)為32秒,而基于中心數(shù)據(jù)庫架構(gòu)的數(shù)據(jù)平均處理延時(shí)為則是82秒,在線緩存框架使平均數(shù)據(jù)處理時(shí)間縮短了61%。
表1 數(shù)據(jù)處理延時(shí)對比表
值得注意的是,兩種架構(gòu)中數(shù)據(jù)的處理延時(shí)曲線都呈現(xiàn)出了一種周期性的規(guī)律,但是由于內(nèi)存在線緩存處理和轉(zhuǎn)發(fā)數(shù)據(jù)的速率要明顯快于數(shù)據(jù)庫,所以可以看出基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架的曲線的周期要明顯小于由基于中心數(shù)據(jù)庫的數(shù)據(jù)處理延時(shí)曲線。一個(gè)有意思的現(xiàn)象是圖中第10批數(shù)據(jù)通過在線緩存轉(zhuǎn)發(fā)的處理延時(shí)為42s,而通過數(shù)據(jù)庫分發(fā)的處理延時(shí)僅僅是16s。出現(xiàn)這種情況的原因是數(shù)據(jù)到達(dá)的時(shí)間周期正好與分析程序請求數(shù)據(jù)庫的周期開始處相吻合,數(shù)據(jù)剛剛寫入到數(shù)據(jù)庫中,很快就被分析程序所請求。但是從整體趨勢上分析,數(shù)據(jù)通過數(shù)據(jù)庫轉(zhuǎn)發(fā)的平均處理延時(shí)明顯大于通過內(nèi)存在線緩存進(jìn)行轉(zhuǎn)發(fā)的平均處理延時(shí)。本文所提出的基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架有效地提高數(shù)據(jù)分析處理的時(shí)效性。
本實(shí)驗(yàn)中,我們分別對兩個(gè)系統(tǒng)的Oracle數(shù)據(jù)庫生成自動工作負(fù)載報(bào)告[18](Automatic Workload Repository,以下簡稱AWR報(bào)告),通過AWR報(bào)告計(jì)算兩種架構(gòu)下數(shù)據(jù)庫的平均事務(wù)響應(yīng)時(shí)間。
AWR是從Oracle10g開始提出的一種記錄數(shù)據(jù)庫工作負(fù)載的報(bào)告。AWR永久地保存系統(tǒng)的性能診斷信息給DBA們提供了更加有效的系統(tǒng)監(jiān)測工具。在工業(yè)界中AWR報(bào)告被廣泛地應(yīng)用在數(shù)據(jù)庫性能分析上。
Oracle在10g版本明確引入time model[19],選取了事務(wù)平均響應(yīng)時(shí)間來衡量數(shù)據(jù)庫對事務(wù)處理的響應(yīng)速度?;谑聞?wù)的平均響應(yīng)時(shí)間,可以看作性能優(yōu)化效果的一個(gè)交付和對比。事務(wù)平均響應(yīng)時(shí)間的計(jì)算方法如式(1)所示
avg trans respone time(s)=
(1)
表2是兩個(gè)對比實(shí)驗(yàn)數(shù)據(jù)庫在一個(gè)小時(shí)內(nèi)的AWR報(bào)告的片段。從中可以看出在基于中心數(shù)據(jù)庫架構(gòu)的環(huán)境下,數(shù)據(jù)庫的文件順序讀次數(shù)為10 671次,數(shù)據(jù)庫平均事務(wù)響應(yīng)時(shí)間為7.09s。在使用了基于在線緩存的架構(gòu)之后,由于應(yīng)用程序不再從數(shù)據(jù)庫中讀取數(shù)據(jù),所以數(shù)據(jù)庫文件順序讀取次數(shù)下降為385同時(shí)平均事務(wù)響應(yīng)時(shí)間下降為2.88s。在使用了在線緩存的結(jié)構(gòu)之后,數(shù)據(jù)庫的負(fù)載大大減小, 數(shù)據(jù)庫的響應(yīng)時(shí)間也得到了顯著的縮短。本實(shí)驗(yàn)證明了本文提出的基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架,大大減少了數(shù)據(jù)庫的讀寫負(fù)擔(dān),有效地提高了數(shù)據(jù)庫的實(shí)時(shí)響應(yīng)速度。
表2 數(shù)據(jù)庫事務(wù)平均響應(yīng)時(shí)間對比
本文針對在海量數(shù)據(jù)環(huán)境下傳統(tǒng)的基于中心數(shù)據(jù)庫的數(shù)據(jù)分析處理架構(gòu)所帶來的數(shù)據(jù)庫響應(yīng)速度慢、數(shù)據(jù)分析處理延時(shí)長、數(shù)據(jù)庫讀請求次數(shù)多的問題,提出了基于在線緩存的數(shù)據(jù)分析處理框架。實(shí)驗(yàn)結(jié)果表明,基于在線緩存的數(shù)據(jù)處理服務(wù)框架有效提高了數(shù)據(jù)庫的響應(yīng)速度,縮短數(shù)據(jù)處理周期,減少了對數(shù)據(jù)庫讀請求的次數(shù)。然而,隨著數(shù)據(jù)量的進(jìn)一步增長,基于單機(jī)內(nèi)存的在線緩存將無法容納所有的數(shù)據(jù)。我們的下一步工作將著眼于采用分布式的架構(gòu)來解決這一問題。
[1] 李盛韜,余智華,程學(xué)旗,白碩. Web信息采集研究進(jìn)展[J]. 計(jì)算機(jī)科學(xué),2003(02): 151-171.
[2] 郭巖,劉春陽,余智華,等. 網(wǎng)絡(luò)輿情信息源影響力的評估研究[J]. 中文信息學(xué)報(bào), 2011,25(3):64-71.
[3] 曹鵬,李靜遠(yuǎn),滿彤,等.Twitter中近似重復(fù)消息的判定方法研究[J].中文信息學(xué)報(bào),2011,25(1):20-27.
[4] 郭浩,陸余良.基于信息傳播的微博用戶影響力度量[C]//CCIR2011.
[5] Fitzpatrick B. Distributed caching with memcached[J]. Journal Linux, 2004,124:7559.
[6] Krakowiak, Sacha. “What’s middleware?”. ObjectWeb.org. Retrieved 2005-05-06.
[7] 徐晶,許煒. 消息中間件綜述[J]. 計(jì)算機(jī)工程, 2005, 33(16):73-76.
[8] 李文逍,楊小虎. 基于分布式緩存的消息中間件存儲模型[J]. 計(jì)算機(jī)工程,2010,36(13):93-95.
[9] Birman K, Joseph T. Exploiting virtual synchrony in distributed systems[C]//Proceeding of SOSP ’87 the eleventh ACM Symposium on Operating systems principles, 1987: 123-138.
[10] Hasan, Souleiman. Approximate Semantic Matching of Heterogeneous Events [C]//Proceeding of the 6th ACM International Conference on Distributed Event-Based Systems 2012, 252-263.
[11] Eugster P T, Felber P A, Guerraoui R. The Many Faces of Publish/Subscribe Proceeding of ACM Computing Surveys, 2003,35(2): 114.
[12] The Apache Software Foundation ActiveMQ[DB/OL] http://activemq.apache.org/, 2012.
[13] Snyder, Bruce, Bosanac, Dejan, et al. ActiveMQ in Action (1st ed.)[M], Manning Publications, 2010: 375.
[14] Iyengar A, Jessani V, Chilanti M. WebSphere Business Integration Primer: Process Server, BPEL, SCA, and SOA 1st[M], IBM Press , 2007.
[15] Kloppmann M. IBM Deutschland Entwicklung GmbH Business process choreography in WebSphere: Combining the power of BPEL and J2EE[J], IBM Systems Journal, 2004, 43(2): 270-296.
[16] B.Mann. Worldwide Product Manager Providing a Backbone for Connectivity with SOA Messaging[M], 2009.
[17] Kreps J, Narkhede N, Rao J. Kafka: a Distributed Messaging System for Log Processing[M], 2011.
[18] Videla A, Williams J J W. RabbitMQ in Action:Distributed messaging for everyone[M]. 2012.
[19] home page http://www.rabbitmq.com/[DB/OL], 2012.
[20] Seeger M. Key-Value Stores: a practical overview Computer Science and Media[A], Ultra-Large-Sites September 2009.
[21] Automatic Workload Repository (AWR) in Oracle Database[DB/OL], http://www.oracle-base.com/articles/10g/automatic-workload-repository-10g.php.
[22] Oracle Database Performance Method page[M/CD].
[23] http://docs.oracle.com/cd/B19306_01/server.102/b28051/tdppt_method.htm[DB/OL].