本發(fā)明涉及一種實(shí)時(shí)數(shù)據(jù)分析方法和實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)。
背景技術(shù):
:隨著大數(shù)據(jù)時(shí)代的到來(lái),與傳統(tǒng)的數(shù)據(jù)分析方法相比,一方面由于數(shù)據(jù)量的爆炸式增長(zhǎng),另一方面由于數(shù)據(jù)類型的增加,使大數(shù)據(jù)時(shí)代遇到了更大的挑戰(zhàn)。面對(duì)這些挑戰(zhàn),Hadoop(一種分布式系統(tǒng)基礎(chǔ)架構(gòu))應(yīng)運(yùn)而生,解決了離線數(shù)據(jù)分析的難題。實(shí)時(shí)大數(shù)據(jù)分析是指對(duì)規(guī)模巨大的數(shù)據(jù)進(jìn)行分析,利用大數(shù)據(jù)技術(shù)高效的快速完成分析,達(dá)到近似實(shí)時(shí)的效果,更及時(shí)的反映數(shù)據(jù)的價(jià)值和意義。對(duì)于實(shí)時(shí)的數(shù)據(jù)分析要求,Hadoop因?yàn)樽陨淼奶攸c(diǎn),并不能在這一領(lǐng)域得到應(yīng)用。基于分布式列式存儲(chǔ)的數(shù)據(jù)分析引擎,利用其靈活的存儲(chǔ)結(jié)構(gòu),在數(shù)據(jù)導(dǎo)入時(shí),對(duì)原始數(shù)據(jù)的各個(gè)字段創(chuàng)建索引,并進(jìn)行聚合存儲(chǔ),可大大提升數(shù)據(jù)分析的性能?;诜植际搅惺酱鎯?chǔ)引擎的數(shù)據(jù)分析框架,影響效率的兩個(gè)核心技術(shù)是:數(shù)據(jù)聚合性能和數(shù)據(jù)查詢性能。分布式列式存儲(chǔ)計(jì)算引擎將數(shù)據(jù)分發(fā)到多個(gè)節(jié)點(diǎn)中,執(zhí)行過(guò)程中需要對(duì)各個(gè)節(jié)點(diǎn)檢索到的數(shù)據(jù)進(jìn)行匯聚,之后對(duì)匯聚的數(shù)據(jù)進(jìn)行分組、統(tǒng)計(jì)、數(shù)據(jù)挖掘等計(jì)算。目前常用的列式存儲(chǔ)方案,如HBase和Mongodb,將數(shù)據(jù)劃分為一個(gè)Key(鍵)和多個(gè)Value(值)字段,雖然可以提升字段的提取性能,但是無(wú)法天然支持Value字段的聚合運(yùn)算,并且對(duì)單個(gè)文檔,只能通過(guò)一個(gè)Key值進(jìn)行索引。技術(shù)實(shí)現(xiàn)要素:針對(duì)相關(guān)技術(shù)中的上述問(wèn)題,本發(fā)明提出一種實(shí)時(shí)數(shù)據(jù)分析方法,能夠提升索引的靈活性和數(shù)據(jù)聚合分析性能。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:根據(jù)本發(fā)明的一個(gè)方面,提供了一種實(shí)時(shí)數(shù)據(jù)分析方法。該實(shí)時(shí)數(shù)據(jù)分析方法包括:根據(jù)需求構(gòu)造檢索算子和聚合分析算法;根據(jù)檢索算子對(duì)索引表和數(shù)據(jù)表進(jìn)行檢索以獲取分析字段數(shù)據(jù);以及根據(jù)聚合分析算法對(duì)分析字段數(shù)據(jù)進(jìn)行聚合分析;其中,索引表和數(shù)據(jù)表均采用key-value形式的列式存儲(chǔ),索引表配置為分析數(shù)據(jù)的各個(gè)字段與對(duì)應(yīng)的字段數(shù)據(jù)的索引表。根據(jù)本發(fā)明的一個(gè)實(shí)施例,根據(jù)檢索算子對(duì)索引表和數(shù)據(jù)表進(jìn)行檢索以獲取分析字段數(shù)據(jù),包括:根據(jù)檢索算子對(duì)索引表進(jìn)行檢索以獲取記錄標(biāo)識(shí);對(duì)記錄標(biāo)識(shí)的集合進(jìn)行集合運(yùn)算;根據(jù)經(jīng)過(guò)集合運(yùn)算后的記錄標(biāo)識(shí),在數(shù)據(jù)表中讀取對(duì)應(yīng)的分析字段數(shù)據(jù)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,分析字段數(shù)據(jù)以單獨(dú)列的形式存儲(chǔ)于數(shù)據(jù)表中。根據(jù)本發(fā)明的一個(gè)實(shí)施例,索引表以記錄標(biāo)識(shí)中字段的值為索引表的鍵;以及以記錄的數(shù)量和記錄標(biāo)識(shí)的列表為索引表的值。根據(jù)本發(fā)明的一個(gè)實(shí)施例,以記錄值列表、和以單獨(dú)列的形式存儲(chǔ)的分析字段數(shù)據(jù)為數(shù)據(jù)表的值。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在記錄標(biāo)識(shí)的列表中,記錄標(biāo)識(shí)的排列采用升序排列。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在根據(jù)檢索算子對(duì)索引表進(jìn)行檢索以獲取記錄標(biāo)識(shí)之后,還包括:對(duì)記錄標(biāo)識(shí)進(jìn)行歸并排序。根據(jù)本發(fā)明的一個(gè)實(shí)施例,集合運(yùn)算至少包括以下運(yùn)算中的一種:交運(yùn)算、差運(yùn)算、并運(yùn)算、以及補(bǔ)運(yùn)算;聚合分析至少包括以下運(yùn)算中的一種:數(shù)量統(tǒng)計(jì)、平均值運(yùn)算、求和運(yùn)算、最大值運(yùn)算、以及最小值運(yùn)算。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在根據(jù)聚合分析算法對(duì)分析字段數(shù)據(jù)進(jìn)行聚合分析之后還包括:獲取聚合分析的分析結(jié)果,對(duì)分析結(jié)果進(jìn)行匯總處理。根據(jù)本發(fā)明的另一個(gè)方面,提供了一種實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)。該實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)包括:解析模塊,用于根據(jù)需求構(gòu)造檢索算子和聚合分析算法;檢索模塊,用于根據(jù)檢索算子對(duì)索引表和數(shù)據(jù)表進(jìn)行檢索以獲取分析字段數(shù)據(jù);以及分析模塊,用于根據(jù)聚合分析算法對(duì)分析字段數(shù)據(jù)進(jìn)行聚合分析;其中,索引表和數(shù)據(jù)表均采用key-value形式的列式存儲(chǔ),索引表配置為分析數(shù)據(jù)的各個(gè)字段與對(duì)應(yīng)的字段數(shù)據(jù)的索引表。本發(fā)明通過(guò)對(duì)分析數(shù)據(jù)的各字段構(gòu)建列到分析數(shù)據(jù)的索引表,來(lái)支持通過(guò)各個(gè)字段對(duì)分析數(shù)據(jù)的檢索、查詢。能夠擴(kuò)展列式存儲(chǔ)結(jié)構(gòu)的索引靈活性,使列式存儲(chǔ)結(jié)構(gòu)支持多字段的檢索方式;另一方面,通過(guò)列式存儲(chǔ)結(jié)構(gòu),降低了每次數(shù)據(jù)分析讀取的數(shù)據(jù)量,提升了數(shù)據(jù)聚合分析的性能。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是根據(jù)本發(fā)明實(shí)施例的實(shí)時(shí)數(shù)據(jù)分析方法的流程圖;圖2是根據(jù)本發(fā)明具體實(shí)施例的實(shí)時(shí)數(shù)據(jù)分析方法的流程圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。根據(jù)本發(fā)明的實(shí)施例,提供了一種實(shí)時(shí)數(shù)據(jù)分析方法。如圖1所示,根據(jù)本發(fā)明實(shí)施例的實(shí)時(shí)數(shù)據(jù)分析方法包括以下步驟:S110,根據(jù)需求構(gòu)造檢索算子和聚合分析算法;S120,根據(jù)檢索算子對(duì)索引表和數(shù)據(jù)表進(jìn)行檢索以獲取分析字段數(shù)據(jù);以及S130,根據(jù)聚合分析算法對(duì)分析字段數(shù)據(jù)進(jìn)行聚合分析;其中,索引表和數(shù)據(jù)表均采用key-value形式的列式存儲(chǔ),索引表配置為分析數(shù)據(jù)的各個(gè)字段與對(duì)應(yīng)的字段數(shù)據(jù)的索引表。分析字段數(shù)據(jù)是分析數(shù)據(jù)的一部分。上述技術(shù)方案,在列存儲(chǔ)引擎中,分析數(shù)據(jù)以Key-Value形式存儲(chǔ)在數(shù)據(jù)表中,通過(guò)對(duì)分析數(shù)據(jù)的各字段構(gòu)建列到分析數(shù)據(jù)的索引表,來(lái)支持通過(guò)各個(gè)字段對(duì)分析數(shù)據(jù)的檢索、查詢。能夠擴(kuò)展列式存儲(chǔ)結(jié)構(gòu)的索引靈活性,使列式存儲(chǔ)結(jié)構(gòu)支持多字段的檢索方式;另一方面,通過(guò)列式存儲(chǔ)結(jié)構(gòu),降低了每次數(shù)據(jù)分析讀取的數(shù)據(jù)量,提升了數(shù)據(jù)聚合分析的性能。根據(jù)本發(fā)明的一個(gè)實(shí)施例,S120可以包括以下步驟:S121,根據(jù)檢索算子對(duì)索引表進(jìn)行檢索以獲取記錄標(biāo)識(shí);S122,對(duì)記錄標(biāo)識(shí)的集合進(jìn)行集合運(yùn)算;S123,根據(jù)經(jīng)過(guò)集合運(yùn)算后的記錄標(biāo)識(shí),在數(shù)據(jù)表中讀取對(duì)應(yīng)的分析字段數(shù)據(jù)。其中,以記錄的數(shù)量和記錄標(biāo)識(shí)的列表為索引表的值(Value)。通過(guò)存儲(chǔ)記錄的數(shù)量,可以直觀反映檢索的記錄標(biāo)識(shí)的集合的大小,進(jìn)而為執(zhí)行過(guò)程優(yōu)化提供直接參考。優(yōu)選地,在記錄標(biāo)識(shí)的列表中,記錄標(biāo)識(shí)的排列采用升序排列。升序排列的記錄標(biāo)識(shí),可以有效提升多字段檢索時(shí)的文件集合運(yùn)算的效率。具體地,可以通過(guò)對(duì)索引表的索引表名進(jìn)行規(guī)范化命名來(lái)實(shí)現(xiàn)索引定位。命名規(guī)則如下:索引表名為:index-type-column;數(shù)據(jù)表名為:index-type;其中,index為索引數(shù)據(jù)集名稱,type為數(shù)據(jù)類型名稱,column為索引字段名稱。索引表存儲(chǔ)在列式存儲(chǔ)引擎中,鍵字段為索引的記錄中字段的值,值字段存儲(chǔ)索引的記錄數(shù)量和索引的記錄列表。索引表的字段名稱和字段說(shuō)明如表1所示:表1例如,一條記錄為cv1:cv2:cv3,在數(shù)據(jù)存儲(chǔ)的過(guò)程中,會(huì)自動(dòng)為該記錄生成唯一的標(biāo)識(shí)id,設(shè)為id1。存儲(chǔ)時(shí),索引表的具體結(jié)構(gòu)如表2所示:表2Key1Doc_count1Doc_value1cv11id1cv21id1cv31id1進(jìn)一步地,數(shù)據(jù)表以記錄標(biāo)識(shí)為數(shù)據(jù)表的鍵;以及以記錄值列表、和以單獨(dú)列的形式存儲(chǔ)的分析字段數(shù)據(jù)為數(shù)據(jù)表的值。優(yōu)選地,分析字段數(shù)據(jù)以單獨(dú)列的形式存儲(chǔ)于數(shù)據(jù)表中。為提升數(shù)據(jù)分析性能,可將分析字段數(shù)據(jù)添加為單獨(dú)的列,降低數(shù)據(jù)讀取大小,提升分析性能。具體地,列式存儲(chǔ)的數(shù)據(jù)表的字段名稱和字段說(shuō)明如表3所示:表3字段名稱字段說(shuō)明Key2記錄標(biāo)識(shí)Doc_value2記錄值列表,采用json格式存儲(chǔ){column}列式存儲(chǔ)字段,用于優(yōu)化數(shù)據(jù)分析性能為了采用上述索引表和數(shù)據(jù)表的結(jié)構(gòu)對(duì)分析數(shù)據(jù)進(jìn)行存儲(chǔ)、同時(shí)降低數(shù)據(jù)索引的大小,可將數(shù)據(jù)字段分為索引字段數(shù)據(jù)和分析字段數(shù)據(jù)。索引字段數(shù)據(jù)表示為用于進(jìn)行數(shù)據(jù)檢索的字段,通??梢詾樽址?、時(shí)間類型,通過(guò)索引字段數(shù)據(jù)來(lái)定位分析字段數(shù)據(jù)集。分析字段數(shù)據(jù)為用于進(jìn)行數(shù)據(jù)分析的字段,通常為數(shù)字類型,用于數(shù)據(jù)的統(tǒng)計(jì)分析。分析字段數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)表中。根據(jù)本發(fā)明的一個(gè)實(shí)施例,集合運(yùn)算可以至少包括以下運(yùn)算中的一種:交運(yùn)算、差運(yùn)算、并運(yùn)算、以及補(bǔ)運(yùn)算;實(shí)時(shí)數(shù)據(jù)分析目的是提取海量數(shù)據(jù)的特征,本發(fā)明支持的運(yùn)算方式為:數(shù)量統(tǒng)計(jì)、均值運(yùn)算、求和運(yùn)算、最大值、最小值運(yùn)算等。聚合分析可以至少包括以下運(yùn)算中的一種:數(shù)量統(tǒng)計(jì)、平均值運(yùn)算、求和運(yùn)算、最大值運(yùn)算、以及最小值運(yùn)算。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在S121之后還可以包括:對(duì)記錄標(biāo)識(shí)進(jìn)行歸并排序的步驟。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在S130之后還可以包括:S140,獲取聚合分析的分析結(jié)果,對(duì)分析結(jié)果進(jìn)行匯總處理。下面結(jié)合圖2所示,對(duì)上述實(shí)施例進(jìn)行具體說(shuō)明。在步驟S201中,解析數(shù)據(jù)分析語(yǔ)句,并提供檢索算子,讀取檢索值覆蓋的記錄數(shù)量,計(jì)算檢索過(guò)程資源損耗,評(píng)估檢索中間結(jié)果集合運(yùn)算代價(jià)與讀取數(shù)據(jù)過(guò)濾代價(jià)對(duì)比,確定檢索字段,構(gòu)造檢索算子。之后,確定各個(gè)檢索算子檢索記錄集合的操作流程,并根據(jù)該操作流程構(gòu)造分析字段數(shù)據(jù)的聚合分析算法。當(dāng)接收到數(shù)據(jù)分析請(qǐng)求時(shí),例如需針對(duì)用戶的消費(fèi)數(shù)據(jù)查詢北京地區(qū)用戶的消費(fèi)趨勢(shì),則構(gòu)造如下的聚合分析算法:searchconsume|filterregionin‘北京’|groupbyevent_datestep1day|sum(price)_。其中,consume為消費(fèi)數(shù)據(jù)集合,filter關(guān)鍵字表示過(guò)濾,groupby表示分組操作,即按照日期進(jìn)行分組,分組的日期步長(zhǎng)為1天,最后統(tǒng)計(jì)消費(fèi)金額的總和sum(price)。計(jì)算執(zhí)行過(guò)程中的“|”符號(hào),用來(lái)區(qū)分?jǐn)?shù)據(jù)處理的步驟。在步驟S202中,數(shù)據(jù)檢索過(guò)程指通過(guò)檢索算子和索引表獲取記錄標(biāo)識(shí)的過(guò)程,并將記錄標(biāo)識(shí)進(jìn)行歸并排序。因?yàn)橛涗洏?biāo)識(shí)存儲(chǔ)已經(jīng)按升序進(jìn)行排序,所以數(shù)據(jù)檢索過(guò)程的時(shí)間復(fù)雜度為線性復(fù)雜度O(n)。具體地,因?yàn)閿?shù)據(jù)可存儲(chǔ)于不同的數(shù)據(jù)節(jié)點(diǎn),因此在進(jìn)行數(shù)據(jù)檢索的時(shí)候,需要將各個(gè)節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行過(guò)濾,然后將各節(jié)點(diǎn)過(guò)濾后的中間結(jié)果集進(jìn)行合并后,再進(jìn)行聚合操作。合并的過(guò)程中按照數(shù)據(jù)唯一標(biāo)識(shí)進(jìn)行歸并操作。在步驟S203中,對(duì)獲取的記錄標(biāo)識(shí)的集合,進(jìn)行集合運(yùn)算,以確定最終用于分析字段數(shù)據(jù)讀取的記錄標(biāo)識(shí)的集合。其中,集合運(yùn)算是指集合的交、差、并、補(bǔ)運(yùn)算。例如,查詢買入A產(chǎn)品,未買入B產(chǎn)品的用戶時(shí),通過(guò)分別檢索買入A產(chǎn)品的用戶標(biāo)識(shí)集合和買入B產(chǎn)品的用戶標(biāo)識(shí)集合,進(jìn)行集合的差運(yùn)算。在步驟S204中,進(jìn)行分析字段數(shù)據(jù)讀取。依據(jù)記錄標(biāo)識(shí)和讀取算子,讀取分析字段數(shù)據(jù)。因?yàn)榉治鲎侄螖?shù)據(jù)在數(shù)據(jù)表中存儲(chǔ)為獨(dú)立列,所以可以直接讀取。由于只需要分析字段數(shù)據(jù)而無(wú)需進(jìn)行分析運(yùn)算,提升了數(shù)據(jù)聚合分析的性能。在步驟S205中,依據(jù)構(gòu)造的聚合分析算法,對(duì)獲取的分析字段數(shù)據(jù)進(jìn)行聚合分析。例如,聚合分析sum(price),需要檢索出中間結(jié)果集合、按照分組模式在各個(gè)節(jié)點(diǎn)中對(duì)price字段做求和運(yùn)算。在步驟S206中,獲取各個(gè)分布式節(jié)點(diǎn)中的聚合分析的分析結(jié)果,并對(duì)分析結(jié)果進(jìn)行匯總處理,將處理結(jié)果返回至客戶端。上述步驟S201至步驟S205可在各個(gè)執(zhí)行節(jié)點(diǎn)中進(jìn)行,步驟S206可在服務(wù)節(jié)點(diǎn)中進(jìn)行。根據(jù)本發(fā)明的實(shí)施例,還提供了一種實(shí)時(shí)數(shù)據(jù)分析系統(tǒng),包括:解析模塊,用于根據(jù)需求構(gòu)造檢索算子和聚合分析算法;檢索模塊,用于根據(jù)檢索算子對(duì)索引表和數(shù)據(jù)表進(jìn)行檢索以獲取分析字段數(shù)據(jù);以及分析模塊,用于根據(jù)聚合分析算法對(duì)分析字段數(shù)據(jù)進(jìn)行聚合分析;其中,索引表和數(shù)據(jù)表均采用key-value形式的列式存儲(chǔ),索引表配置為分析數(shù)據(jù)的各個(gè)字段與對(duì)應(yīng)的字段數(shù)據(jù)的索引表。本發(fā)明支持五種數(shù)據(jù)分析類型:上卷、下鉆、切面、切塊以及旋轉(zhuǎn)。其中上卷指沿著維度的層次向上聚集匯總數(shù)據(jù);下鉆指沿著維度的層次向下細(xì)分匯總數(shù)據(jù);切面指在給定的數(shù)據(jù)立方體的一個(gè)維上進(jìn)行的數(shù)據(jù)匯總;切塊指在給定的數(shù)據(jù)立方體的兩個(gè)或多個(gè)維上進(jìn)行數(shù)據(jù)匯總;旋轉(zhuǎn)的目的是得到不同視角的數(shù)據(jù),數(shù)據(jù)旋轉(zhuǎn)操作相當(dāng)于基于平面數(shù)據(jù)將坐標(biāo)軸旋轉(zhuǎn)。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3