林祥輝,張 瑾,黃康平,許 磊,許洪波,程學(xué)旗,程 工
(1. 中國(guó)科學(xué)院計(jì)算技術(shù)研究所,北京 100190;2. 中國(guó)科學(xué)院大學(xué),北京 100190;3. 國(guó)家計(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)的主要處理流程是收集來(lái)自各個(gè)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行存儲(chǔ),然后對(duì)負(fù)責(zé)數(shù)據(jù)分析的應(yīng)用程序提供數(shù)據(jù)服務(wù),進(jìn)行數(shù)據(jù)分析處理。傳統(tǒng)的架構(gòu)是設(shè)立中心數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和服務(wù)。各種數(shù)據(jù)源將數(shù)據(jù)寫(xiě)入到中心數(shù)據(jù)庫(kù)中進(jìn)行統(tǒng)一存儲(chǔ);應(yīng)用分析程序從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),進(jìn)行分析和處理。但是在海量數(shù)據(jù)環(huán)境下,隨著數(shù)據(jù)來(lái)源種類的增加、來(lái)源數(shù)據(jù)量的增長(zhǎng)和應(yīng)用分析程序數(shù)目的增加,中心數(shù)據(jù)庫(kù)架構(gòu)的問(wèn)題日益突顯。中心數(shù)據(jù)庫(kù)架構(gòu)的缺點(diǎn)主要體現(xiàn)在三個(gè)方面: 1.對(duì)數(shù)據(jù)庫(kù)寫(xiě)入頻率的增加影響了數(shù)據(jù)庫(kù)的實(shí)時(shí)響應(yīng)性能;2.數(shù)據(jù)要經(jīng)過(guò)中心數(shù)據(jù)庫(kù)存儲(chǔ)后才能被應(yīng)用程序使用,這種串行的工作模式增加了數(shù)據(jù)處理延時(shí);3.隨應(yīng)用程序個(gè)數(shù)的增加,對(duì)數(shù)據(jù)庫(kù)的重復(fù)讀取次數(shù)呈線數(shù)增加,嚴(yán)重影響了數(shù)據(jù)庫(kù)的IO訪問(wèn)性能。本文針對(duì)在海量數(shù)據(jù)環(huán)境下的基于中心數(shù)據(jù)庫(kù)的架構(gòu)所帶來(lái)的問(wèn)題,提出了基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架,通過(guò)在數(shù)據(jù)庫(kù)之前增加了一個(gè)基于內(nèi)存的數(shù)據(jù)緩存層,改變了數(shù)據(jù)處理流程,實(shí)現(xiàn)了對(duì)于數(shù)據(jù)庫(kù)的讀寫(xiě)分離?;趦?nèi)存的在線數(shù)據(jù)處理服務(wù)框架的使用提高了整個(gè)系統(tǒng)的響應(yīng)速度,縮短了平均數(shù)據(jù)處理延時(shí),減少了應(yīng)用分析程序讀取數(shù)據(jù)庫(kù)的次數(shù)。
本文的組織結(jié)構(gòu)如下: 第2節(jié)介紹基于中心數(shù)據(jù)庫(kù)架構(gòu)和數(shù)據(jù)處理的相關(guān)工作以及現(xiàn)有解決方案存在的問(wèn)題;第3節(jié)提出了基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架并且介紹實(shí)現(xiàn)方法;第4節(jié)在實(shí)驗(yàn)中對(duì)比了基于中心式數(shù)據(jù)庫(kù)的處理框架和基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架的響應(yīng)速度和平均數(shù)據(jù)處理延時(shí);第5節(jié)對(duì)目前的工作成果進(jìn)行總結(jié)并展望下一步的研究?jī)?nèi)容。
在數(shù)據(jù)分析處理應(yīng)用中,基于中心數(shù)據(jù)庫(kù)的分析處理架構(gòu)被廣泛使用。如圖1所示,大規(guī)模數(shù)據(jù)分析處理系統(tǒng)通常采用中心數(shù)據(jù)庫(kù)的架構(gòu),中心數(shù)據(jù)庫(kù)主要提供了存儲(chǔ)服務(wù)和數(shù)據(jù)服務(wù)。來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)被寫(xiě)入到中心數(shù)據(jù)庫(kù)中進(jìn)行存儲(chǔ),應(yīng)用分析程序從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)進(jìn)行分析和處理。但是數(shù)據(jù)量的增長(zhǎng)給基于中心數(shù)據(jù)庫(kù)的處理架構(gòu)帶來(lái)了挑戰(zhàn)。
圖1 基于中心數(shù)據(jù)庫(kù)的分析處理架構(gòu)示意圖
傳統(tǒng)的數(shù)據(jù)來(lái)源包括了新聞、論壇和博客[1-2]三種主要的信息渠道。隨著互聯(lián)網(wǎng)應(yīng)用的普及,來(lái)自搜索引擎、微博平臺(tái)[3-4]和社交網(wǎng)站的數(shù)據(jù)成為了新的數(shù)據(jù)來(lái)源。各種產(chǎn)生速率和數(shù)據(jù)量都不相同的數(shù)據(jù)源同時(shí)對(duì)中心數(shù)據(jù)庫(kù)提交請(qǐng)求,會(huì)增加數(shù)據(jù)庫(kù)事務(wù)的復(fù)雜性,增加數(shù)據(jù)庫(kù)鎖的處理時(shí)間從而降低了數(shù)據(jù)庫(kù)的實(shí)時(shí)響應(yīng)時(shí)間。在基于中心數(shù)據(jù)的處理架構(gòu)中數(shù)據(jù)需要經(jīng)過(guò)中心數(shù)據(jù)庫(kù)后才能被應(yīng)用分析程序所使用,這種串行的處理模式增加了數(shù)據(jù)平均處理延時(shí)。應(yīng)用程序個(gè)數(shù)的增加使得讀取數(shù)據(jù)庫(kù)的次數(shù)增加,每一條數(shù)據(jù)記錄都會(huì)被所有的分析程序請(qǐng)求,對(duì)于數(shù)據(jù)庫(kù)的讀請(qǐng)求的次數(shù)將會(huì)隨著應(yīng)用分析程序數(shù)目的增長(zhǎng)呈線性增長(zhǎng)。多次的數(shù)據(jù)讀操作導(dǎo)致數(shù)據(jù)庫(kù)讀操作的效率下降,影響了數(shù)據(jù)庫(kù)的性能。Brad Fitzpatrick在2003年開(kāi)發(fā)了Memcached[5],通過(guò)在數(shù)據(jù)庫(kù)之前加入緩存,減輕了數(shù)據(jù)庫(kù)的讀取壓力,但是其無(wú)法有效降低對(duì)數(shù)據(jù)庫(kù)的寫(xiě)負(fù)載。
隨著數(shù)據(jù)來(lái)源、數(shù)據(jù)量和應(yīng)用程序的增加,傳統(tǒng)的基于中心數(shù)據(jù)庫(kù)架構(gòu)的數(shù)據(jù)處理分析系統(tǒng)的缺點(diǎn)日益凸顯,亟須提出一種新的數(shù)據(jù)處理架構(gòu)來(lái)使得以上問(wèn)題得到有效解決。
消息中間件[6-8]是一種由消息傳送機(jī)制或消息隊(duì)列模式組成的中間件技術(shù)。消息可以通過(guò)消息中間件被發(fā)送到各個(gè)應(yīng)用程序,通過(guò)使用消息中間件可以減少對(duì)數(shù)據(jù)庫(kù)的讀取。在大型的面向消息中間件系統(tǒng)中,發(fā)布/訂閱[9-11]模式是一個(gè)重要數(shù)據(jù)訪問(wèn)范式。該模型通過(guò)一個(gè)消息隊(duì)列和數(shù)據(jù)訪問(wèn)控制機(jī)制將應(yīng)用程序分為發(fā)布者和訂閱者,發(fā)布者負(fù)責(zé)將產(chǎn)生的消息放在消息隊(duì)列中,訂閱者可以從中獲取自己感興趣的數(shù)據(jù)。這種發(fā)布者和訂閱者的松散耦合可以允許更好的可擴(kuò)放性和數(shù)據(jù)訪問(wèn)的控制。
消息中間件已經(jīng)廣泛應(yīng)用在金融、郵電、交通等行業(yè)。面向企業(yè)級(jí)應(yīng)用的產(chǎn)品如Apache ActiveMQ[12-13],IBM Websphere MQ[14-16]都是針對(duì)這種企業(yè)級(jí)的應(yīng)用需求而產(chǎn)生。在企業(yè)級(jí)應(yīng)用的需求中消息傳遞的關(guān)注點(diǎn)是要保證消息能夠安全到達(dá)對(duì)方,但是這種解決方案增加了數(shù)據(jù)處理和傳輸?shù)难訒r(shí)。
越來(lái)越多的公司和研究機(jī)構(gòu)嘗試使用分布式消息處理系統(tǒng)來(lái)緩解中心數(shù)據(jù)庫(kù)架構(gòu)所帶來(lái)的問(wèn)題。LinkIn公司2010年提出的Kafka[17],VMWare公司支持的開(kāi)源項(xiàng)目RabbitMQ[18-19]等都是基于分布式架構(gòu)的消息處理系統(tǒng),能夠高效處理海量數(shù)據(jù)環(huán)境下的消息服務(wù)。然而這些系統(tǒng)都是基于主鍵的數(shù)據(jù)讀寫(xiě),不能支持按照某一個(gè)關(guān)鍵字段的查詢,無(wú)法完全取代關(guān)系型數(shù)據(jù)庫(kù)的查詢功能。
針對(duì)基于中心數(shù)據(jù)庫(kù)的數(shù)據(jù)處理分析架構(gòu)的不足,我們提出了一種基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架,其工作原理如圖2所示,我們?cè)谠械幕谥行臄?shù)據(jù)的數(shù)據(jù)處理分析處理系統(tǒng)的基礎(chǔ)上增加了一個(gè)內(nèi)存在線緩存層。來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)寫(xiě)入到基于內(nèi)存的數(shù)據(jù)緩存中。存在于緩存中的數(shù)據(jù)分成了兩個(gè)數(shù)據(jù)流向,一方面,寫(xiě)入到緩存中的數(shù)據(jù)可以對(duì)應(yīng)用程序提供在線的數(shù)據(jù)服務(wù);另外一方面,緩存中的數(shù)據(jù)會(huì)被寫(xiě)入到數(shù)據(jù)庫(kù)中進(jìn)行存儲(chǔ)。
圖2 基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架
內(nèi)存在線緩存層包括了多索引的數(shù)據(jù)存取模塊和數(shù)據(jù)訪問(wèn)控制模塊。多索引的數(shù)據(jù)存取模塊通過(guò)多索引緩存結(jié)構(gòu)和高效的并發(fā)控制實(shí)現(xiàn)了對(duì)于高并發(fā)的讀寫(xiě)請(qǐng)求的實(shí)時(shí)響應(yīng)。數(shù)據(jù)訪問(wèn)控制模塊對(duì)應(yīng)用分析程序的數(shù)據(jù)讀取進(jìn)行記錄和控制,有效地減少了數(shù)據(jù)庫(kù)的讀寫(xiě)次數(shù)。相比于基于中心數(shù)據(jù)庫(kù)的架構(gòu),增加了內(nèi)存在線緩存層之后數(shù)據(jù)庫(kù)只需要處理內(nèi)存在線緩存對(duì)于數(shù)據(jù)庫(kù)的寫(xiě)請(qǐng)求,而原來(lái)對(duì)于數(shù)據(jù)庫(kù)的讀請(qǐng)求則由內(nèi)存在線緩存提供的在線數(shù)據(jù)服務(wù)進(jìn)行處理。數(shù)據(jù)在進(jìn)入中心數(shù)據(jù)庫(kù)之前就可以由基于內(nèi)存的在線緩存對(duì)應(yīng)用分析程序提供數(shù)據(jù)服務(wù)。內(nèi)存在線緩存層的加入實(shí)現(xiàn)了對(duì)于數(shù)據(jù)庫(kù)的讀寫(xiě)分離,有效地減少了數(shù)據(jù)庫(kù)讀寫(xiě)負(fù)載。
基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架為了高效地處理對(duì)于內(nèi)存在線緩存的讀寫(xiě)請(qǐng)求,我們?cè)O(shè)計(jì)了一種多索引的高效數(shù)據(jù)存取模塊。如圖3所示,多索引的高效數(shù)據(jù)存取模塊采用Key-Value[20]數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),同時(shí)借鑒了關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)思路,根據(jù)業(yè)務(wù)需求,在多個(gè)字段建立索引,以提高插入和查詢的效率。多索引數(shù)據(jù)存取模塊在平均情況下以O(shè)(1)的時(shí)間進(jìn)行去重操作,在最壞情況下以O(shè)(logn)的時(shí)間進(jìn)行插入和查詢操作。
首先,我們將來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)按照Key-Value的方式進(jìn)行存儲(chǔ),Key由一個(gè)全局唯一的64位的整型數(shù)字表示,Value包括了數(shù)據(jù)的一些原始屬性,包括發(fā)布時(shí)間、采集時(shí)間、原文內(nèi)容等字段。在內(nèi)存在線緩存中,我們規(guī)定所有數(shù)據(jù)的Key值是全局唯一的,如果有重復(fù)Key值要進(jìn)行寫(xiě)操作時(shí),內(nèi)存在線緩存應(yīng)該阻止重復(fù)數(shù)據(jù)寫(xiě)入內(nèi)存緩存中。不同的應(yīng)用分析程序會(huì)按照時(shí)間段在內(nèi)存在線緩存中進(jìn)行查詢,例如一個(gè)應(yīng)用分析程序會(huì)請(qǐng)求從 “19:00” 到“20:00”之間的數(shù)據(jù)。內(nèi)存緩存需要高效地處理應(yīng)用分析程序的讀請(qǐng)求為其提供數(shù)據(jù)服務(wù)。
其次,為了滿足高效的讀寫(xiě)需求,我們針對(duì)不同的讀寫(xiě)需求通過(guò)建立不同類型的索引結(jié)構(gòu)來(lái)提高內(nèi)存緩存的讀寫(xiě)性能。針對(duì)數(shù)據(jù)Key值唯一性的要求, 我們對(duì)每一條記錄的Key值建立散列索引來(lái)判斷寫(xiě)入的數(shù)據(jù)是否已經(jīng)存在。對(duì)Key值建立了散列索引后,只需要花費(fèi)O(1)的時(shí)間代價(jià)就可以判斷待寫(xiě)入的數(shù)據(jù)是否重復(fù)。對(duì)于按照字段進(jìn)行區(qū)間查詢的需求,我們對(duì)查詢字段建立B+樹(shù)索引。應(yīng)用分析程序可以在內(nèi)存在線緩存中以O(shè)(logn)的時(shí)間代價(jià)按字段進(jìn)行區(qū)間查詢。
圖3 基于多索引的數(shù)據(jù)存取結(jié)構(gòu)
數(shù)據(jù)訪問(wèn)控制模塊的任務(wù)是防止同一條數(shù)據(jù)被同一程序反復(fù)讀取?;趦?nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架對(duì)應(yīng)用分析程序提供了數(shù)據(jù)服務(wù),將原來(lái)對(duì)于數(shù)據(jù)庫(kù)的多次讀數(shù)據(jù)請(qǐng)求轉(zhuǎn)移到了內(nèi)存在線緩存層中。雖然基于內(nèi)存和網(wǎng)絡(luò)的數(shù)據(jù)服務(wù)的讀寫(xiě)開(kāi)銷要小于數(shù)據(jù)庫(kù)的讀寫(xiě),但是對(duì)于同一條數(shù)據(jù)記錄的多次讀取仍會(huì)造成網(wǎng)絡(luò)負(fù)擔(dān)。所以,我們?cè)跀?shù)據(jù)訪問(wèn)控制模塊中采用了發(fā)布/訂閱者模型來(lái)進(jìn)行數(shù)據(jù)訪問(wèn)控制,讓一條數(shù)據(jù)記錄以最少的次數(shù)被分析應(yīng)用程序所使用。在我們的應(yīng)用中各種不同的數(shù)據(jù)源是發(fā)布者,往在線緩存中發(fā)布數(shù)據(jù);應(yīng)用分析程序是訂閱者,對(duì)自己需要的數(shù)據(jù)進(jìn)行讀取。通過(guò)發(fā)布/訂閱模型控制一個(gè)應(yīng)用分析程序只能對(duì)同一條數(shù)據(jù)讀取一次, 這樣就避免了數(shù)據(jù)重復(fù)傳輸。訪問(wèn)控制模塊由訂閱注冊(cè)器和匹配器組成,下面將介紹訂閱注冊(cè)器和匹配器的工作流程。
首先,應(yīng)用分析程序需要在在線緩存的注冊(cè)模塊進(jìn)行注冊(cè)申請(qǐng),然后可以根據(jù)注冊(cè)所得到的訪問(wèn)標(biāo)識(shí)來(lái)對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。圖4中Register算法描述了分析程序在獲取數(shù)據(jù)之前需要進(jìn)行的注冊(cè)流程。我們?cè)O(shè)定注冊(cè)訂閱的程序的最大數(shù)目為32,用一個(gè)32位整數(shù)的每個(gè)比特位來(lái)標(biāo)識(shí)一個(gè)具體的分析程序。對(duì)于每一個(gè)申請(qǐng)注冊(cè)訂閱的分析程序,根據(jù)其名字在一個(gè)保存著應(yīng)用程序名字和數(shù)據(jù)獲取標(biāo)識(shí)的映射結(jié)構(gòu)。當(dāng)一個(gè)分析程序開(kāi)始注冊(cè)時(shí),將在這個(gè)映射結(jié)構(gòu)中進(jìn)行查詢,如果分析已經(jīng)注冊(cè)成功,那么就將其之前注冊(cè)的數(shù)據(jù)獲取標(biāo)識(shí)返回給分析程序;如果一個(gè)分析程序是第一次進(jìn)行注冊(cè),那么就把當(dāng)前最大位的左一位標(biāo)示的數(shù)字作為這個(gè)新注冊(cè)的分析程序的數(shù)據(jù)獲取標(biāo)識(shí);如果目前已注冊(cè)的用戶達(dá)到了最大限度,那么算法將返回-1,表示分析程序注冊(cè)失敗。
圖4 Register算法
然后,在應(yīng)用分析程序注冊(cè)成功后通過(guò)匹配器對(duì)所需要的數(shù)據(jù)進(jìn)行讀取。分析程序使用自己的appName來(lái)進(jìn)行數(shù)據(jù)獲取請(qǐng)求,圖5-a中描述了應(yīng)用分析程序取數(shù)據(jù)庫(kù)的邏輯。首先根據(jù)分析程序的名字在名字—標(biāo)識(shí)映射結(jié)構(gòu)中取得appName所對(duì)應(yīng)的數(shù)據(jù)獲取標(biāo)識(shí),然后針對(duì)目標(biāo)數(shù)據(jù)計(jì)算其數(shù)據(jù)訪問(wèn)標(biāo)志位,如果此數(shù)據(jù)未被當(dāng)前分析程序所訪問(wèn)過(guò),則將這條數(shù)據(jù)返回給當(dāng)前的分析程序;如果此數(shù)據(jù)已經(jīng)被當(dāng)前分析程序使用過(guò),那么算法則不會(huì)返回這條數(shù)據(jù)。
一個(gè)具體的數(shù)據(jù)訪問(wèn)流程的例子如圖5-b所示。已知一條數(shù)據(jù)當(dāng)前的訪問(wèn)標(biāo)識(shí)位為0000000000001000(十進(jìn)制標(biāo)示為8)。首先分析程序appName4,試圖請(qǐng)求獲取這條數(shù)據(jù),AccessData算法從之前的映射結(jié)構(gòu)中查詢得知appName4是已經(jīng)成功注冊(cè)的分析程序,其數(shù)據(jù)訪問(wèn)標(biāo)識(shí)為8,然后將8和此數(shù)據(jù)的訪問(wèn)控制位進(jìn)行按位與(&)運(yùn)算,在運(yùn)算結(jié)果中檢查appName4的數(shù)據(jù)訪問(wèn)標(biāo)識(shí)所代表的位置(此處為第4位)的值,如果該值為1,說(shuō)明appName4程序在之前已經(jīng)使用過(guò)這條數(shù)據(jù), 因此appName4就不能取得這條數(shù)據(jù)。然后分析程序appName5請(qǐng)求這條數(shù)據(jù),與之前的流程一樣,使用appName5的訪問(wèn)控制標(biāo)識(shí)對(duì)數(shù)據(jù)的訪問(wèn)控制位進(jìn)行按位與運(yùn)算之后,檢查appName5所對(duì)應(yīng)的位置的值為0,說(shuō)明appName5在之前尚未訪問(wèn)過(guò)這條數(shù)據(jù),所以算法會(huì)將此數(shù)據(jù)返回給appName5,同時(shí)會(huì)將這條數(shù)據(jù)的記錄訪問(wèn)控制位置為1,以防止appName5在下一次重復(fù)訪問(wèn)到這條記錄。
圖5?a AccessData算法圖5?b AccessData流程示意圖
為了驗(yàn)證我們所提出的基于內(nèi)存的高效在線數(shù)據(jù)處理服務(wù)框架,通過(guò)內(nèi)存在線緩存提供的在線數(shù)據(jù)服務(wù),可以縮短數(shù)據(jù)平均處理延時(shí);通過(guò)內(nèi)存在線緩存對(duì)外提供讀寫(xiě)服務(wù),可以減少數(shù)據(jù)庫(kù)的讀寫(xiě),同時(shí)縮短數(shù)據(jù)庫(kù)的平均響應(yīng)時(shí)間。我們分別采用基于中心數(shù)據(jù)庫(kù)(Oracle數(shù)據(jù)庫(kù))的架構(gòu)和基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架進(jìn)行系統(tǒng)性能對(duì)比。實(shí)驗(yàn)部分分別對(duì)兩種架構(gòu)下的平均處理延時(shí)進(jìn)行統(tǒng)計(jì)和分析,并分析在兩種架構(gòu)下的數(shù)據(jù)庫(kù)的平均響應(yīng)時(shí)間的變化情況。
實(shí)驗(yàn)在數(shù)據(jù)規(guī)模相當(dāng)(1億條數(shù)據(jù))的兩套線上系統(tǒng)進(jìn)行,兩個(gè)系統(tǒng)分別采用了基于中心數(shù)據(jù)庫(kù)的架構(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í)對(duì)比圖
從圖6中可以看出,基于中心數(shù)據(jù)庫(kù)架構(gòu)的數(shù)據(jù)延時(shí)曲線整體高于基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架的數(shù)據(jù)處理延時(shí)曲線,這說(shuō)明數(shù)據(jù)通過(guò)在線緩存進(jìn)行轉(zhuǎn)發(fā)能夠有效的提高數(shù)據(jù)處理的時(shí)效性。從表1中可以看出,在基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架下,數(shù)據(jù)的平均處理延時(shí)為32秒,而基于中心數(shù)據(jù)庫(kù)架構(gòu)的數(shù)據(jù)平均處理延時(shí)為則是82秒,在線緩存框架使平均數(shù)據(jù)處理時(shí)間縮短了61%。
表1 數(shù)據(jù)處理延時(shí)對(duì)比表
值得注意的是,兩種架構(gòu)中數(shù)據(jù)的處理延時(shí)曲線都呈現(xiàn)出了一種周期性的規(guī)律,但是由于內(nèi)存在線緩存處理和轉(zhuǎn)發(fā)數(shù)據(jù)的速率要明顯快于數(shù)據(jù)庫(kù),所以可以看出基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架的曲線的周期要明顯小于由基于中心數(shù)據(jù)庫(kù)的數(shù)據(jù)處理延時(shí)曲線。一個(gè)有意思的現(xiàn)象是圖中第10批數(shù)據(jù)通過(guò)在線緩存轉(zhuǎn)發(fā)的處理延時(shí)為42s,而通過(guò)數(shù)據(jù)庫(kù)分發(fā)的處理延時(shí)僅僅是16s。出現(xiàn)這種情況的原因是數(shù)據(jù)到達(dá)的時(shí)間周期正好與分析程序請(qǐng)求數(shù)據(jù)庫(kù)的周期開(kāi)始處相吻合,數(shù)據(jù)剛剛寫(xiě)入到數(shù)據(jù)庫(kù)中,很快就被分析程序所請(qǐng)求。但是從整體趨勢(shì)上分析,數(shù)據(jù)通過(guò)數(shù)據(jù)庫(kù)轉(zhuǎn)發(fā)的平均處理延時(shí)明顯大于通過(guò)內(nèi)存在線緩存進(jìn)行轉(zhuǎn)發(fā)的平均處理延時(shí)。本文所提出的基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架有效地提高數(shù)據(jù)分析處理的時(shí)效性。
本實(shí)驗(yàn)中,我們分別對(duì)兩個(gè)系統(tǒng)的Oracle數(shù)據(jù)庫(kù)生成自動(dòng)工作負(fù)載報(bào)告[18](Automatic Workload Repository,以下簡(jiǎn)稱AWR報(bào)告),通過(guò)AWR報(bào)告計(jì)算兩種架構(gòu)下數(shù)據(jù)庫(kù)的平均事務(wù)響應(yīng)時(shí)間。
AWR是從Oracle10g開(kāi)始提出的一種記錄數(shù)據(jù)庫(kù)工作負(fù)載的報(bào)告。AWR永久地保存系統(tǒng)的性能診斷信息給DBA們提供了更加有效的系統(tǒng)監(jiān)測(cè)工具。在工業(yè)界中AWR報(bào)告被廣泛地應(yīng)用在數(shù)據(jù)庫(kù)性能分析上。
Oracle在10g版本明確引入time model[19],選取了事務(wù)平均響應(yīng)時(shí)間來(lái)衡量數(shù)據(jù)庫(kù)對(duì)事務(wù)處理的響應(yīng)速度。基于事務(wù)的平均響應(yīng)時(shí)間,可以看作性能優(yōu)化效果的一個(gè)交付和對(duì)比。事務(wù)平均響應(yīng)時(shí)間的計(jì)算方法如式(1)所示
avg trans respone time(s)=
(1)
表2是兩個(gè)對(duì)比實(shí)驗(yàn)數(shù)據(jù)庫(kù)在一個(gè)小時(shí)內(nèi)的AWR報(bào)告的片段。從中可以看出在基于中心數(shù)據(jù)庫(kù)架構(gòu)的環(huán)境下,數(shù)據(jù)庫(kù)的文件順序讀次數(shù)為10 671次,數(shù)據(jù)庫(kù)平均事務(wù)響應(yīng)時(shí)間為7.09s。在使用了基于在線緩存的架構(gòu)之后,由于應(yīng)用程序不再?gòu)臄?shù)據(jù)庫(kù)中讀取數(shù)據(jù),所以數(shù)據(jù)庫(kù)文件順序讀取次數(shù)下降為385同時(shí)平均事務(wù)響應(yīng)時(shí)間下降為2.88s。在使用了在線緩存的結(jié)構(gòu)之后,數(shù)據(jù)庫(kù)的負(fù)載大大減小, 數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間也得到了顯著的縮短。本實(shí)驗(yàn)證明了本文提出的基于內(nèi)存的在線數(shù)據(jù)處理服務(wù)框架,大大減少了數(shù)據(jù)庫(kù)的讀寫(xiě)負(fù)擔(dān),有效地提高了數(shù)據(jù)庫(kù)的實(shí)時(shí)響應(yīng)速度。
表2 數(shù)據(jù)庫(kù)事務(wù)平均響應(yīng)時(shí)間對(duì)比
本文針對(duì)在海量數(shù)據(jù)環(huán)境下傳統(tǒng)的基于中心數(shù)據(jù)庫(kù)的數(shù)據(jù)分析處理架構(gòu)所帶來(lái)的數(shù)據(jù)庫(kù)響應(yīng)速度慢、數(shù)據(jù)分析處理延時(shí)長(zhǎng)、數(shù)據(jù)庫(kù)讀請(qǐng)求次數(shù)多的問(wèn)題,提出了基于在線緩存的數(shù)據(jù)分析處理框架。實(shí)驗(yàn)結(jié)果表明,基于在線緩存的數(shù)據(jù)處理服務(wù)框架有效提高了數(shù)據(jù)庫(kù)的響應(yīng)速度,縮短數(shù)據(jù)處理周期,減少了對(duì)數(shù)據(jù)庫(kù)讀請(qǐng)求的次數(shù)。然而,隨著數(shù)據(jù)量的進(jìn)一步增長(zhǎng),基于單機(jī)內(nèi)存的在線緩存將無(wú)法容納所有的數(shù)據(jù)。我們的下一步工作將著眼于采用分布式的架構(gòu)來(lái)解決這一問(wèn)題。
[1] 李盛韜,余智華,程學(xué)旗,白碩. Web信息采集研究進(jìn)展[J]. 計(jì)算機(jī)科學(xué),2003(02): 151-171.
[2] 郭巖,劉春陽(yáng),余智華,等. 網(wǎng)絡(luò)輿情信息源影響力的評(píng)估研究[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] 李文逍,楊小虎. 基于分布式緩存的消息中間件存儲(chǔ)模型[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].