本發(fā)明涉及
技術(shù)領(lǐng)域:
:,特別涉及一種基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法,同時還特別涉及一種基于Hbase的數(shù)據(jù)統(tǒng)計系統(tǒng)。
背景技術(shù):
::當(dāng)前是數(shù)據(jù)的時代,各種各樣的數(shù)據(jù)堆積成山,如何在這些雜亂無章的數(shù)據(jù)中找出有規(guī)律的、基于某些維度的統(tǒng)計數(shù)據(jù)顯得越來越重要。統(tǒng)計數(shù)據(jù)能夠為決策、研究、分析等提供重要依據(jù)。所以一種快速、高效、實時、智能的統(tǒng)計方案能夠帶來重要的價值。HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,為一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng),。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫,另外,HBase基于列的而不是基于行的模式。現(xiàn)有的基于Hbase數(shù)據(jù)庫的數(shù)據(jù)存儲方法流程為:先從歷史數(shù)據(jù)中按各個時間段查詢出所有數(shù)據(jù),然后每條數(shù)據(jù)根據(jù)表1中格式存入臨時表Table1中,以過車數(shù)據(jù)存儲為例,構(gòu)建表Table1。表1其中,tollgate_code為卡口編碼,lane_index為通道代碼,vehicle_type為車輛類型,timestamp為時間戳,vehicle_speed為車輛車速。基于上述的臨時表,當(dāng)用戶需要按照小時統(tǒng)計報表時,則在上述時間的劃分過程中按照小時為時間段進(jìn)行劃分,然后將臨時表Table1中的數(shù)據(jù)進(jìn)行一小時一小時的匯總,然后存入到表Table2中,Table2如下:表2Table1和Table2的區(qū)別在于Table1的timestamp是直接用每條數(shù)據(jù)的過車時間,value是用每條數(shù)據(jù)的車輛速度;而Table2的timestamp是整小時的時間點,value是這一小時內(nèi)的所有過車數(shù)據(jù)速度的平均值和過車數(shù)據(jù)的總數(shù)量的組合值。在實際的應(yīng)用中,如果當(dāng)用戶需要統(tǒng)計日報、周報、月報、年報等,就需要再重新建表,然后把上一張表的數(shù)據(jù)進(jìn)行匯總再存入到對應(yīng)的表中,流程需要重新開發(fā),運行時對系統(tǒng)的開銷大。上述整個統(tǒng)計流程除了卡口編碼以及通道代碼,此外只能對車輛類型的數(shù)據(jù)進(jìn)行統(tǒng)計。如果還需要對車輛顏色、違章類型等進(jìn)行統(tǒng)計,就需要將上述流程重新走一遍,表也要新建,開發(fā)量大。發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn)了現(xiàn)有技術(shù)中的以下幾個問題:(1)可擴(kuò)展性差,仍以上述的車輛信息為例,不管是時間維度上的時報、日報、周報、月報、年報等,還是統(tǒng)計類型維度上的車輛類型、車輛顏色、違章類型等,都是需要重新建表,重啟進(jìn)程或線程去做,這對這對系統(tǒng)的計算和內(nèi)存的開銷都比較大。而且不管是時間維度還是統(tǒng)計類型維度,都做不到可配,增加一個新的時間周期或者統(tǒng)計類型,都需要重新開發(fā),工作量極大;(2)實時性差,由于現(xiàn)有技術(shù)中類似于上述方案的存儲方法是從大量歷史數(shù)據(jù)中查詢出需要的時間段的數(shù)據(jù),然后先存入臨時表,再從臨時表將數(shù)據(jù)匯總到需要的報表,數(shù)據(jù)來源為歷史數(shù)據(jù)決定了這種方案的實時性不高。(3)開銷大,上述的數(shù)據(jù)存儲過程中是基于時間維度的統(tǒng)計粒度進(jìn)行的,實際應(yīng)用中如果在時間維度的統(tǒng)計粒度和統(tǒng)計類型維度上的統(tǒng)計類型都比較多時,由于這個流程會做大量的重復(fù)工作,所以對系統(tǒng)的開銷會比較大。因此,如何減少對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴已經(jīng)成為本領(lǐng)域技術(shù)人員亟待解決的問題。技術(shù)實現(xiàn)要素:本申請?zhí)峁┝艘环N基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法與系統(tǒng),旨在減少對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴,并提高數(shù)據(jù)統(tǒng)計結(jié)果的實時性。本申請實施例提出了一種基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法,所述方法包括:創(chuàng)建接收到的數(shù)據(jù)的存儲格式,所述存儲格式中行鍵RowKey由第一統(tǒng)計粒度與所述數(shù)據(jù)的固定統(tǒng)計類型拼接構(gòu)成,所述存儲格式中列Column由所述數(shù)據(jù)的可配置統(tǒng)計類型的名稱和統(tǒng)計值拼接構(gòu)成,其中,所述第一統(tǒng)計粒度為所述數(shù)據(jù)對應(yīng)的最小統(tǒng)計粒度;根據(jù)所述第一統(tǒng)計粒度與所述存儲格式將所述數(shù)據(jù)存入所述Hbase;當(dāng)用戶指定的第二統(tǒng)計粒度與所述第一統(tǒng)計粒度不一致時,則根據(jù)所述第二統(tǒng)計粒度與所述存儲格式確定合并格式,并根據(jù)所述合并格式對存入到所述Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計。優(yōu)選的,還包括:所述存儲格式中的value值包括所述數(shù)據(jù)統(tǒng)計結(jié)果的數(shù)量;確定所述數(shù)據(jù)中各數(shù)據(jù)單元所在的時間段,所述時間段與所述第一統(tǒng)計粒度對應(yīng);根據(jù)所述時間段為所述數(shù)據(jù)單元添加時間戳。優(yōu)選的,根據(jù)所述存儲格式將所述數(shù)據(jù)存入所述Hbase,具體包括:根據(jù)所述數(shù)據(jù)單元的時間戳將所述數(shù)據(jù)單元按照所述時間戳存入所述Hbase中對應(yīng)的時間段;對所述時間段存入的各數(shù)據(jù)單元依次添加序列號進(jìn)行區(qū)分。優(yōu)選的,則根據(jù)所述第二統(tǒng)計粒度與所述存儲格式確定合并格式,所述合并格式具體為:將所述RowKey中的第一統(tǒng)計粒度修改為所述第二統(tǒng)計粒度,對所述value值進(jìn)行累加和求平均值后獲取第二value值。優(yōu)選的,根據(jù)所述合并格式對存入到所述Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計,具體為:根據(jù)所述第二統(tǒng)計粒度對所述數(shù)據(jù)進(jìn)行分組,將所述第二統(tǒng)計粒度對應(yīng)的時間段的起始時間作為所述數(shù)據(jù)組的第二時間戳;根據(jù)所述第二統(tǒng)計粒度對應(yīng)的時間段與所述合并格式獲取與所述第二統(tǒng)計粒度對應(yīng)的第二數(shù)據(jù);根據(jù)所述第二時間戳將所述第二數(shù)據(jù)插入Hbase中。相應(yīng)的,基于與上述相同的技術(shù)思路,本發(fā)明實施例還提出了一種基于于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計系統(tǒng),所述系統(tǒng)包括:生成模塊,創(chuàng)建接收到的數(shù)據(jù)的存儲格式,所述存儲格式中行鍵RowKey由第一統(tǒng)計粒度與所述數(shù)據(jù)的固定統(tǒng)計類型拼接構(gòu)成,所述存儲格式中列Column由所述數(shù)據(jù)的可配置統(tǒng)計類型的名稱和統(tǒng)計值拼接構(gòu)成,其中,所述第一統(tǒng)計粒度為所述數(shù)據(jù)對應(yīng)的最小統(tǒng)計粒度;存儲模塊,根據(jù)所述第一統(tǒng)計粒度與所述存儲格式將所述數(shù)據(jù)存入所述Hbase;合并模塊,當(dāng)用戶指定的第二統(tǒng)計粒度與所述第一統(tǒng)計粒度不一致時,則根據(jù)所述第二統(tǒng)計粒度與所述存儲格式確定合并格式,并根據(jù)所述合并格式對存入到所述Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計。優(yōu)選的,還包括:所述存儲格式中的所述value值包括所述數(shù)據(jù)統(tǒng)計結(jié)果的數(shù)量;確定所述數(shù)據(jù)中各數(shù)據(jù)單元所在的時間段,所述時間段與所述第一統(tǒng)計粒度對應(yīng);根據(jù)所述時間段為所述數(shù)據(jù)單元添加時間戳。優(yōu)選的,所述存儲模塊具體用于:根據(jù)所述數(shù)據(jù)單元的時間戳將所述數(shù)據(jù)單元按照所述時間戳存入所述Hbase中對應(yīng)的時間段;對所述時間段存入的各數(shù)據(jù)單元依次添加序列號進(jìn)行區(qū)分。優(yōu)選的,所述合并格式具體為:將所述RowKey中的第一統(tǒng)計粒度修改為所述第二統(tǒng)計粒度,對所述value值進(jìn)行累加和求平均值后獲取第二value值。優(yōu)選的,所述合并模塊具體用于:根據(jù)所述第二統(tǒng)計粒度對所述數(shù)據(jù)進(jìn)行分組,將所述第二統(tǒng)計粒度對應(yīng)的時間段的起始時間作為所述數(shù)據(jù)組的第二時間戳;根據(jù)所述第二統(tǒng)計粒度對應(yīng)的時間段與所述合并格式獲取與所述第二統(tǒng)計粒度對應(yīng)的第二數(shù)據(jù);根據(jù)所述第二時間戳將所述第二數(shù)據(jù)插入Hbase中。本申請公開了一種基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法與系統(tǒng),根據(jù)接收到的數(shù)據(jù)的創(chuàng)建數(shù)據(jù)的存儲格式,該存儲格式中行鍵RowKey由統(tǒng)計粒度與數(shù)據(jù)的固定統(tǒng)計類型構(gòu)成,列Column由可配的統(tǒng)計類型名稱與統(tǒng)計值拼接構(gòu)成,根據(jù)第一統(tǒng)計粒度與存儲格式將數(shù)據(jù)存入Hbase,當(dāng)用戶指定的第二統(tǒng)計粒度與第一統(tǒng)計粒度不一致時,則根據(jù)第二統(tǒng)計粒度與存儲格式確定合并格式,并根據(jù)合并格式對存入到Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計,減少了數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴,并提高了數(shù)據(jù)統(tǒng)計結(jié)果的實時性。附圖說明圖1為本申請實施例提出的一種基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法流程示意圖;圖2為本申請具體實施例提出的一種基于Hbase的原始數(shù)據(jù)統(tǒng)計方法的流程示意圖;圖3為本申請具體實施例中提出一種基于Hbase的合并統(tǒng)計方法的流程示意圖;圖4為本申請具體實施例中提出一種基于Hbase的數(shù)據(jù)統(tǒng)計系統(tǒng)的結(jié)構(gòu)示意圖。具體實施方式如
背景技術(shù):
:中所述,現(xiàn)有技術(shù)中基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計過程中,首先需要將數(shù)據(jù)按照時間段存入臨時表,再根據(jù)用戶的需求存入Hbase,當(dāng)需要進(jìn)行更大統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計時,需要重新進(jìn)行建表,將上一張表的數(shù)據(jù)進(jìn)行匯總再存入到對應(yīng)的表中,流程需要重新開發(fā),工作量大,將查詢到的數(shù)據(jù)先存入臨時表,再從臨時表匯總到需要的報表,其實時性也不高,運行時對系統(tǒng)的開銷過大。針對上述問題,本申請?zhí)岢隽艘环N數(shù)據(jù)統(tǒng)計方法及系統(tǒng),用以簡化數(shù)據(jù)統(tǒng)計過程中的步驟,減少數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴。本申請實施例提出了一種數(shù)據(jù)統(tǒng)計方法,在介紹本申請的技術(shù)方案之前,需要對本申請技術(shù)方案的原理進(jìn)行說明,在本申請的實施例中,首先根據(jù)數(shù)據(jù)的內(nèi)容及特征確定出待統(tǒng)計數(shù)據(jù)基于Hbase的存儲格式,基于Hbase的存儲結(jié)構(gòu)由行鍵RowKey和列Column構(gòu)成,在統(tǒng)計類型維度中,將統(tǒng)計粒度以及數(shù)據(jù)統(tǒng)計類型中的固定統(tǒng)計類型拼接在RowKey中,根據(jù)統(tǒng)計類型維度中可配的統(tǒng)計類型,將該統(tǒng)計類型拼接在Column中,首先基于數(shù)據(jù)自身最小統(tǒng)計粒度即第一統(tǒng)計粒度來存入Hbase,然后根據(jù)用戶指定的統(tǒng)計粒度選擇是否進(jìn)行合并該基于第一粒度存入的數(shù)據(jù),由此,在RowKey中可以實現(xiàn)統(tǒng)計粒度的變化選擇,實現(xiàn)了簡化數(shù)據(jù)統(tǒng)計過程中的步驟,減少數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴。如附圖1所示,為本申請實施例提出的一種基于Hbase的數(shù)據(jù)統(tǒng)計方法流程示意圖,該方法具體步驟如下:步驟101,創(chuàng)建接收到的數(shù)據(jù)的存儲格式。當(dāng)接收到一批數(shù)據(jù)時,對接收到的數(shù)據(jù)進(jìn)行分組處理,一批數(shù)據(jù)的來源可以是任意方式,例如數(shù)據(jù)流spark-streaming中的隨機rdd數(shù)據(jù),也可以是設(shè)備(例如網(wǎng)絡(luò)攝像機IPC、監(jiān)控器等前端設(shè)備)緩存的一批數(shù)據(jù),需要說明的是數(shù)據(jù)的來源以及內(nèi)容并不會對本申請的保護(hù)范圍產(chǎn)生影響。為了達(dá)到數(shù)據(jù)處理的實時性與統(tǒng)計粒度動態(tài)可變性,在接收到原始數(shù)據(jù)時,首先需要進(jìn)行從原始數(shù)據(jù)的最小統(tǒng)計粒度的統(tǒng)計,將該統(tǒng)計結(jié)果存入Hbase中,再根據(jù)用戶的需求進(jìn)行相應(yīng)的統(tǒng)計粒度的合并統(tǒng)計。其中,本申請的技術(shù)方案中首先需要確定數(shù)據(jù)統(tǒng)計過程中的最小統(tǒng)計粒度,為了便于描述,區(qū)分最小統(tǒng)計粒度與用戶指定的統(tǒng)計粒度,在以下描述中統(tǒng)一以第一統(tǒng)計粒度(最小統(tǒng)計粒度)和第二統(tǒng)計粒度(用戶指定的統(tǒng)計粒度)進(jìn)行描述。以統(tǒng)計粒度為時間維度進(jìn)行描述,在對上述類型的原始數(shù)據(jù)進(jìn)行處理的過程中,首先根據(jù)需求確定默認(rèn)的第一統(tǒng)計粒度,然后確定在向Hbase存入該數(shù)據(jù)時的存儲格式,Hbase數(shù)據(jù)庫的存儲格式中包括行鍵RowKey與列Column,本申請實施例中的Hbase數(shù)據(jù)庫的存儲格式由以下幾個元素構(gòu)成:(1)固定統(tǒng)計類型在統(tǒng)計類型維度中,如果是固定的統(tǒng)計類型,則將該統(tǒng)計類型拼接在RowKey中,該固定統(tǒng)計類型個數(shù)不限,固定統(tǒng)計類型之間的相互關(guān)系為從屬關(guān)系。在具體的應(yīng)用場景中,以一批車輛的數(shù)據(jù)的關(guān)卡代碼tollgate_code和車道號lane_index是固定的統(tǒng)計類型為例進(jìn)行說明,那么將它們拼接在RowKey中,并且數(shù)據(jù)關(guān)系如表3所示:表3(2)可配置統(tǒng)計類型而對于統(tǒng)計類型維度中的可配置統(tǒng)計類型,則將該可配置統(tǒng)計類型拼接在Column中,拼接方式為該統(tǒng)計類型的名稱與其值拼接在一起構(gòu)成一個Column,多個值則構(gòu)成多個Column,多個可配置的統(tǒng)計類型以此類推添加Column,Column之間是并列關(guān)系與RowKey中的統(tǒng)計類型時從屬關(guān)系。在具體的應(yīng)用場景中,同樣以一批車輛的數(shù)據(jù)進(jìn)行說明,如表4所示車輛類型vehicle_type是可配的統(tǒng)計類型,并且vehicle_type的值有1為小型車、2為中型車、3為大型車等,那么構(gòu)成的Column有:vehicle_type\t1、vehicle_type\t2、vehicle_type\t3等動態(tài)增加。表4如表5所示,可配置類型再增加一個plate_color,那么它們的關(guān)系以及與RowKey中的統(tǒng)計類型的關(guān)系則可見表5:表5(3)時間維度在RowKey的最前面拼接上每個統(tǒng)計粒度的標(biāo)記,代表著這條數(shù)據(jù)屬于該統(tǒng)計粒度,當(dāng)需要進(jìn)行更大統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計時,對較小的統(tǒng)計粒度的數(shù)據(jù)進(jìn)行合并就可以獲取到指定粒度的數(shù)據(jù)統(tǒng)計,實現(xiàn)統(tǒng)計粒度的動態(tài)可變性。在具體的應(yīng)用場景中,以統(tǒng)計粒度為一小時為例進(jìn)行說明,RowKey可設(shè)計為3600000+”\t”+tollgate_code+”\t”+lane_index,其中3600000為一小時對應(yīng)的標(biāo)記。(4)時間戳timestamp一批數(shù)據(jù)中會具有若干條數(shù)據(jù),在具體的應(yīng)用場景中,根據(jù)每個數(shù)據(jù)單元自身位于的時間段,該時間段為統(tǒng)計粒度對應(yīng)的時間區(qū)間,例如以統(tǒng)計粒度為分,則時間段為分鐘計算。將這批數(shù)據(jù)根據(jù)所在時間段進(jìn)行分組,為了方便區(qū)分,在此可以將每組數(shù)據(jù)看做一個數(shù)據(jù)單元,為該時間段內(nèi)的每個數(shù)據(jù)單元都添加時間戳。在本申請實施例中將時間戳分為兩類,具體為:A)一類是從原始數(shù)據(jù)到最小統(tǒng)計粒度的合并;即從原始數(shù)據(jù)的最小統(tǒng)計粒度開始進(jìn)行合并,以時間為例,一般分為秒、分、時、天、月等劃分,其中最小統(tǒng)計粒度則為秒,從原始數(shù)據(jù)到最小統(tǒng)計粒度的統(tǒng)計,由于每批原始數(shù)據(jù)中數(shù)據(jù)單元不一定全部分布在單獨統(tǒng)計粒度區(qū)間(即某一時間段)內(nèi),在后續(xù)的一批數(shù)據(jù)中也會出現(xiàn)該統(tǒng)計粒度區(qū)間內(nèi)的數(shù)據(jù)單元,此時該數(shù)據(jù)單元的時間戳與之前存儲的數(shù)據(jù)單元的時間戳相同,則會覆蓋之前已經(jīng)存儲的數(shù)據(jù)單元,造成數(shù)據(jù)的流失,為防止該情況的發(fā)生,在本申請的優(yōu)選實施例中,對Hbase中各時間段存入的數(shù)據(jù)單元依次加上序列號,該序列號會存在一個最大閾值的限制,同時也對同一時間段內(nèi)不同數(shù)據(jù)單元進(jìn)行了區(qū)分。以統(tǒng)計粒度為一分鐘的數(shù)據(jù)統(tǒng)計為例進(jìn)行說明,由于每批原始數(shù)據(jù)不一定都是分布在某一分鐘內(nèi),也不可能是這一分鐘內(nèi)的所有數(shù)據(jù),所以這一批數(shù)據(jù)根據(jù)時間分組后存入HBase時,只是用這分鐘的時間作為時間戳timestamp的話,那么下一批數(shù)據(jù)如果也有這分鐘的數(shù)據(jù),就會覆蓋掉上一批同一分鐘的數(shù)據(jù),造成統(tǒng)計結(jié)果不準(zhǔn)確的問題。所以這種時間戳需要在已有的整分鐘時間點后面加上序列數(shù),從1到60000,不能超過60000,防止覆蓋下一分鐘的數(shù)據(jù),用來區(qū)分不同批次的同一分鐘數(shù)據(jù)。B)一類是時間維度上從小統(tǒng)計粒度到大統(tǒng)計粒度的合并統(tǒng)計。其中,合并統(tǒng)計的數(shù)據(jù)是針對上一級的統(tǒng)計粒度的數(shù)據(jù),一次能夠查詢出所有需要的數(shù)據(jù),例如,從小時到天的合并統(tǒng)計,需要查詢一小時的數(shù)據(jù),可以一次查詢這一天的每小時的數(shù)據(jù),然后將結(jié)果匯總成一條記錄,即為天統(tǒng)計的這一天對應(yīng)的記錄,存入HBase,由于只有一條記錄,所以只需用這天的起始時間作為時間戳timestamp即可。(5)value值數(shù)據(jù)的value值可以為分組后的數(shù)據(jù)單元或數(shù)據(jù)組的數(shù)量number,如果還需要統(tǒng)計數(shù)據(jù)中的某些字段的平均值,那么可以將這些字段的平均值計算出來拼接在number后面。比如:需要統(tǒng)計過車記錄的平均速度,那么可以將分組后的每組所有記錄的平均速度求出,拼接在記錄總數(shù)后面,number+”\t”+average_speed。基于以上元素,在本申請的技術(shù)方案中,Hbase的存儲格式包括RowKey、Column和value值,其中RowKey由數(shù)據(jù)的固定統(tǒng)計類型與第一統(tǒng)計粒度拼接而成,Column由可配置統(tǒng)計類型的名稱和統(tǒng)計值拼接構(gòu)成,value值包括數(shù)據(jù)統(tǒng)計結(jié)果的數(shù)量和某個統(tǒng)計字段(即統(tǒng)計類型對應(yīng)的統(tǒng)計值)的平均值拼接構(gòu)成,在具體的應(yīng)用場景中,可以根據(jù)用戶實際的需求來進(jìn)行靈活的設(shè)置。步驟102,根據(jù)與第一統(tǒng)計粒度與存儲格式將數(shù)據(jù)存入Hbase。基于上述步驟101中描述的存儲格式的特征,本步驟中,基于確定的存儲格式,然后進(jìn)行數(shù)據(jù)的存入,將每個數(shù)據(jù)按照最小統(tǒng)計粒度劃分為若干個數(shù)據(jù)單元,根據(jù)存儲格式將數(shù)據(jù)單元依次存入Hbase中。在進(jìn)行存儲的過程中,由于數(shù)據(jù)單元為不同時間點發(fā)生點,可能會分布不均,需要對所有數(shù)據(jù)單元進(jìn)行預(yù)換算,將轉(zhuǎn)換成為與第一統(tǒng)計粒度對應(yīng)的時間戳,存儲進(jìn)入同一時間段的Hbase的數(shù)據(jù)單元都具有相同的時間戳,該時間戳即為對應(yīng)的時間段的最初始時間。另外,為了避免在分布不均的數(shù)據(jù)單元在存儲過程中覆蓋掉相同時間段內(nèi)的其他數(shù)據(jù)單元,在數(shù)據(jù)的存儲過程中為其添加序列號,同時可以設(shè)置統(tǒng)一時間段內(nèi)最大存入數(shù)量閾值,當(dāng)同一時間段內(nèi)的序列號等于最大存入數(shù)量閾值時,禁止對該時間段再次存入相應(yīng)的數(shù)據(jù)單元,當(dāng)然基于實際的應(yīng)用場景,也可以對同一時間段內(nèi)數(shù)據(jù)單元的數(shù)量超過最大存入數(shù)量閾值外的數(shù)據(jù)單元,也可以進(jìn)行其他的處理,該點非本申請實施例關(guān)注的方向,在此不做過多贅述。在具體的應(yīng)用場景中,以原始數(shù)據(jù)的最小統(tǒng)計粒度為一分鐘為例進(jìn)行說明,在對該類型的數(shù)據(jù)進(jìn)行處理的過程中,在確定第一存儲數(shù)據(jù)格式之前,需要將每條數(shù)據(jù)的時間字段的時間的秒和毫秒置零,然后根據(jù)時間、固定統(tǒng)計類型和可配置統(tǒng)計類型進(jìn)行分組,將每一組的數(shù)據(jù)整數(shù)型時間加上序列號構(gòu)成是時間戳timestamp,將統(tǒng)計粒度和固定統(tǒng)計類型拼接構(gòu)成RowKey,列Column由可配的統(tǒng)計類型名稱與統(tǒng)計值拼接構(gòu)成,以第一統(tǒng)計粒度為一分鐘為例進(jìn)行說明,用60000作為一分鐘標(biāo)記拼接,將可配置統(tǒng)計類型的名稱和該類型對應(yīng)的值拼接成Column,每個值對應(yīng)一個Column,如果需要統(tǒng)計總數(shù),還可以加一個“total”的Column,Column動態(tài)增加,將每一組數(shù)據(jù)的數(shù)量和需要計算的平均值拼接成value值,按照存儲格式將數(shù)據(jù)存入Hbase中,完成第一統(tǒng)計粒度(一分鐘)的數(shù)據(jù)統(tǒng)計。步驟103,當(dāng)用戶指定的第二統(tǒng)計粒度與第一統(tǒng)計粒度不一致時,則根據(jù)第二統(tǒng)計粒度與存儲格式確定合并格式,并根據(jù)合并格式對存入到Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計。此時根據(jù)用戶下發(fā)的數(shù)據(jù)統(tǒng)計指令判斷是否進(jìn)一步進(jìn)行數(shù)據(jù)的合并,判斷依據(jù)為判斷統(tǒng)計粒度是否大于第一統(tǒng)計粒度(即最小統(tǒng)計粒度),具體有以下兩種情況:(1)第二統(tǒng)計粒度不大于第一統(tǒng)計粒度,則標(biāo)志著第二統(tǒng)計粒度與第一統(tǒng)計粒度一致,此時則Hbase中存入的數(shù)據(jù)即為用戶指定的第二統(tǒng)計粒度統(tǒng)計的數(shù)據(jù);(2)第二統(tǒng)計粒度大于第一統(tǒng)計粒度,則需要對Hbase當(dāng)前存入的數(shù)據(jù)進(jìn)行統(tǒng)計粒度的進(jìn)一步合并。仍以第一統(tǒng)計粒度為一分鐘的數(shù)據(jù)為例,用戶指定第二統(tǒng)計粒度為一小時,則在接收到一批數(shù)據(jù)時,首先以第一統(tǒng)計粒度進(jìn)行數(shù)據(jù)的統(tǒng)計存入Hbase,然后根據(jù)第一統(tǒng)計粒度(一分鐘)依次合并成第二統(tǒng)計粒度,并進(jìn)行相應(yīng)的第二統(tǒng)計粒度(小時)的數(shù)據(jù)存入。當(dāng)然,在實際的應(yīng)用場景中,上述的判斷過程不必須存在的,在數(shù)據(jù)統(tǒng)計的過程中,可以優(yōu)先進(jìn)行基于最小粒度的數(shù)據(jù)統(tǒng)計,然后再進(jìn)行基于用戶需求的統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計,但是某種情況下,用戶的可能會有多個統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計需求,基于此,就可能會用到上述的判斷過程,然后進(jìn)行逐級的數(shù)據(jù)合并即可。當(dāng)用戶指定的第二統(tǒng)計粒度大于第一統(tǒng)計粒度時,需要對基于第一統(tǒng)計粒度存入Hbase的數(shù)據(jù)進(jìn)行合并統(tǒng)計,從配置的統(tǒng)計粒度從小到大依次做合并統(tǒng)計,每次統(tǒng)計操作都是查詢上一次合并統(tǒng)計的結(jié)果,以統(tǒng)計類型為時間維度進(jìn)行說明,從小時到天的合并統(tǒng)計,就是查詢一天每個小時的統(tǒng)計數(shù)據(jù),然后將各小時的數(shù)據(jù)合并。合并的過程之前,需要先確定基于第二統(tǒng)計粒度與第一存儲文件的合并格式,該合并格式為將Hbase中原統(tǒng)計數(shù)據(jù)的第一統(tǒng)計粒度標(biāo)志修改為第一統(tǒng)計粒度的下一級統(tǒng)計粒度(如統(tǒng)計粒度為分的下一級統(tǒng)計粒度為時)標(biāo)志,Column不變,value值為查詢出的數(shù)據(jù)的value值求和、或求平均值獲取到第二value值,用第一統(tǒng)計粒度的下一級統(tǒng)計粒度的起始時間作為timestamp,然后再插入Hbase中,當(dāng)本次統(tǒng)計粒度合并統(tǒng)計結(jié)束后,循環(huán)進(jìn)行下一個統(tǒng)計粒度的合并統(tǒng)計,直至合并至用戶指定的第二統(tǒng)計粒度。當(dāng)完成上述的統(tǒng)計后,Hbase中保存了各個統(tǒng)計粒度的統(tǒng)計數(shù)據(jù),同樣以上述的統(tǒng)計粒度為時間維度為例,有以小時為單位的數(shù)據(jù),有以天為單位的數(shù)據(jù)等,每份數(shù)據(jù)都是獨立完整的統(tǒng)計結(jié)果。這個時候,如果用戶需要查詢一段時間的統(tǒng)計總數(shù),做一個時間最大適配分割后,去查詢對應(yīng)統(tǒng)計粒度的數(shù)據(jù),如果用戶需要查詢報表數(shù)據(jù),比如查詢一年內(nèi)的月報,或者查詢一月內(nèi)的日報,就可以去查詢對應(yīng)統(tǒng)計粒度的數(shù)據(jù),大大提高了用戶查詢數(shù)據(jù)的速度。通過應(yīng)用本申請?zhí)岢龅囊环N基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計方法與系統(tǒng),根據(jù)接收到的數(shù)據(jù)的創(chuàng)建數(shù)據(jù)的存儲格式,該存儲格式中行鍵RowKey由統(tǒng)計粒度與數(shù)據(jù)的固定統(tǒng)計類型構(gòu)成,列Column由可配的統(tǒng)計類型名稱與統(tǒng)計值拼接構(gòu)成,根據(jù)第一統(tǒng)計粒度與存儲格式將數(shù)據(jù)存入Hbase,當(dāng)用戶指定的第二統(tǒng)計粒度與第一統(tǒng)計粒度不一致時,則根據(jù)第二統(tǒng)計粒度與存儲格式確定合并格式,并根據(jù)合并格式對存入到Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計,減少了數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴,并提高了數(shù)據(jù)統(tǒng)計結(jié)果的實時性。為了進(jìn)一步闡述本發(fā)明的技術(shù)思想,現(xiàn)結(jié)合具體的應(yīng)用場景,對本發(fā)明的技術(shù)方案進(jìn)行說明,本申請具體實施例提出了一種數(shù)據(jù)統(tǒng)計方法,本申請具體實施例的應(yīng)用場景以一批車輛收費站的數(shù)據(jù)為例,其中收費站代碼tollgate_code和車道編碼lane_index為上述實施例中的數(shù)據(jù)固定統(tǒng)計類型的幾種,其中車輛類型vehicle_type以及顏色plate_color等為上述實施例中數(shù)據(jù)統(tǒng)計類型中的可配置統(tǒng)計類型,其中在本具體實施例中,統(tǒng)計粒度為時間維度,且設(shè)定第一統(tǒng)計粒度(即最小統(tǒng)計粒度)為分,由此可見,本具體實施例只是本申請方案的具體實施方式的一種,而不是全部的實施例。本具體實施例的數(shù)據(jù)統(tǒng)計方法的原理是先將車輛數(shù)據(jù)進(jìn)行基于第一統(tǒng)計粒度(最小統(tǒng)計粒度)的數(shù)據(jù)統(tǒng)計,將車輛原始數(shù)據(jù)存入Hbase數(shù)據(jù)庫中,然后再根據(jù)用戶提出的第二統(tǒng)計粒度進(jìn)行第一粒度對應(yīng)的Hbase數(shù)據(jù)進(jìn)行合并統(tǒng)計。具體的包括以下步驟:A,原始數(shù)據(jù)統(tǒng)計,基于最小統(tǒng)計粒度來進(jìn)行數(shù)據(jù)統(tǒng)計;B,合并統(tǒng)計,基于最小統(tǒng)計粒度對應(yīng)的Hbase中數(shù)據(jù)進(jìn)行合并統(tǒng)計?,F(xiàn)針對上述步驟A進(jìn)行詳細(xì)的說明,為了達(dá)到實時性的目的,首先需要做一次從原始數(shù)據(jù)到最小粒度的統(tǒng)計,在接收到一批車輛原始數(shù)據(jù)時,則進(jìn)行基于第一統(tǒng)計粒度為分的原始數(shù)據(jù)統(tǒng)計,在此之前,需要先確定基于Hbase的數(shù)據(jù)存儲格式。如圖2所示,為本申請具體實施例提出的一種基于Hbase原始數(shù)據(jù)統(tǒng)計方法流程示意圖,該方法具體步驟如下:S201,將每條數(shù)據(jù)的時間的秒和毫秒置零;具體的,針對一批數(shù)據(jù)中,存在著多條數(shù)據(jù),(需要說明的是,該一批數(shù)據(jù)則相當(dāng)于上述實施例中的數(shù)據(jù),一批數(shù)據(jù)中的每條數(shù)據(jù)則相當(dāng)于上述實施例中的數(shù)據(jù)單元)在接收到原始的過車數(shù)據(jù)時,該原始過車數(shù)據(jù)需要將每條數(shù)據(jù)的時間字段的時間的秒和毫秒置零。S202,創(chuàng)建原始數(shù)據(jù)的存儲格式;根據(jù)時間、固定類型和可配置類型確定車輛原始數(shù)據(jù)的存儲格式;具體的,a)統(tǒng)計粒度為一分鐘,那么RowKey可設(shè)計為60000+”\t”+tollgate_code+”\t”+lane_index,其中60000為一分鐘對應(yīng)的標(biāo)記;b)tollgate_code和lane_index是固定的統(tǒng)計類型,那么將它們拼接在RowKey中;c)vehicle_type是可配置的統(tǒng)計類型,并且vehicle_type的值有1為小型車、2為中型車、3為大型車等,那么構(gòu)成的Column有:vehicle_type\t1、vehicle_type\t2、vehicle_type\t3等動態(tài)增加,plate_color與vehicle_type均為可配的統(tǒng)計類型,也拼接在Column中,在此不做贅述。D)時間戳為分鐘整數(shù),則由于每批原始數(shù)據(jù)不一定都是分布在某一分鐘內(nèi),也不可能是這一分鐘內(nèi)的所有數(shù)據(jù),所以這一批數(shù)據(jù)根據(jù)時間分組后存入HBase時,只是用這分鐘的時間作為時間戳timestamp的話,那么下一批數(shù)據(jù)如果也有這分鐘的數(shù)據(jù),就會覆蓋掉上一批同一分鐘的數(shù)據(jù),造成統(tǒng)計結(jié)果不準(zhǔn)確的問題。所以這種時間戳需要在已有的整分鐘時間點后面加上序列數(shù),從1到60000,不能超過60000,防止覆蓋下一分鐘的數(shù)據(jù)。用來區(qū)分不同批次的同一分鐘數(shù)據(jù)。具體的,本步驟的數(shù)據(jù)存儲格式如下表6所示:表6上述表6中,period為第一統(tǒng)計粒度一分鐘,table3下為Hbase中的RowKey,f下則為Column。S203,按照存儲格式將車輛原始數(shù)據(jù)存入Hbase;具體的,在完成上述步驟后,將統(tǒng)計后的數(shù)據(jù)按照上述存儲格式插入Hbase中,從而完成以一分鐘為最小統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計。以上主要對步驟A的原始數(shù)據(jù)統(tǒng)計進(jìn)行了描述,在完成上述以一分鐘為第一統(tǒng)計粒度的數(shù)據(jù)統(tǒng)計后,Hbase表中會存在統(tǒng)計粒度為一分鐘的數(shù)據(jù),如果用戶需要一年的數(shù)據(jù),去全部查詢一分鐘的數(shù)據(jù),那速度會是相當(dāng)?shù)穆?,還需要對最小的統(tǒng)計粒度的進(jìn)行合并統(tǒng)計,以下針對步驟B進(jìn)行詳細(xì)的描述。如圖3所示,為本申請具體實施例提出的一種基于Hbase的合并統(tǒng)計方法的流程示意圖,合并統(tǒng)計是在時間維度上根據(jù)配置的統(tǒng)計粒度從小到大將數(shù)據(jù)一層一層的匯總,那么,無論查詢多長時間的統(tǒng)計數(shù)據(jù),都能達(dá)到秒級響應(yīng)速度,,本申請具體實施例中若第二統(tǒng)計粒度為天,原始數(shù)據(jù)中的第一統(tǒng)計粒度為分鐘,則需要進(jìn)行以分鐘合并為小時,同樣以小時合并為天然后插入到Hbase中。該方法具體步驟如下:S301,配置的統(tǒng)計粒度從小到大排序;S302,循環(huán)從小到大取統(tǒng)計粒度;具體的,從配置的統(tǒng)計粒度從小到大依次做合并統(tǒng)計,每次合并統(tǒng)計都需要查詢上一次合并統(tǒng)計的結(jié)果,首先從分鐘到小時的合并統(tǒng)計,就是查詢出這一小時內(nèi)每分鐘的統(tǒng)計數(shù)據(jù),然后從小時到天的合并統(tǒng)計。S303,確定基于當(dāng)前統(tǒng)計粒度的合并格式;S304,根據(jù)合并格式對Hbase中存儲的車輛數(shù)據(jù)進(jìn)行合并統(tǒng)計;S305,判斷是否是最后一個統(tǒng)計粒度;具體的,判斷完成合并統(tǒng)計后的Hbase中數(shù)據(jù)的統(tǒng)計粒度是否為用戶指定的第二統(tǒng)計粒度(天),若不是,則執(zhí)行步驟S302,若是,則結(jié)束合并統(tǒng)計。以下針對上述步驟S304與步驟S304進(jìn)行詳細(xì)說明,以表5中的原始數(shù)據(jù)存儲格式為基礎(chǔ)進(jìn)行說明,在數(shù)據(jù)的存儲格式的基礎(chǔ)上確定合并格式,其中查詢一小時內(nèi)每分鐘的統(tǒng)計數(shù)據(jù)。然后將這些數(shù)據(jù)的RowKey中的粒度標(biāo)志修改為本次的粒度標(biāo)志(小時),Column不變,value值為查詢出的數(shù)據(jù)的value值求和(一小時內(nèi)車輛總數(shù))、求平均值等,用本次粒度的起始時間作為時間戳timestamp,將相應(yīng)的粒度標(biāo)志等再次插入Hbase表中。本次粒度的合并統(tǒng)計結(jié)束,循環(huán)進(jìn)行下一個粒度的合并統(tǒng)計。在完成上述步驟A和步驟B后,Hbase表中保存了各個統(tǒng)計粒度的統(tǒng)計數(shù)據(jù),比如各小時與各天等統(tǒng)計粒度的數(shù)據(jù),每份數(shù)據(jù)都是獨立完整的統(tǒng)計結(jié)果,這個時候,如果用戶需要查詢一段時間的統(tǒng)計總數(shù),不管這段時間是多么的長,一年還是幾年,做一個時間最大適配分割后,去查詢對應(yīng)粒度的數(shù)據(jù),記錄數(shù)不會太多,匯總后能以秒級的速度返回結(jié)果;如果用戶需要查詢報表數(shù)據(jù),比如查詢一年內(nèi)的月報,或者查詢一月內(nèi)的日報,就可以去查詢對應(yīng)統(tǒng)計粒度的數(shù)據(jù),由于做了數(shù)據(jù)匯總,記錄數(shù)有限,查詢速度極快。通過應(yīng)用本申請具體實施例提出的一種基于Hbase的數(shù)據(jù)統(tǒng)計方法,根據(jù)接收到的數(shù)據(jù)的創(chuàng)建數(shù)據(jù)的存儲格式,該存儲格式中行鍵RowKey由統(tǒng)計粒度與數(shù)據(jù)的固定統(tǒng)計類型構(gòu)成,列Column由可配的統(tǒng)計類型名稱與統(tǒng)計值拼接構(gòu)成,根據(jù)第一統(tǒng)計粒度與存儲格式將數(shù)據(jù)存入Hbase,當(dāng)用戶指定的第二統(tǒng)計粒度與第一統(tǒng)計粒度不一致時,則根據(jù)第二統(tǒng)計粒度與存儲格式確定合并格式,并根據(jù)合并格式對存入到Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計,減少了數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴,并提高了數(shù)據(jù)統(tǒng)計結(jié)果的實時性?;谂c上述相同的技術(shù)思路,本申請實施例還提出了一種基于Hbase數(shù)據(jù)庫的數(shù)據(jù)統(tǒng)計系統(tǒng),如附圖4所示為本申請實施例提出的一種基于Hbase的數(shù)據(jù)統(tǒng)計系統(tǒng)的結(jié)構(gòu)示意圖,所述系統(tǒng)包括:生成模塊41,創(chuàng)建接收到的數(shù)據(jù)的存儲格式,所述存儲格式中行鍵RowKey由第一統(tǒng)計粒度與所述數(shù)據(jù)的固定統(tǒng)計類型拼接構(gòu)成,所述存儲格式中列Column由所述數(shù)據(jù)的可配置統(tǒng)計類型的名稱和統(tǒng)計值拼接構(gòu)成,其中,所述第一統(tǒng)計粒度為所述數(shù)據(jù)對應(yīng)的最小統(tǒng)計粒度;存儲模塊42,根據(jù)所述第一統(tǒng)計粒度與所述存儲格式將所述數(shù)據(jù)存入所述Hbase;合并模塊43,當(dāng)用戶指定的第二統(tǒng)計粒度與所述第一統(tǒng)計粒度不一致時,則根據(jù)所述第二統(tǒng)計粒度與所述存儲格式確定合并格式,并根據(jù)所述合并格式對存入到所述Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計。優(yōu)選的,還包括:所述存儲格式還包括value值,所述value值包括所述數(shù)據(jù)統(tǒng)計結(jié)果的數(shù)量;確定所述數(shù)據(jù)中各數(shù)據(jù)單元所在的時間段,所述時間段與所述第一統(tǒng)計粒度對應(yīng);根據(jù)所述時間段為所述數(shù)據(jù)單元添加時間戳。優(yōu)選的,所述存儲模塊41具體用于:根據(jù)所述數(shù)據(jù)單元的時間戳將所述數(shù)據(jù)單元按照所述時間戳存入所述Hbase中對應(yīng)的時間段;對所述時間段存入的各數(shù)據(jù)單元依次添加序列號進(jìn)行區(qū)分。優(yōu)選的,所述合并格式具體為:將所述RowKey中的第一統(tǒng)計粒度修改為所述第二統(tǒng)計粒度,對所述value值進(jìn)行累加和求平均值后獲取第二value值。優(yōu)選的,所述合并模塊43具體用于:根據(jù)所述第二統(tǒng)計粒度對所述數(shù)據(jù)進(jìn)行分組,將所述第二統(tǒng)計粒度對應(yīng)的時間段的起始時間作為所述數(shù)據(jù)組的第二時間戳;根據(jù)所述第二統(tǒng)計粒度對應(yīng)的時間段與所述合并格式獲取與所述第二統(tǒng)計粒度對應(yīng)的第二數(shù)據(jù);根據(jù)所述第二時間戳將所述第二數(shù)據(jù)插入Hbase中。通過應(yīng)用本申請?zhí)岢龅募夹g(shù)方案,根據(jù)接收到的數(shù)據(jù)的創(chuàng)建數(shù)據(jù)的存儲格式,該存儲格式中行鍵RowKey由統(tǒng)計粒度與數(shù)據(jù)的固定統(tǒng)計類型構(gòu)成,列Column由可配的統(tǒng)計類型名稱與統(tǒng)計值拼接構(gòu)成,根據(jù)第一統(tǒng)計粒度與存儲格式將數(shù)據(jù)存入Hbase,當(dāng)用戶指定的第二統(tǒng)計粒度與第一統(tǒng)計粒度不一致時,則根據(jù)第二統(tǒng)計粒度與存儲格式確定合并格式,并根據(jù)合并格式對存入到Hbase中的數(shù)據(jù)進(jìn)行合并統(tǒng)計,減少了數(shù)據(jù)統(tǒng)計過程中對具體的統(tǒng)計粒度與統(tǒng)計類型的依賴,并提高了數(shù)據(jù)統(tǒng)計結(jié)果的實時性。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施場景所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施場景的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。本領(lǐng)域技術(shù)人員可以理解實施場景中的裝置中的模塊可以按照實施場景描述進(jìn)行分布于實施場景的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實施場景的一個或多個裝置中。上述實施場景的模塊可以合并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。上述本發(fā)明序號僅僅為了描述,不代表實施場景的優(yōu)劣。以上公開的僅為本發(fā)明的幾個具體實施場景,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3