本發(fā)明涉及日志數(shù)據(jù)流的查詢和存儲(chǔ)領(lǐng)域,特別涉及一種基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法和系統(tǒng)。
背景技術(shù):
隨著云計(jì)算和大數(shù)據(jù)技術(shù)的不斷發(fā)展和廣泛應(yīng)用,集群中的日志數(shù)據(jù)越來越被重視。而集群中的這種簡(jiǎn)單的日志數(shù)據(jù)一方面同傳統(tǒng)的日志數(shù)據(jù)相同,在系統(tǒng)的運(yùn)行過程中也需要做相應(yīng)的存儲(chǔ),以便于系統(tǒng)異常的運(yùn)維和恢復(fù),另一方面,集群中的日志數(shù)據(jù)在產(chǎn)生方式上又不同于傳統(tǒng)的日志形式,是以一種數(shù)據(jù)流的方式在系統(tǒng)中產(chǎn)生。
日志數(shù)據(jù)流(以下簡(jiǎn)稱日志流)的處理不同于傳統(tǒng)數(shù)據(jù)流,在處理傳統(tǒng)數(shù)據(jù)流時(shí),有限的存儲(chǔ)空間內(nèi)無法存儲(chǔ)無限日志流的全部數(shù)據(jù),因此數(shù)據(jù)流上的查詢多數(shù)在處理后丟棄,數(shù)據(jù)流上的查詢多數(shù)得到近似的查詢結(jié)果,也不同于傳統(tǒng)數(shù)據(jù)庫的查詢,這種查詢能夠得到精確的查詢結(jié)果。日志流具有以下特點(diǎn):日志流是連續(xù)不斷的按時(shí)間順序?qū)崟r(shí)產(chǎn)生的,系統(tǒng)無法控制集群中日志流元素的到達(dá)順序;從系統(tǒng)中整個(gè)日志產(chǎn)生過程來看,日志流中的數(shù)據(jù)是無界的,在日志流上做查詢得到的結(jié)果也是數(shù)據(jù)流;日志流查詢的結(jié)果是精確的查詢結(jié)果,系統(tǒng)要能保存日志流全部數(shù)據(jù)的一個(gè)有限子集或統(tǒng)計(jì)數(shù)據(jù),并隨著日志流上新數(shù)據(jù)的到來不斷更新,更新的頻率取決于集群中日志數(shù)據(jù)產(chǎn)生的速度,因此在應(yīng)用上有很高的實(shí)時(shí)性要求。
對(duì)于日志數(shù)據(jù)的查詢,通常采用以下技術(shù):當(dāng)數(shù)據(jù)規(guī)模較小時(shí),直接采用linux的工具進(jìn)行人工查看和手工處理,效率低下;當(dāng)數(shù)據(jù)規(guī)模較大時(shí),引入數(shù)據(jù)庫,隨著數(shù)據(jù)量的不斷增大,單機(jī)處理無法滿足流式日志數(shù)據(jù)的處理;對(duì)于海量日志查詢,使用分布式文件系統(tǒng)存儲(chǔ)海量日志文件信息,利用分布式計(jì)算對(duì)日志數(shù)據(jù)進(jìn)行處理。
上面的查詢方法極少滿足云計(jì)算和大數(shù)據(jù)的分布式集群結(jié)構(gòu)中的實(shí)時(shí)處理,專利201310541236.1提出了在多個(gè)計(jì)算節(jié)點(diǎn)之間的存儲(chǔ)資源共享,該方法提出了一種緩解服務(wù)端數(shù)據(jù)庫訪問壓力的方法和裝置,該方法包括:查詢服務(wù)端數(shù)據(jù)庫中的應(yīng)用的版本信息并復(fù)制到共享內(nèi)存中;接收來自客戶端的包含應(yīng)用名稱和應(yīng)用的版本信息的應(yīng)用更新查詢請(qǐng)求;查詢共享內(nèi)存,判斷共享內(nèi)存中是否有對(duì)應(yīng)的應(yīng)用的記錄,有則通過對(duì)比應(yīng)用的版本信息確定應(yīng)用更新查詢請(qǐng)求所對(duì)應(yīng)的應(yīng)用是否需要更新,過濾掉不需要更新的應(yīng)用;向服務(wù)端數(shù)據(jù)庫查詢需要更新的應(yīng)用的更新相關(guān)信息,并返回給客戶端。該發(fā)明的技術(shù)方案,由于在服務(wù)端數(shù)據(jù)庫的前端設(shè)置了共享內(nèi)存,利用共享內(nèi)存的作用過濾掉其實(shí)不需要更新的應(yīng)用的查詢請(qǐng)求,從而實(shí)際查詢服務(wù)端數(shù)據(jù)庫的請(qǐng)求數(shù)量都是有效的請(qǐng)求,這大大減小了服務(wù)端數(shù)據(jù)庫的訪問壓力,但這一過程中涉及到大量的數(shù)據(jù)復(fù)制或遷移,數(shù)據(jù)的一致性和實(shí)效性很難權(quán)衡,并且如果因?yàn)闃I(yè)務(wù)請(qǐng)求數(shù)據(jù)的不同,需要大量數(shù)據(jù)的換入換出共享內(nèi)存,無疑增加系統(tǒng)的壓力。
專利201480075283.4提出了在多個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行相應(yīng)的存儲(chǔ)共享代理,所述存儲(chǔ)共享代理在通信網(wǎng)絡(luò)上相互通信;在給定的計(jì)算節(jié)點(diǎn)上運(yùn)行一個(gè)或多個(gè)訪問存儲(chǔ)頁面的本地虛擬機(jī)(vm);以及使用所述存儲(chǔ)共享代理,將由所述本地vm訪問的存儲(chǔ)頁面儲(chǔ)存在所述計(jì)算節(jié)點(diǎn)中的至少兩個(gè)計(jì)算節(jié)點(diǎn)上,并將所儲(chǔ)存的存儲(chǔ)頁面供應(yīng)給所述本地vm。該發(fā)明的技術(shù)方案,僅將數(shù)據(jù)的存儲(chǔ)和訪問做了分級(jí),增加了系統(tǒng)的可靠性,但是對(duì)于在處理流式數(shù)據(jù)和查詢共享上以及在數(shù)據(jù)處理的實(shí)效性上沒有任何優(yōu)勢(shì)。
cql語言是目前關(guān)系型數(shù)據(jù)流管理系統(tǒng)中主要的查詢語言,它是從數(shù)據(jù)庫的sql語言演化而來的。對(duì)涉及到連接和聚集等操作的數(shù)據(jù)流來說,它們需要兩個(gè)數(shù)據(jù)流中的元組全部到來后再進(jìn)行查詢,這些操作在數(shù)據(jù)流系統(tǒng)中稱為阻塞操作。阻塞操作需要掃描數(shù)據(jù)流上的全部數(shù)據(jù),而數(shù)據(jù)流元組是源源不斷進(jìn)入到系統(tǒng)中來的,是無限的,阻塞操作永遠(yuǎn)得不到輸出結(jié)果。顯然,阻塞操作不適用于數(shù)據(jù)流的查詢處理。
相對(duì)于龐大的源源不斷的日志流中的數(shù)據(jù)元組,計(jì)算機(jī)的處理資源(例如cpu計(jì)算資源、內(nèi)存資源等)顯得十分有限,如何合理有效地利用有限的系統(tǒng)資源來處理無限的日志流,并得到盡可能準(zhǔn)確的結(jié)果,是提高日志流查詢處理效率的主要問題之一。
查詢優(yōu)化技術(shù)是解決這一問題的重要途徑之一,可通過合理查詢調(diào)度,實(shí)現(xiàn)查詢共享、存儲(chǔ)復(fù)用等方式加以實(shí)現(xiàn),主要是通過對(duì)查詢過程中的重復(fù)性操作和存儲(chǔ)空間進(jìn)行適當(dāng)優(yōu)化,在保證數(shù)據(jù)處理質(zhì)量的前提下,提高系統(tǒng)的處理效率,降低系統(tǒng)的處理成本。本發(fā)明針對(duì)目前日志數(shù)據(jù)的查詢特點(diǎn)主要從以下兩方面展開:
1、子查詢共享,在多查詢共存的系統(tǒng)中,將不同查詢中的相同子查詢進(jìn)行數(shù)據(jù)共享和操作符共享,以減少處理器的計(jì)算時(shí)間。
2、日志流的查詢分級(jí)存儲(chǔ)復(fù)用(共享),即在進(jìn)行數(shù)據(jù)流查詢過程中,對(duì)相同的中間查詢結(jié)果進(jìn)行存儲(chǔ)共享,以減少存儲(chǔ)空間的占用。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明在現(xiàn)有分布式系統(tǒng)集群之上,提供了針對(duì)日志流的查詢共享和存儲(chǔ)復(fù)用的方法,用于緩存和預(yù)取集群系統(tǒng)中的日志數(shù)據(jù)及其中間結(jié)果,目標(biāo)是能夠加快日志系統(tǒng)中歷史日志數(shù)據(jù)和實(shí)時(shí)日志數(shù)據(jù)的處理速度。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法,其中包括:
步驟1、將包含多個(gè)查詢語句的查詢操作注冊(cè)到系統(tǒng),通過設(shè)定滑動(dòng)窗口對(duì)日志數(shù)據(jù)流中的元組進(jìn)行截取;
步驟2、對(duì)多個(gè)該查詢語句進(jìn)行預(yù)處理,提取其中具有相同子查詢的查詢語句,并將其所查詢結(jié)果作為中間結(jié)果加以存儲(chǔ),該中間結(jié)果用以在多個(gè)查詢操作間進(jìn)行共享;
步驟3、從步驟1所截取的元組中提取具有相同中間存儲(chǔ)結(jié)構(gòu)的元組,并將其采用共享隊(duì)列的方式加以存儲(chǔ)以在多個(gè)查詢操作間進(jìn)行共享。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法,其中步驟3中該共享隊(duì)列具有二級(jí)索引,包括:主隊(duì)列,用作接收、存儲(chǔ)和傳遞該相同元組;從隊(duì)列,用于存儲(chǔ)和發(fā)送該相同元組在日志數(shù)據(jù)流中的索引至該主隊(duì)列;其中主隊(duì)列和從隊(duì)列間的通信采用異步模式。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法,其中步驟2中該相同子查詢,包括查詢語句間操作符相同及其關(guān)聯(lián)的操作數(shù)也相同。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法,其中該步驟1中采用對(duì)日志數(shù)據(jù)流概要數(shù)據(jù)結(jié)構(gòu)進(jìn)行查詢或?qū)o限的日志數(shù)據(jù)流進(jìn)行抽樣的方法對(duì)日志數(shù)據(jù)流中元組進(jìn)行截取。
基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享方法,其中步驟2中該預(yù)處理包括:根據(jù)數(shù)據(jù)庫引擎里的詞法分析語法分析模塊對(duì)該查詢語句進(jìn)行轉(zhuǎn)換,將復(fù)雜查詢語句轉(zhuǎn)換為簡(jiǎn)單查詢語句;調(diào)整該查詢語句中查詢操作符的順序,將查詢轉(zhuǎn)換成內(nèi)部表示。
本發(fā)明還提供一種基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中包括:
截取模塊,用于將包含多個(gè)查詢語句的查詢操作注冊(cè)到系統(tǒng),通過設(shè)定滑動(dòng)窗口對(duì)日志數(shù)據(jù)流中的元組進(jìn)行截??;
查詢結(jié)果共享模塊,用于對(duì)多個(gè)該查詢語句進(jìn)行預(yù)處理,提取其中具有相同子查詢的查詢語句,并將其所查詢結(jié)果作為中間結(jié)果加以存儲(chǔ),該中間結(jié)果用以在多個(gè)查詢操作間進(jìn)行共享;
元組共享模塊,用于從截取模塊所截取的元組中提取出具有相同中間存儲(chǔ)結(jié)構(gòu)的元組,并將其采用共享隊(duì)列的方式加以存儲(chǔ)以在多個(gè)查詢操作間進(jìn)行共享。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中元組共享模塊中該共享隊(duì)列具有二級(jí)索引,包括:主隊(duì)列,用作接收、存儲(chǔ)和傳遞該相同元組;從隊(duì)列,用于存儲(chǔ)和發(fā)送該相同元組在日志數(shù)據(jù)流中的索引至該主隊(duì)列;其中主隊(duì)列和從隊(duì)列間的通信采用異步模式。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中查詢結(jié)果共享模塊中該相同子查詢,包括查詢語句間操作符相同及其關(guān)聯(lián)的操作數(shù)也相同。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中該截取模塊中采用對(duì)日志數(shù)據(jù)流概要數(shù)據(jù)結(jié)構(gòu)進(jìn)行查詢或?qū)o限的日志數(shù)據(jù)流進(jìn)行抽樣的方法對(duì)日志數(shù)據(jù)流中元組進(jìn)行截取。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中查詢結(jié)果共享模塊中該預(yù)處理包括:根據(jù)數(shù)據(jù)庫引擎里的詞法分析語法分析模塊對(duì)該查詢語句進(jìn)行轉(zhuǎn)換,將復(fù)雜查詢語句轉(zhuǎn)換為簡(jiǎn)單查詢語句;調(diào)整該查詢語句中查詢操作符的順序,將查詢轉(zhuǎn)換成內(nèi)部表示。
總的來講,本發(fā)明針對(duì)日志流查詢存儲(chǔ)共享,設(shè)計(jì)了一種基于共享隊(duì)列的二級(jí)索引作為日志流中間結(jié)果的存儲(chǔ)結(jié)構(gòu),并相應(yīng)地提出了一種日志流存儲(chǔ)共享的遷移算法,保證對(duì)日志流元組的數(shù)據(jù)進(jìn)行有效存儲(chǔ)、快速索引的前提下,也為數(shù)據(jù)共享情況下的遷移提供了一定的靈活性;針對(duì)子查詢共享,通過向日志流的相同謂詞查詢的抽取和共享操作,達(dá)到計(jì)算資源共享的目的。
附圖說明
圖1是本發(fā)明數(shù)據(jù)共享示例示意圖;
圖2是本發(fā)明直接操作符共享示意圖;
圖3是本發(fā)明間接操作符共享示意圖;
圖4是本發(fā)明數(shù)據(jù)存儲(chǔ)共享模型示意圖;
圖5是本發(fā)明中間數(shù)據(jù)遷移算法的思想示意圖;
圖6是本發(fā)明各部分邏輯關(guān)系圖。
具體實(shí)施方式
為讓本發(fā)明的上述特征和效果能闡述的更明確易懂,下文列舉實(shí)施示例,并配合說明書附圖作詳細(xì)說明如下。
日志流查詢預(yù)處理對(duì)象是以查詢操作符(謂詞)為基本單位的。進(jìn)入系統(tǒng)的日志流中的每個(gè)元組必須經(jīng)過所有的查詢操作符后,方能輸出查詢結(jié)果。因此,每個(gè)元組在等待相應(yīng)查詢操作符處理時(shí),會(huì)被存儲(chǔ)在相應(yīng)的查詢操作符隊(duì)列中。在有些情況下,這些隊(duì)列中的元組數(shù)是大致相同的。例如,投影操作符僅是將元組的相應(yīng)屬性組成新的元組輸出到下一個(gè)查詢操作符的等待隊(duì)列中,元組的個(gè)數(shù)并沒有改變。而在通常的數(shù)據(jù)流查詢處理過程中,這些構(gòu)成相同的中間處理結(jié)果將會(huì)被分別存儲(chǔ)并處理,浪費(fèi)了系統(tǒng)的存儲(chǔ)空間,而在本發(fā)明中,中間處理結(jié)果會(huì)暫存到操作符隊(duì)列,在實(shí)現(xiàn)過程中該隊(duì)列存放的是數(shù)據(jù)的索引,因?yàn)榇娣旁紨?shù)據(jù)的存儲(chǔ)開銷太大;查詢處理模塊會(huì)將相關(guān)的日志流數(shù)據(jù)都的索引儲(chǔ)存到內(nèi)存中,但是不同的請(qǐng)求會(huì)使用到這些數(shù)據(jù)不同的部分,如投影不同的屬性值。同時(shí),在存在多個(gè)查詢語句的數(shù)據(jù)流管理系統(tǒng)中,會(huì)存在對(duì)于相同的數(shù)據(jù)流中間存儲(chǔ)結(jié)果進(jìn)行處理的多個(gè)操作符,而這些操作符多半是選擇或投影操作符,因此其查詢處理過程與結(jié)果也有很大的相同之處,如果能將這些相同的結(jié)果采用共享的方式進(jìn)行存儲(chǔ),不僅能夠節(jié)省系統(tǒng)的存儲(chǔ)空間,而且能夠提高系統(tǒng)的處理效率,其中該共享指將查詢熱度高的數(shù)據(jù)流中間結(jié)果在不同的查詢請(qǐng)求間進(jìn)行共享,這里的請(qǐng)求可能是復(fù)雜查詢,也可能是復(fù)雜查詢的子查詢,如查詢處理程序?qū)⑷罩玖骶彺嬗成涞絻?nèi)存,不同的請(qǐng)求查詢的數(shù)據(jù)不盡相同,有些用這些日志數(shù)據(jù)來做投影運(yùn)算,而有些用來做連接運(yùn)算。因此,查詢共享研究的目標(biāo)即為,將日志流查詢處理中的數(shù)據(jù)根據(jù)查詢熱度對(duì)相同或相同部分進(jìn)行分級(jí)處理,然后進(jìn)行查詢共享及存儲(chǔ)共享,以達(dá)到一次處理、多處獲益的效果。本發(fā)明采用的步驟和每一步的技術(shù)方案如下:
a.日志流查詢共享,其實(shí)現(xiàn)方法為:
a1.數(shù)據(jù)查詢共享方法(數(shù)據(jù)共享)
a1-1數(shù)據(jù)流查詢處理是以查詢操作符為基本單元的,查詢操作符就是查詢謂詞,比如select、join、group、sequence(順序操作)等,有查詢操作符和數(shù)據(jù)對(duì)象(集合、表、視圖)構(gòu)成了查詢語句,查詢語句可以在邏輯上表示成樹的結(jié)構(gòu),葉子節(jié)點(diǎn)是數(shù)據(jù)對(duì)象,非葉子節(jié)點(diǎn)是查詢操作符。
每個(gè)元組在經(jīng)過所有的查詢操作符后,才能輸出查詢結(jié)果。因此,每個(gè)元組在等待相應(yīng)查詢操作符處理時(shí),會(huì)被存儲(chǔ)在相應(yīng)的查詢操作符隊(duì)列中。
a1-2在存在多個(gè)查詢語句的數(shù)據(jù)流管理系統(tǒng)中,通常會(huì)存在對(duì)相同的數(shù)據(jù)流中間查詢結(jié)果進(jìn)行處理的多個(gè)操作符,甚至是針對(duì)相同的數(shù)據(jù)流上的相同的計(jì)算表達(dá)式,即公共相同子查詢。為減少查詢計(jì)算次數(shù),考慮使用子查詢共享策略。
a1-3如圖1所示,一般情況下,子查詢共享是指相同子查詢共享,即操作符以及由其關(guān)聯(lián)的操作數(shù)完全相同的情況下,共享該操作符的結(jié)點(diǎn)、該操作數(shù)的結(jié)點(diǎn)、及該操作符和該操作數(shù)共同組成的計(jì)算結(jié)果,以合并查詢語法樹。
例如依次注冊(cè)到系統(tǒng)中的三個(gè)查詢,“;”表示順序查詢謂詞,“∧”、“∨”分別表示為集合合取操作符、集合析取操作符,通過下面的查詢語法樹(見圖1)可以發(fā)現(xiàn)三個(gè)查詢可以共享數(shù)據(jù)流s1、s2,減少了存取數(shù)據(jù)流s1、s2的次數(shù)。
日志流查詢1:cq1=s1;s2=s1|;s2=ls1;
日志流查詢2:cq2=s2;s1=s1;|s2=ls2;
日志流查詢3:cq3=s1∧s2=(s1;s2)∨(s2;s1)=ls1∨ls2;
其中操作符“;”表示嚴(yán)格的日志流事件順序的順序操作符;“|;”和“;|”為表達(dá)s1、s2的數(shù)據(jù)共享,在操作符上表述兩者的先后順序關(guān)系;cq3這一查詢中等式成立的條件是在查詢語義成立的條件下邏輯表達(dá)式轉(zhuǎn)換。
在大多數(shù)情況下我們希望的一種情形是不僅數(shù)據(jù)可以共享,如上述情形,而且連操作也可以共享,這樣就可以共享日志流經(jīng)過操作后的中間結(jié)果,下述情形為操作符共享方法。顯然共享數(shù)據(jù)時(shí)不一定能共享操作,但共享操作一定能共享數(shù)據(jù)。
a2.操作符共享方法(操作共享)
經(jīng)過上述數(shù)據(jù)查詢優(yōu)化(數(shù)據(jù)共享)后,在日志流間查找可共享的操作符,該操作符一般具有如下特征:
1.是同一類操作符,一般為簡(jiǎn)單操作符,即投影操作符或選擇操作符;
2.他們需要處理的日志流具有相同的結(jié)構(gòu)特征,易于實(shí)現(xiàn)共享;
3.具備相同的查詢條件,即對(duì)于相同的日志流操作后得到相同的結(jié)果。
a2-1.子查詢操作直接共享
將多個(gè)符合條件的操作符共享,將共享結(jié)果供多個(gè)查詢(每個(gè)查詢都可以表示為一棵查詢語法樹)使用,如圖2上半部分內(nèi)容所示的查詢序列通過子查詢共享后得到圖2下半部分內(nèi)容所示的查詢序列。
a2-2.子查詢操作間接共享
在實(shí)際查詢過程中同時(shí)具備上面三個(gè)條件的可共享的操作符并不多見,尤其是第三個(gè)條件,要求查詢條件相同,在實(shí)際查詢過程中較為少見。但是如果對(duì)具備前兩個(gè)條件的查詢操作符進(jìn)行相應(yīng)查詢條件的轉(zhuǎn)化,使其符合第三個(gè)條件,便可以進(jìn)行操作符共享。轉(zhuǎn)換的前提是日志流滿足特征1、2,即查詢語法里包含相同的查詢子句,并且查詢的數(shù)據(jù)范圍相同或存在包含關(guān)系。這里需要額外說明的是處理數(shù)據(jù)流時(shí)需要同時(shí)兼顧存儲(chǔ)在磁盤中的數(shù)據(jù)和在線的實(shí)時(shí)數(shù)據(jù)。如果查詢歷史數(shù)據(jù)就退化為簡(jiǎn)單的數(shù)據(jù)庫查詢,如果只查詢?cè)诰€數(shù)據(jù)(如統(tǒng)計(jì))就退化為數(shù)據(jù)流上的查詢。
如圖3所示,兩選擇操作符因?yàn)椴樵儣l件不同而不能進(jìn)行共享,但經(jīng)過轉(zhuǎn)化x>200的查詢條件可以利用x>100的查詢結(jié)果進(jìn)行進(jìn)一步的查詢,從而使得查詢能夠在一定程度上進(jìn)行共享。
b.日志流存儲(chǔ)共享。經(jīng)過上面對(duì)數(shù)據(jù)共享和操作共享的分析,共享是非常必要的也是可行的,但是上述兩種共享后的數(shù)據(jù)需要在內(nèi)存和磁盤中組織數(shù)據(jù),本部分側(cè)重從存儲(chǔ)角度如何實(shí)現(xiàn)共享。其實(shí)現(xiàn)方法為:
b1.存儲(chǔ)共享模型設(shè)計(jì)
以查詢操作符隊(duì)列為基礎(chǔ),采用共享隊(duì)列的二級(jí)索引方式來實(shí)現(xiàn)數(shù)據(jù)流元組的存儲(chǔ)。它在保證數(shù)據(jù)一次索引下找到請(qǐng)求數(shù)據(jù),同時(shí)為數(shù)據(jù)共享情況下的遷移提供了一定的靈活性。
b1-1.存儲(chǔ)共享模型設(shè)計(jì)要點(diǎn):
b1-1-1.主隊(duì)列,用作接收、存儲(chǔ)和傳遞各日志流,存儲(chǔ)包括暫時(shí)存儲(chǔ)和永久存儲(chǔ);并為每個(gè)子數(shù)據(jù)流設(shè)置一個(gè)從隊(duì)列,該從隊(duì)列用以存儲(chǔ)和發(fā)送該子數(shù)據(jù)流至該主隊(duì)列;
b1-1-2.主隊(duì)列和從隊(duì)列間的通信采用異步模式,即一個(gè)數(shù)據(jù)處理窗口內(nèi),某從隊(duì)列完成查詢運(yùn)算生成索引信息后,不必等待其他從隊(duì)列,可立即將該索引信息發(fā)送至該主隊(duì)列。
此種數(shù)據(jù)存儲(chǔ)方式的優(yōu)勢(shì)在于主隊(duì)列和從隊(duì)列互為備用,確保數(shù)據(jù)信息的安全性,且從隊(duì)列存儲(chǔ)量小,并且采用異步通信策略,有助于查詢信息的實(shí)時(shí)共享,提高了數(shù)據(jù)信息的利用效率。
b1-1-3.子流與主流是相對(duì)而言,邏輯上,子日志流匯聚為主日志流,這里的主日志流也可能繼續(xù)匯聚成更高層次的主日志流,匯聚與否跟業(yè)務(wù)層次需求相關(guān)。這里跟日志所在服務(wù)器的區(qū)域概念相對(duì)應(yīng),比如按從簡(jiǎn)單到復(fù)雜分為單機(jī)服務(wù)器,多個(gè)單機(jī)服務(wù)器組成集群,集群組成數(shù)據(jù)中心,不同的數(shù)據(jù)中心會(huì)有跨域的概念,等等。另外這種數(shù)據(jù)處理邏輯也體現(xiàn)了分級(jí)復(fù)用的目的。
b1-1-4.為方便索引,在主隊(duì)列和從隊(duì)列直接可以增加一級(jí)或多級(jí)主隊(duì)列的鏡像隊(duì)列,用來存放主隊(duì)列數(shù)據(jù)的地址信息,方便數(shù)據(jù)的遷移和更新。
b1-1-5.該數(shù)據(jù)隊(duì)列的引用方式如圖4所示。圖4中,s1~s4分別代表不同日志流的中間結(jié)果存儲(chǔ)隊(duì)列,例如某請(qǐng)求查詢系統(tǒng)中所有出現(xiàn)error的日志,那么s1代表的是應(yīng)用1中的error的日志,s2代表的是應(yīng)用2中error的日志,以此類推,通常這些隊(duì)列中含有一些相同的中間處理元組。如果將這些元組直接存儲(chǔ)在這些中間隊(duì)列中,則相同的元組可能會(huì)在多個(gè)中間隊(duì)列中重復(fù)出現(xiàn),浪費(fèi)了有限的存儲(chǔ)空間。因此,考慮將元組統(tǒng)一存儲(chǔ)在隊(duì)列s(主隊(duì)列)中,而s1~s4只存放和維護(hù)這些元組在隊(duì)列中的索引。
b1-2.為解決數(shù)據(jù)遷移的靈活性問題,在主隊(duì)列s和中間結(jié)果存儲(chǔ)隊(duì)列s1~s4之間又增設(shè)了一個(gè)中間索引地址隊(duì)列s’(輔隊(duì)列)。在s’中存儲(chǔ)隊(duì)列s中元組的地址,而s1~s4中只存儲(chǔ)指向s’中這些地址的指針。這樣,當(dāng)進(jìn)行數(shù)據(jù)遷移時(shí),僅需要改動(dòng)s’隊(duì)列中的內(nèi)容,而不需要頻繁地變更隊(duì)列s1~s4中相同的內(nèi)容。
b1-3.為方便理解此處再次聲明:主隊(duì)列s,日志流匯聚后的元組隊(duì)列;輔隊(duì)列s’,中間索引地址隊(duì)列;ss1-ss4是日志流的中間結(jié)果隊(duì)列,與前面的參與運(yùn)算的原始日志流s1、s2不同,前者的抽象是為存儲(chǔ)(不限于ss1-ss4),后者的抽象是為查詢和邏輯運(yùn)算,最多涉及兩個(gè)對(duì)象(s1,s2)。
b1-4.通過數(shù)據(jù)流隊(duì)列s和相應(yīng)地址隊(duì)列s’互相索引,既可以實(shí)現(xiàn)數(shù)據(jù)遷移時(shí)元組的地址在s’中的動(dòng)態(tài)改變,而且操作符控制的數(shù)據(jù)中間處理結(jié)果隊(duì)列通過對(duì)s’地址的索引完成,從而間接索引到s隊(duì)列中的元組,使得數(shù)據(jù)遷移有了一定的靈活性。
c.本發(fā)明的目標(biāo)是在分布式日志流處理系統(tǒng)上,實(shí)現(xiàn)日志流數(shù)據(jù)的存儲(chǔ)共享和查詢共享,提升分布式流處理系統(tǒng)的響應(yīng)速度。根據(jù)上述查詢共享和存儲(chǔ)共享兩部分的設(shè)計(jì)要點(diǎn),對(duì)于系統(tǒng)中的查詢實(shí)現(xiàn)共享的詳細(xì)實(shí)施步驟如下:
c1.日志流查詢處理,其實(shí)現(xiàn)的基本過程方法為:
c1-1.首先將用cql語言表達(dá)的查詢操作注冊(cè)到系統(tǒng),并通過設(shè)定滑動(dòng)窗口,將數(shù)據(jù)流中最近到達(dá)的n個(gè)元組或最近t時(shí)間內(nèi)的到達(dá)的元組進(jìn)行存儲(chǔ)。
c1-2.對(duì)概要數(shù)據(jù)結(jié)構(gòu)進(jìn)行查詢或?qū)o限的數(shù)據(jù)流進(jìn)行抽樣,將數(shù)據(jù)流中的查詢數(shù)據(jù)范圍限制在一個(gè)有限的區(qū)間(滑動(dòng)窗口)內(nèi)查詢,對(duì)于實(shí)時(shí)數(shù)據(jù)這種查詢只能得到近似的查詢結(jié)果,是一種近似查詢。
c1-3.針對(duì)數(shù)據(jù)流增加了兩個(gè)新的關(guān)鍵字rows和range,rows后接數(shù)字n,表示截取最近到達(dá)的n個(gè)元組進(jìn)行操作;而range后接時(shí)間t(時(shí)間戳),表示截取最近t時(shí)間內(nèi)的元組進(jìn)行操作,通過這種方式對(duì)數(shù)據(jù)流進(jìn)行限流處理。
根據(jù)a的步驟可以得到如下類似的多種應(yīng)用相關(guān)的cql查詢語句
selects1.source,s2.destination,s1.content
froms1[rows10000],s2[range2min]
wheres1.appid=s2.appidands1.type>=100andseq(s1;s2)
其中s1,s2表示同一應(yīng)用日志流,type=100表示日志的類型為error,值越大表示錯(cuò)誤越嚴(yán)重type=200表示致命錯(cuò)誤;
c2.思路:查詢語句的預(yù)處理:
c2-1詞法分析語法分析,根據(jù)數(shù)據(jù)庫引擎里的詞法分析語法分析模塊對(duì)查詢語句進(jìn)行轉(zhuǎn)換,將復(fù)雜查詢轉(zhuǎn)換為簡(jiǎn)單查詢。如對(duì)于上述cql查詢語句,查詢分析模塊會(huì)從where部分開始將上述復(fù)雜的查詢分解為連接(s1.appid=s2.appid)、順序(seq(s1;s2))、選擇(select)等。
c2-2調(diào)整查詢操作符的順序,優(yōu)化查詢,生成查詢語法樹,即將查詢轉(zhuǎn)換成內(nèi)部表示,如對(duì)于關(guān)系型操作可以表示成關(guān)系代數(shù)語法樹。即查詢語句可以在邏輯上表示成樹的結(jié)構(gòu),葉子節(jié)點(diǎn)是數(shù)據(jù)對(duì)象,非葉子節(jié)點(diǎn)是查詢操作符。查詢優(yōu)化模塊將投影和選擇等基本操作下放到接近輸?shù)娜~子結(jié)點(diǎn)處;
c2-3將基本的操作首先執(zhí)行,如果使用相同的數(shù)據(jù)流對(duì)象,可以將多個(gè)基本操作同時(shí)進(jìn)行。例如,將把投影和選擇運(yùn)算同時(shí)進(jìn)行。如有若干投影和選擇操作,并且他們都針對(duì)同一個(gè)關(guān)系操作,則可以在掃描此關(guān)系的同時(shí)完成所有的這些運(yùn)算以避免重復(fù)緩存以掃描數(shù)據(jù)流對(duì)象;
c2-4找出公共子表達(dá)式(子查詢)。如果這種重復(fù)出現(xiàn)的子表達(dá)式的結(jié)果不是很大的關(guān)系,并且從外存中讀取這個(gè)關(guān)系比計(jì)算該子表達(dá)式的時(shí)間少得多,則先計(jì)算一次公共子表達(dá)式并把結(jié)果寫入中間結(jié)果用以共享;
c3.在設(shè)計(jì)查詢共享模型時(shí),需重點(diǎn)考慮和解決以下幾個(gè)問題:
c3-1.發(fā)現(xiàn)共享,即從系統(tǒng)的數(shù)據(jù)流查詢條件(界定查詢數(shù)據(jù)范圍的限制子句,如where、with,屬于查詢語句的一部分)和存儲(chǔ)結(jié)構(gòu)中發(fā)現(xiàn)那些適合于共享處理的元組,比如元組是否具有相同的中間存儲(chǔ)結(jié)構(gòu)和相同的查詢操作符,這些共享不限于單個(gè)查詢內(nèi)部,也包括多個(gè)查詢之間,如圖1中的兩個(gè)連續(xù)查詢cq1和cq2;
c3-2.共享的結(jié)構(gòu)和算法設(shè)計(jì),即設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法,完成數(shù)據(jù)流相關(guān)結(jié)構(gòu)共享的要求,詳細(xì)參見發(fā)明內(nèi)容部分b.日志流存儲(chǔ)共享實(shí)現(xiàn)方法;
c3-3.相關(guān)處理,即如何處理好數(shù)據(jù)流查詢中共享部分與非共享部分的連接,一方面從不同的查詢請(qǐng)求著眼,系統(tǒng)中的查詢請(qǐng)求是不一樣的,最終還是按各自查詢樹(圖)的結(jié)構(gòu)處理整個(gè)查詢;另一方面共享和非共享部分也包括數(shù)據(jù)和操作兩方面,在存儲(chǔ)上還是用指針鉤鏈的方式索引到相應(yīng)的數(shù)據(jù)和操作。從而在數(shù)據(jù)共享的情況下保證數(shù)據(jù)流查詢處理的有效性和執(zhí)行速度。
c4.數(shù)據(jù)遷移算法設(shè)計(jì),數(shù)據(jù)遷移用作存儲(chǔ)共享的一個(gè)應(yīng)用示例或者是作為內(nèi)存中日志數(shù)據(jù)的換入換出策略,其實(shí)現(xiàn)方法為:
c4-1.定義如下變量:指向元組的指針q,q’,共享元組隊(duì)列首地址s;共享元組索引地址隊(duì)列首地址s’;臨時(shí)指針p。
需要定義如下函數(shù):
gettuplereference(q):用于獲得q指向元組的引用計(jì)數(shù);
gettupleaddress(q):用于獲得q指向的元組在s’隊(duì)列中地址索引的地址;
copy(q,q’):將q指向的元組內(nèi)容復(fù)制到q’中。
c4-2.具體的數(shù)據(jù)遷移算法如圖6所示。
c4-3.在算法過程中,需要根據(jù)中間結(jié)果隊(duì)列對(duì)元組的引用情況進(jìn)行引用計(jì)數(shù),當(dāng)計(jì)數(shù)減到0或者元組時(shí)間戳超時(shí)表示元組可以被拋棄,需進(jìn)行復(fù)位操作。數(shù)據(jù)遷移由系統(tǒng)每隔一定的時(shí)間進(jìn)行,將進(jìn)行復(fù)位操作的元組刪除,同時(shí)將有效元組做緊縮處理,同時(shí)更改隊(duì)列s’的地址內(nèi)容。
綜合上述a、b、c各部分的闡述,最終實(shí)現(xiàn)的目標(biāo)是查詢共享,各部分的邏輯關(guān)系如圖6所示。
以下為與上述方法實(shí)施例對(duì)應(yīng)的系統(tǒng)實(shí)施例,本實(shí)施方式可與上述實(shí)施方式互相配合實(shí)施。上述施方式中提到的相關(guān)技術(shù)細(xì)節(jié)在本實(shí)施方式中依然有效,為了減少重復(fù),這里不再贅述。相應(yīng)地,本實(shí)施方式中提到的相關(guān)技術(shù)細(xì)節(jié)也可應(yīng)用在上述實(shí)施方式中。
本發(fā)明還提供一種基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中包括:
截取模塊,用于將包含多個(gè)查詢語句的查詢操作注冊(cè)到系統(tǒng),通過設(shè)定滑動(dòng)窗口對(duì)日志數(shù)據(jù)流中的元組進(jìn)行截??;
查詢結(jié)果共享模塊,用于對(duì)多個(gè)該查詢語句進(jìn)行預(yù)處理,提取其中具有相同子查詢的查詢語句,并將其所查詢結(jié)果作為中間結(jié)果加以存儲(chǔ),該中間結(jié)果用以在多個(gè)查詢操作間進(jìn)行共享;
元組共享模塊,用于從截取模塊所截取的元組中提取出具有相同中間存儲(chǔ)結(jié)構(gòu)的元組,并將其采用共享隊(duì)列的方式加以存儲(chǔ)以在多個(gè)查詢操作間進(jìn)行共享。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中元組共享模塊中該共享隊(duì)列具有二級(jí)索引,包括:主隊(duì)列,用作接收、存儲(chǔ)和傳遞該相同元組;從隊(duì)列,用于存儲(chǔ)和發(fā)送該相同元組在日志數(shù)據(jù)流中的索引至該主隊(duì)列;其中主隊(duì)列和從隊(duì)列間的通信采用異步模式。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中查詢結(jié)果共享模塊中該相同子查詢,包括查詢語句間操作符相同及其關(guān)聯(lián)的操作數(shù)也相同。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中該截取模塊中采用對(duì)日志數(shù)據(jù)流概要數(shù)據(jù)結(jié)構(gòu)進(jìn)行查詢或?qū)o限的日志數(shù)據(jù)流進(jìn)行抽樣的方法對(duì)日志數(shù)據(jù)流中元組進(jìn)行截取。
該基于分級(jí)復(fù)用的日志數(shù)據(jù)流的查詢共享系統(tǒng),其中查詢結(jié)果共享模塊中該預(yù)處理包括:根據(jù)數(shù)據(jù)庫引擎里的詞法分析語法分析模塊對(duì)該查詢語句進(jìn)行轉(zhuǎn)換,將復(fù)雜查詢語句轉(zhuǎn)換為簡(jiǎn)單查詢語句;調(diào)整該查詢語句中查詢操作符的順序,將查詢轉(zhuǎn)換成內(nèi)部表示。
雖然本發(fā)明以上述實(shí)施例公開,但具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明,任何本技術(shù)領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的構(gòu)思和范圍內(nèi),可作一些的變更和完善,故本發(fā)明的權(quán)利保護(hù)范圍以權(quán)利要求書為準(zhǔn)。