數(shù)據(jù)處理方法和數(shù)據(jù)處理裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)處理方法和數(shù)據(jù)處理裝置。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)發(fā)展,數(shù)據(jù)統(tǒng)計(jì)已經(jīng)越來(lái)越重要。例如,某個(gè)公司投放廣告之后需要馬 上知道在當(dāng)前時(shí)刻根據(jù)某個(gè)條件或者某幾個(gè)條件統(tǒng)計(jì)得到的關(guān)于該廣告的數(shù)據(jù),例如廣告 的點(diǎn)擊率等。下面以日志數(shù)據(jù)為例進(jìn)行描述。對(duì)于數(shù)據(jù)量不太大的日志數(shù)據(jù)來(lái)說(shuō),通過(guò)關(guān)系 型數(shù)據(jù)庫(kù)管理系統(tǒng)(mysql或sqlserver)、文檔型數(shù)據(jù)庫(kù)(mongo)等數(shù)據(jù)庫(kù)完全可以滿(mǎn)足對(duì) 數(shù)據(jù)的查詢(xún)和統(tǒng)計(jì)需求。但是對(duì)于數(shù)據(jù)量較大的日志數(shù)據(jù)來(lái)說(shuō),如果希望實(shí)時(shí)對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)并得出結(jié)果是非常困難的。例如,對(duì)于單表數(shù)據(jù)超過(guò)1億條的情況,如果希望按每1秒 鐘,每1分鐘,每5分鐘,每15分鐘,每1小時(shí),每1天等等這樣的時(shí)間量度進(jìn)行查詢(xún)和統(tǒng)計(jì)并得 出需要的報(bào)表數(shù)據(jù),采用mysql,mongo,sqlserver之類(lèi)的數(shù)據(jù)庫(kù)是很難滿(mǎn)足需求的。
【發(fā)明內(nèi)容】
[0003] 鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種至少部分地解決上述問(wèn)題的數(shù)據(jù)處理 方法和數(shù)據(jù)處理裝置。
[0004] 依據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)處理方法。該數(shù)據(jù)處理方法包括:從消息 隊(duì)列中消費(fèi)日志數(shù)據(jù)并將所消費(fèi)的日志數(shù)據(jù)存儲(chǔ)在臨時(shí)緩存中,其中,消息隊(duì)列用于存儲(chǔ) 來(lái)自客戶(hù)端的日志數(shù)據(jù);對(duì)存儲(chǔ)在臨時(shí)緩存中的日志數(shù)據(jù)中的至少一部分進(jìn)行整理,以獲 得經(jīng)整理的日志數(shù)據(jù);以及將經(jīng)整理的日志數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中。
[0005] 依據(jù)本發(fā)明的另一個(gè)方面,提供了一種數(shù)據(jù)處理裝置。該數(shù)據(jù)處理裝置包括消費(fèi) 單元、整理單元和存儲(chǔ)單元。消費(fèi)單元用于從消息隊(duì)列中消費(fèi)日志數(shù)據(jù)并將所消費(fèi)的日志 數(shù)據(jù)存儲(chǔ)在臨時(shí)緩存中,其中,消息隊(duì)列用于存儲(chǔ)來(lái)自客戶(hù)端的日志數(shù)據(jù)。整理單元用于對(duì) 存儲(chǔ)在臨時(shí)緩存中的日志數(shù)據(jù)中的至少一部分進(jìn)行整理,以獲得經(jīng)整理的日志數(shù)據(jù)。存儲(chǔ) 單元用于將經(jīng)整理的日志數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中。
[0006] 根據(jù)本發(fā)明提供的數(shù)據(jù)處理方法和數(shù)據(jù)處理裝置,由于在將日志數(shù)據(jù)存儲(chǔ)在文件 系統(tǒng)之前,先對(duì)日志數(shù)據(jù)進(jìn)行了整理,也就是對(duì)日志數(shù)據(jù)進(jìn)行邊整理邊存儲(chǔ),因此文件系統(tǒng) 中所存儲(chǔ)的是已整理好的日志數(shù)據(jù)。這樣,在對(duì)日志數(shù)據(jù)進(jìn)行查詢(xún)時(shí),可以從部分已整理好 的日志數(shù)據(jù)中查詢(xún),因此可以節(jié)約數(shù)據(jù)查詢(xún)時(shí)間,提高對(duì)查詢(xún)請(qǐng)求的響應(yīng)速度,從而可以實(shí) 現(xiàn)針對(duì)大數(shù)據(jù)的實(shí)時(shí)查詢(xún)。
[0007]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠 更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【附圖說(shuō)明】
[0008]通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明 的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0009] 圖1示出根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)處理方法的流程示意圖;
[0010] 圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例的處理日志數(shù)據(jù)的工作流示意圖;
[0011] 圖3示出根據(jù)本發(fā)明另一個(gè)實(shí)施例的數(shù)據(jù)處理方法的流程示意圖;
[0012] 圖4示出根據(jù)本發(fā)明另一個(gè)實(shí)施例的數(shù)據(jù)處理方法的流程示意圖;以及
[0013] 圖5示出根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)處理裝置的示意性框圖。
【具體實(shí)施方式】
[0014] 下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi) 的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例 所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍 完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0015] 根據(jù)本發(fā)明的一個(gè)方面,提供一種數(shù)據(jù)處理方法。圖1示出根據(jù)本發(fā)明一個(gè)實(shí)施例 的數(shù)據(jù)處理方法100的流程示意圖。
[0016] 如圖1所示,數(shù)據(jù)處理方法100包括以下步驟。
[0017] 在步驟S110,從消息隊(duì)列中消費(fèi)日志數(shù)據(jù)并將所消費(fèi)的日志數(shù)據(jù)存儲(chǔ)在臨時(shí)緩存 中,其中,消息隊(duì)列用于存儲(chǔ)來(lái)自客戶(hù)端的日志數(shù)據(jù)。
[0018] 日志數(shù)據(jù)(log data)就是一條日志消息的內(nèi)在含義。換句話(huà)說(shuō),日志數(shù)據(jù)就是一 條日志消息里用來(lái)說(shuō)明為什么生成日志消息的信息。例如,Web服務(wù)器一般會(huì)在用戶(hù)訪(fǎng)問(wèn) Web頁(yè)面請(qǐng)求資源(圖片、文件等等)的時(shí)候記錄日志,生成日志數(shù)據(jù)。如果用戶(hù)訪(fǎng)問(wèn)的頁(yè)面 需要通過(guò)認(rèn)證,日志消息將會(huì)包含用戶(hù)名。在Web日志中,每條日志通常代表著用戶(hù)的一次 訪(fǎng)問(wèn)行為。舉例來(lái)說(shuō),日志數(shù)據(jù)可以包含訪(fǎng)問(wèn)時(shí)間、用戶(hù)名、用戶(hù)年齡、訪(fǎng)問(wèn)網(wǎng)頁(yè)的統(tǒng)一資源 定位符(ur 1)、訪(fǎng)問(wèn)次數(shù)等信息。
[0019] 日志數(shù)據(jù)包含了大量產(chǎn)品分析人員會(huì)感興趣的信息。舉例來(lái)說(shuō),可以從日志數(shù)據(jù) 中獲取網(wǎng)站每類(lèi)頁(yè)面的PV值(PageView,頁(yè)面訪(fǎng)問(wèn)量)、獨(dú)立IP(互聯(lián)網(wǎng)協(xié)議地址)數(shù)等。另 外,可以從日志數(shù)據(jù)中計(jì)算得出用戶(hù)所檢索的關(guān)鍵詞排行榜、用戶(hù)停留時(shí)間最高的頁(yè)面等。 更進(jìn)一步地,還可以利用日志數(shù)據(jù)構(gòu)建廣告點(diǎn)擊模型、分析用戶(hù)行為特征等等。
[0020] 消息隊(duì)列是在消息的傳輸過(guò)程中保存消息的容器。消息隊(duì)列的主要目的是提供路 由并保證消息的傳遞。如果發(fā)送消息時(shí)接收者不可用,消息隊(duì)列會(huì)保留消息,直到可以成功 地傳遞它。這里的消息就是日志數(shù)據(jù)。
[0021] 可選地,消息隊(duì)列可以存儲(chǔ)在集群服務(wù)器中。具體地,可以搭建zookeeper和卡夫 卡(kafka)系統(tǒng)來(lái)配置高可用消息隊(duì)列集群,也就是說(shuō),可以利用kafka集群服務(wù)器來(lái)存儲(chǔ) 消息隊(duì)列。
[0022]在客戶(hù)端上運(yùn)行的應(yīng)用程序(例如web應(yīng)用程序)可以將生成的日志數(shù)據(jù)以JS0N格 式寫(xiě)入到消息隊(duì)列中。舉例來(lái)說(shuō),客戶(hù)端上的web應(yīng)用程序在用戶(hù)希望查看微博話(huà)題時(shí)向微 博服務(wù)器發(fā)出請(qǐng)求,微博服務(wù)器根據(jù)請(qǐng)求返回該微博話(huà)題的相關(guān)數(shù)據(jù)。此后,web應(yīng)用程序 生成關(guān)于用戶(hù)查看了該微博話(huà)題的日志數(shù)據(jù)并將日志數(shù)據(jù)以JS0N格式寫(xiě)入到消息隊(duì)列中。
[0023]隨后,可以從消息隊(duì)列中消費(fèi)日志數(shù)據(jù)。例如,可以利用德魯伊(druid)數(shù)據(jù)庫(kù)中 的實(shí)時(shí)(realtime)節(jié)點(diǎn)來(lái)消費(fèi)日志數(shù)據(jù)。實(shí)時(shí)節(jié)點(diǎn)可以將所消費(fèi)的日志數(shù)據(jù)存儲(chǔ)在實(shí)時(shí)節(jié) 點(diǎn)的臨時(shí)緩存中。
[0024]圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例的處理日志數(shù)據(jù)的工作流示意圖。為了描述方便, 下文將結(jié)合圖2來(lái)描述數(shù)據(jù)處理方法的操作過(guò)程。然而,可以理解的是,圖2所示的工作流僅 是示例而非對(duì)本發(fā)明的限制,本發(fā)明可以具有其他合理的實(shí)現(xiàn)方式。如圖2所示,日志數(shù)據(jù) 210寫(xiě)入了消息隊(duì)列220。隨后,druid數(shù)據(jù)庫(kù)的實(shí)時(shí)節(jié)點(diǎn)從消息隊(duì)列220中消費(fèi)日志數(shù)據(jù)并 將所消費(fèi)的日志數(shù)據(jù)存儲(chǔ)在實(shí)時(shí)節(jié)點(diǎn)的臨時(shí)緩存(未示出)中。
[0025]在步驟S120,對(duì)存儲(chǔ)在臨時(shí)緩存中的日志數(shù)據(jù)中的至少一部分進(jìn)行整理,以獲得 經(jīng)整理的日志數(shù)據(jù)。
[0026] druid數(shù)據(jù)庫(kù)的實(shí)時(shí)節(jié)點(diǎn)230在將日志數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)(l〇Calst〇rag e)260中 之前,可以對(duì)日志數(shù)據(jù)進(jìn)行一些處理。例如,實(shí)時(shí)節(jié)點(diǎn)230可以周期性地啟動(dòng)后臺(tái)的計(jì)劃任 務(wù)搜索與日志數(shù)據(jù)相關(guān)的持久化索引,后臺(tái)計(jì)劃任務(wù)將這些持久化索引合并到一起并生成 不可變的數(shù)據(jù)塊。這些數(shù)據(jù)塊包含了一段時(shí)間內(nèi)的所有已經(jīng)由實(shí)時(shí)節(jié)點(diǎn)消費(fèi)的數(shù)據(jù),這些 數(shù)據(jù)塊可以稱(chēng)為"Segment"。隨后,實(shí)時(shí)節(jié)點(diǎn)可以將這些數(shù)據(jù)塊傳送到一個(gè)永久持久化的備 份存儲(chǔ)中,即本文所描述的文件系統(tǒng)。消費(fèi)、持久化、合并和傳送這些階段都是流動(dòng)的,并且 在這些處理階段中不會(huì)有任何數(shù)據(jù)的丟失。
[0027]在步驟S130,將經(jīng)整理的日志數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中。
[0028]文件系統(tǒng)260可以采用任何合適的文件存儲(chǔ)系統(tǒng)實(shí)現(xiàn),例如hadoop分布式文件系 統(tǒng)(HDFS)等,本發(fā)明不對(duì)此進(jìn)行限制??梢杂蒬ruid數(shù)據(jù)庫(kù)的實(shí)時(shí)節(jié)點(diǎn)將經(jīng)整理的日志數(shù)據(jù) 存儲(chǔ)在文件系統(tǒng)260中。在現(xiàn)有技術(shù)中,通常直接將未經(jīng)處理的日志數(shù)據(jù)存儲(chǔ)在mysql等數(shù) 據(jù)庫(kù)中。這樣,在后期對(duì)數(shù)據(jù)進(jìn)行查詢(xún)時(shí),往往首先將未經(jīng)整理的日志數(shù)據(jù)提取出來(lái),再進(jìn) 行統(tǒng)計(jì)分析。這種情況下,如果數(shù)據(jù)量較大,則需要花費(fèi)較長(zhǎng)的時(shí)間進(jìn)行統(tǒng)計(jì)運(yùn)算,導(dǎo)致查 詢(xún)結(jié)果的反饋時(shí)間很長(zhǎng)