數(shù)據(jù)加載及存儲設備、方法、以及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及數(shù)據(jù)接收、存儲及查詢領域,公開了一種數(shù)據(jù)加載及存儲設備、方法、以及數(shù)據(jù)加載、存儲及查詢系統(tǒng),其可顯著提高數(shù)據(jù)的存儲性能和查詢性能。所述數(shù)據(jù)加載及存儲設備,該設備包括:存儲單元,用于存儲RCfile格式文件;讀取單元,用于讀取數(shù)據(jù);以及數(shù)據(jù)加載單元,用于:根據(jù)元數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù);根據(jù)該索引字段數(shù)據(jù)、所述RCfile格式文件的路徑、以及該RCfile格式文件內將用于存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfile格式文件內。
【專利說明】
數(shù)據(jù)加載及存儲設備、方法、以及系統(tǒng)
技術領域
[0001 ]本發(fā)明涉及數(shù)據(jù)存儲及查詢領域,具體地,涉及一種數(shù)據(jù)加載及存儲設備、方法、 以及數(shù)據(jù)加載、存儲及查詢系統(tǒng)。
【背景技術】
[0002] 在互聯(lián)網(wǎng)和通信行業(yè),用戶時時刻刻都在產(chǎn)生海量的行為數(shù)據(jù)(比如上網(wǎng)記錄、通 話記錄等),而如何有效地存儲和查詢海量數(shù)據(jù)是目前面臨的一個十分重要的問題。
[0003] 現(xiàn)有技術中,解決數(shù)據(jù)存儲的方案是使用傳統(tǒng)關系型數(shù)據(jù)庫或者非關系型數(shù)據(jù)庫 對數(shù)據(jù)進行存儲,但它們在面對海量的數(shù)據(jù)進行存儲時,會存在以下不足之處:1、由于在數(shù) 據(jù)量與內存比為3:1時才能達到較好的查詢速度,因此,面對海量的數(shù)據(jù),若想得到較好的 查詢速度,則需要巨大的內存;2、由于數(shù)據(jù)的壓縮支持不足,因此,需要更多的存儲空間來 完成數(shù)據(jù)存儲。
【發(fā)明內容】
[0004] 本發(fā)明的目的是提供一種數(shù)據(jù)加載及存儲設備、方法、以及數(shù)據(jù)加載、存儲及查詢 系統(tǒng),其可顯著提高數(shù)據(jù)的存儲性能和查詢性能。
[0005] 為了實現(xiàn)上述目的,本發(fā)明提供一種數(shù)據(jù)加載及存儲設備,該設備包括:存儲單 元,用于存儲RCfi le格式文件;讀取單元,用于讀取數(shù)據(jù);以及數(shù)據(jù)加載單元,用于:根據(jù)元 數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù);根據(jù)該索引字段數(shù)據(jù)、所述RCfile格式文件的 路徑、以及該RCfile格式文件內將用于存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及將所述 數(shù)據(jù)及索引文件作為行記錄存入所述RCfi le格式文件內。
[0006] 優(yōu)選地,所述數(shù)據(jù)加載單元在將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfile 格式文件之前,將所述數(shù)據(jù)及索引文件作為行記錄存入臨時數(shù)據(jù)隊列內,并在該臨時數(shù)據(jù) 隊列內的行記錄的數(shù)量達到預設數(shù)量的情況下,將該臨時數(shù)據(jù)隊列內的行記錄存入所述 RCfile格式文件內。
[0007] 優(yōu)選地,所述讀取單元從Apache Kafka集群讀取所述數(shù)據(jù)。
[0008]優(yōu)選地,該數(shù)據(jù)加載及存儲設備為Apache Hadoop集群。
[0009] 優(yōu)選地,所述數(shù)據(jù)加載單元還用于將所述索引文件加載到Apache Solr集群的行 記錄索引文件內。
[0010] 相應地,本發(fā)明還提供一種數(shù)據(jù)加載及存儲方法,該方法包括:讀取數(shù)據(jù);根據(jù)元 數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù);根據(jù)該索引字段數(shù)據(jù)、RCfile格式文件的路 徑、以及該RCfile格式文件內將用于存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及將所述數(shù) 據(jù)及索引文件作為行記錄存入所述RCfi le格式文件內。
[0011]優(yōu)選地,在將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfi le格式文件之前,該 方法還包括:將所述數(shù)據(jù)及索引文件作為行記錄存入臨時數(shù)據(jù)隊列內,并在該臨時數(shù)據(jù)隊 列內的行記錄的數(shù)量達到預設數(shù)量的情況下,將該臨時數(shù)據(jù)隊列內的行記錄存入所述 RCfile格式文件內。
[0012] 優(yōu)選地,從Apache Kafka集群讀取所述數(shù)據(jù)。
[0013]優(yōu)選地,該數(shù)據(jù)加載及存儲方法由Apache Hadoop集群實施。
[0014] 優(yōu)選地,該方法還包括:將所述索引文件加載到Apache Solr集群的行記錄索引文 件內。
[0015] 相應地本發(fā)明還提供一種數(shù)據(jù)加載、存儲及查詢系統(tǒng),該系統(tǒng)包含:ApaChe Kafka 集群,用于從一個以上數(shù)據(jù)源接收數(shù)據(jù);上述數(shù)據(jù)加載及存儲設備;以及Apache Solr集群, 用于接收查詢條件,根據(jù)該查詢條件獲取相應數(shù)據(jù)的RCfile格式文件的路徑及行ID,并根 據(jù)該RCfile格式文件的路徑及行ID獲取相應的數(shù)據(jù)。
[0016] 本發(fā)明的上述數(shù)據(jù)加載、存儲及查詢系統(tǒng)利用了Apache Kafka集群統(tǒng)一、高通量、 且低等待的消息系統(tǒng)接收來自多個數(shù)據(jù)源的數(shù)據(jù),利用上述數(shù)據(jù)加載及存儲設備來對所述 Apache Kafka集群接收的數(shù)據(jù)進行存儲,并利用可提供高效全文檢索服務的Apache Solr 集群滿足數(shù)據(jù)查詢的需求,整體而言,上述數(shù)據(jù)加載、存儲及查詢系統(tǒng)的數(shù)據(jù)讀取速度及數(shù) 據(jù)查詢速度大幅提高。另外,由于采用RCfile格式文件來進行數(shù)據(jù)存儲,可支持1: 3到1:10 的壓縮比,大幅節(jié)省存儲空間。
[0017] 本發(fā)明的其它特征和優(yōu)點將在隨后的【具體實施方式】部分予以詳細說明。
【附圖說明】
[0018] 附圖是用來提供對本發(fā)明的進一步理解,并且構成說明書的一部分,與下面的具 體實施方式一起用于解釋本發(fā)明,但并不構成對本發(fā)明的限制。在附圖中:
[0019] 圖1為本發(fā)明提供的數(shù)據(jù)加載、存儲及查詢系統(tǒng)的結構示意圖;
[0020] 圖2為數(shù)據(jù)加載及存儲方法的流程圖;
[0021] 圖3為RCfile格式文件的數(shù)據(jù)目錄示意圖;
[0022] 圖4為數(shù)據(jù)加載及存儲方法的一【具體實施方式】的流程圖;以及 [0023]圖5為數(shù)據(jù)查詢方法的流程圖。
[0024]附圖標記說明
[0025] 100 Apache Kafka集群 200數(shù)據(jù)加載及存儲設備
[0026] 300 Apache Solr集群 210 存儲單元
[0027] 220讀取單元 230數(shù)據(jù)加載單元
【具體實施方式】
[0028] 以下結合附圖對本發(fā)明的【具體實施方式】進行詳細說明。應當理解的是,此處所描 述的【具體實施方式】僅用于說明和解釋本發(fā)明,并不用于限制本發(fā)明。
[0029] 圖1為本發(fā)明提供的數(shù)據(jù)加載、存儲及查詢系統(tǒng)的結構示意圖。如圖1所述,本發(fā)明 提供一種數(shù)據(jù)加載、存儲及查詢系統(tǒng),該系統(tǒng)包含:Apa Che Kafka集群100,用于從一個以上 數(shù)據(jù)源接收數(shù)據(jù);數(shù)據(jù)加載及存儲設備200(例如,Apache Hadoop集群);以及Apache Solr 集群300,用于接收查詢條件,根據(jù)該查詢條件獲取相應數(shù)據(jù)的RCfile格式文件的路徑及行 ID,并根據(jù)該RCfile格式文件的路徑及行ID獲取相應的數(shù)據(jù)。其中,所述數(shù)據(jù)加載及存儲設 備200包括:存儲單元210,用于存儲RCfile格式文件;讀取單元220,用于讀取數(shù)據(jù)(例如,從 上述Apache Kafka集群100讀取該Apache Kafka集群100所接收的數(shù)據(jù));以及數(shù)據(jù)加載單 元230,用于:根據(jù)元數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù);根據(jù)該索引字段數(shù)據(jù)、所 述RCfile格式文件的路徑(即,該RCfile格式文件在所述存儲單元210上的存儲路徑)、以及 該RCfile格式文件內將用于存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及將所述數(shù)據(jù)及索 引文件作為行記錄存入所述RCfile格式文件內。該數(shù)據(jù)加載及存儲設備200所執(zhí)行的數(shù)據(jù) 加載及存儲流程可參閱圖2。
[0030] 需要說明的是,上述元數(shù)據(jù)的定義可以是事先定義好的,其規(guī)定了所述數(shù)據(jù)各個 字段的含義。Apache Kafka集群100所接收的數(shù)據(jù)均可按照該元數(shù)據(jù)的定義而被生成,從而 本發(fā)明的數(shù)據(jù)加載、存儲及查詢系統(tǒng)可依據(jù)所述元數(shù)據(jù)的定義來從所讀取的數(shù)據(jù)內提取索 引字段數(shù)據(jù)。
[0031] 所述RCfile格式文件的數(shù)據(jù)目錄可如圖3所示。該RCfile格式文件可包含數(shù)據(jù)字 段"data"、數(shù)據(jù)名稱字段"datanamel"、表名字段"Tablenamel"、配置字段"conf"、臨時文件 存儲字段"temp"(可用于存儲索引文件)。所述數(shù)據(jù)加載及存儲設備200可將所讀取的數(shù)據(jù) 及該數(shù)據(jù)的索引文件作為行記錄存入所述RCfile格式文件內的相應目錄下。以下示出了創(chuàng) 建該RCfile格式文件的代碼:
[0032] Path testDir - new Jr*ath(System getPropertyC'test.data.dir", + '7mapred/testsmallfirstsplit,!); Path testFile = new Path(testDir, ''test_rcfile"); fs.deiete(testFile, true); Configuration cloneConf= new Conftguration(conf): RCFileOutputPormat.setColumnNumberCcloneGonfj by tes Aira>' I ength); cloneCuiif.setInt(RCFile.REOORD_INTERVAL_CONF_STR, i nterva 1 Record Cou n t); RCFile.Writer writer = new RCFile.Writer(fs, cloneConf, testFile, null, codec); List row.二 new AiTa3HMst<Object;>(); for (int c = 0; c < nurnColumnsi C++) { row.append(colu.mnNaraes.get(c)); } write. a dd.Ro w (row) writer.closeO
[0033] 上述系統(tǒng)充分利用了Apache Kafka集群、Apache Hadoop集群以及Apache Solr集 群各自在數(shù)據(jù)接收、數(shù)據(jù)存儲以及數(shù)據(jù)查詢方面的優(yōu)勢,使得本發(fā)明的系統(tǒng)的數(shù)據(jù)接收速 度、存儲速度及查詢速度大幅提高。另外,本發(fā)明可自動將Apache Kafka集群所接收的數(shù)據(jù) 存入RCf ile格式文件,該RCf ile格式文件可支持1:3到1:10的壓縮比,大幅節(jié)省存儲空間。
[0034] 圖4為數(shù)據(jù)加載及存儲方法的一【具體實施方式】的流程圖。如圖4所述,所述數(shù)據(jù)加 載單元230首先可啟動數(shù)據(jù)加載MapReduce任務,建立與Apache Kafka集群100的連接,從該 Apache Kafka集群100讀取數(shù)據(jù)。之后,可根據(jù)元數(shù)據(jù)定義,從所讀取的數(shù)據(jù)內提取索引字 段數(shù)據(jù),并根據(jù)該索引字段數(shù)據(jù)、RCfile格式文件的路徑、以及該RCfile格式文件內將用于 存儲所讀取的數(shù)據(jù)的行的ID,生成索引文件。之后,可將所讀取的數(shù)據(jù)及所生成的索引文件 作為行記錄存入臨時數(shù)據(jù)隊列內,并進一步判斷該臨時數(shù)據(jù)隊列內的行記錄的數(shù)量是否達 到預設數(shù)量。在所述臨時數(shù)據(jù)隊列內的行記錄的數(shù)量是否達到預設數(shù)量的情況下,可將臨 時數(shù)據(jù)隊列內的行記錄存入所述RCfile格式文件內,否則重復執(zhí)行上述數(shù)據(jù)讀取、索引字 段數(shù)據(jù)提取、索引文件生成的步驟。藉此,可減少對RCfile格式文件的寫入次數(shù),提高存儲 效率。
[0035]優(yōu)選地,所述數(shù)據(jù)加載單元230還可用于將所述索引文件加載到Apache Solr集群 300的行記錄索引文件內,藉此Apache Solr集群300在接收到查詢條件之后,可根據(jù)該查詢 條件直接從所述行記錄索引文件內進行檢索,而無需在所述數(shù)據(jù)加載及存儲設備200內的 索引文件內進行檢索,提高數(shù)據(jù)查詢效率。
[0036] 所述Apache Solr集群300所執(zhí)行的數(shù)據(jù)查詢方法可如圖5所示。Apache Solr集群 300可從終端接收查詢條件(例如,SQL語句),從該查新條件內解析出索引字段條件,之后根 據(jù)該索引字段條件從該Apache Solr集群300的行記錄索引文件內檢索符合該索引字段條 件的行記錄。在檢索到符合所述索引字段條件的行記錄的情況下,可根據(jù)該行記錄內的 RCfile格式文件的路徑及行ID,從所述Apache Hadoop集群200找到路徑下的RCfile格式文 件以及該RCfile格式文件內對應于所述行ID的行記錄,從該行記錄內獲取數(shù)據(jù),并將該數(shù) 據(jù)反饋給所述終端。在未檢索到符合所述索引字段條件的行記錄的情況下,可反饋指示未 檢索到符合所述索引字段條件的數(shù)據(jù)的指示至所述終端。
[0037]相應地,如圖2所示,本發(fā)明還提供一種數(shù)據(jù)加載及存儲方法,該方法包括:讀取數(shù) 據(jù);根據(jù)元數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù);根據(jù)該索引字段數(shù)據(jù)、RCfile格式 文件的路徑、以及該RCfile格式文件內將用于存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及 將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfi le格式文件內。
[0038]本發(fā)明提供的該方法可將數(shù)據(jù)自動存儲至RCfile格式文件內,由于采用RCfile格 式文件來進行數(shù)據(jù)存儲,可支持1:3到1:10的壓縮比,從而可大幅節(jié)省存儲空間。
[0039]如圖4所示,優(yōu)選地,在將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfile格式文 件之前,該方法還包括:將所述數(shù)據(jù)及索引文件作為行記錄存入臨時數(shù)據(jù)隊列內,并在該臨 時數(shù)據(jù)隊列內的行記錄的數(shù)量達到預設數(shù)量的情況下,將該臨時數(shù)據(jù)隊列內的行記錄存入 所述RCfi le格式文件內。藉此,可減少對RCfi le格式文件的寫入次數(shù),提高存儲效率。
[0040] 上述方法中所讀取的數(shù)據(jù)可來自所述Apache Kafka集群,該Apache Kafka集群接 收來自一個以上數(shù)據(jù)源的數(shù)據(jù)。
[0041]優(yōu)選地,本發(fā)明提供的所述數(shù)據(jù)加載及存儲方法可由Apache Hadoop集群實施。該 Apache Hadoop集群為分布式計算及分布式存儲海量數(shù)據(jù)的集群,其在存儲數(shù)據(jù)方面具有 速度快的優(yōu)勢。該Apache Hadoop集群內單機的存儲速度能夠達到6萬行記錄/秒,而Apache Hadoop集群的存儲速度能夠達到集群內單機數(shù)量*6萬行記錄/秒。
[0042] 優(yōu)選地,所述數(shù)據(jù)加載及存儲方法還包括:將所述索引文件加載到Apache Solr集 群的行記錄索引文件內。藉此,可使得Apache Solr集群在接收到查詢條件之后,根據(jù)該查 詢條件直接從所述行記錄索引文件內進行檢索,而無需在所述數(shù)據(jù)加載及存儲設備200內 的索引文件內進行檢索,提高數(shù)據(jù)查詢效率。
[0043] 本發(fā)明的上述數(shù)據(jù)加載、存儲及查詢系統(tǒng)利用了Apache Kafka集群統(tǒng)一、高通量、 且低等待的消息系統(tǒng)接收來自多個數(shù)據(jù)源的數(shù)據(jù),利用可通過分布式計算及分布式存儲海 量數(shù)據(jù)的Apache Hadoop集群來對所述Apache Kafka集群接收的數(shù)據(jù)進行存儲,并利用可 提供高效全文檢索服務的Apache Solr集群滿足數(shù)據(jù)查詢的需求,整體而言,上述數(shù)據(jù)加 載、存儲及查詢系統(tǒng)的數(shù)據(jù)讀取速度、數(shù)據(jù)存儲速度及數(shù)據(jù)查詢速度大幅提高。就存儲速度 而言,Apache Hadoop集群內單機的存儲速度能夠達到6萬行記錄/秒,而Apache Hadoop集 群的存儲速度能夠達到集群內單機數(shù)量*6萬行記錄/秒。另外,由于采用RCfile格式文件來 進行數(shù)據(jù)存儲,可支持1:3到1:10的壓縮比,大幅節(jié)省存儲空間。
[0044] 以上結合附圖詳細描述了本發(fā)明的優(yōu)選實施方式,但是,本發(fā)明并不限于上述實 施方式中的具體細節(jié),在本發(fā)明的技術構思范圍內,可以對本發(fā)明的技術方案進行多種簡 單變型,這些簡單變型均屬于本發(fā)明的保護范圍。
[0045] 另外需要說明的是,在上述【具體實施方式】中所描述的各個具體技術特征,在不矛 盾的情況下,可以通過任何合適的方式進行組合。為了避免不必要的重復,本發(fā)明對各種可 能的組合方式不再另行說明。
[0046] 此外,本發(fā)明的各種不同的實施方式之間也可以進行任意組合,只要其不違背本 發(fā)明的思想,其同樣應當視為本發(fā)明所公開的內容。
【主權項】
1. 一種數(shù)據(jù)加載及存儲設備,其特征在于,該設備包括: 存儲單元,用于存儲RCf i Ie格式文件; 讀取單元,用于讀取數(shù)據(jù);以及 數(shù)據(jù)加載單元,用于: 根據(jù)元數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù); 根據(jù)該索引字段數(shù)據(jù)、所述RCfile格式文件的路徑、以及該RCfile格式文件內將用于 存儲所述數(shù)據(jù)的行的ID,生成索引文件;以及 將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfile格式文件內。2. 根據(jù)權利要求1所述的數(shù)據(jù)加載及存儲設備,其特征在于,所述數(shù)據(jù)加載單元在將所 述數(shù)據(jù)及索引文件作為行記錄存入所述RCf i Ie格式文件之前,將所述數(shù)據(jù)及索引文件作為 行記錄存入臨時數(shù)據(jù)隊列內,并在該臨時數(shù)據(jù)隊列內的行記錄的數(shù)量達到預設數(shù)量的情況 下,將該臨時數(shù)據(jù)隊列內的行記錄存入所述RCfile格式文件內。3. 根據(jù)權利要求1所述的數(shù)據(jù)加載及存儲設備,其特征在于,所述讀取單元從Apache Kaf ka集群讀取所述數(shù)據(jù)。4. 根據(jù)權利要求1所述的數(shù)據(jù)加載及存儲設備,其特征在于,該數(shù)據(jù)加載及存儲設備為 Apache Hadoop集群。5. 根據(jù)權利要求1-4中任一項權利要求所述的數(shù)據(jù)加載及存儲設備,其特征在于,所述 數(shù)據(jù)加載單元還用于將所述索引文件加載到Apache Solr集群的行記錄索引文件內。6. -種數(shù)據(jù)加載及存儲方法,其特征在于,該方法包括: 讀取數(shù)據(jù); 根據(jù)元數(shù)據(jù)定義,從所述數(shù)據(jù)內讀取索引字段數(shù)據(jù); 根據(jù)該索引字段數(shù)據(jù)、RCfile格式文件的路徑、以及該RCfile格式文件內將用于存儲 所述數(shù)據(jù)的行的ID,生成索引文件;以及 將所述數(shù)據(jù)及索引文件作為行記錄存入所述RCfile格式文件內。7. 根據(jù)權利要求6所述的數(shù)據(jù)加載及存儲方法,其特征在于,在將所述數(shù)據(jù)及索引文件 作為行記錄存入所述RCf i Ie格式文件之前,該方法還包括:將所述數(shù)據(jù)及索引文件作為行 記錄存入臨時數(shù)據(jù)隊列內,并在該臨時數(shù)據(jù)隊列內的行記錄的數(shù)量達到預設數(shù)量的情況 下,將該臨時數(shù)據(jù)隊列內的行記錄存入所述RCfile格式文件內。8. 根據(jù)權利要求6所述的數(shù)據(jù)加載及存儲方法,其特征在于,從Apache Kafka集群讀取 所述數(shù)據(jù)。9. 根據(jù)權利要求6所述的數(shù)據(jù)加載及存儲方法,其特征在于,該數(shù)據(jù)加載及存儲方法由 Apache Hadoop集群實施。10. 根據(jù)權利要求6-9中任一項權利要求所述的數(shù)據(jù)加載及存儲方法,其特征在于,該 方法還包括: 將所述索引文件加載到Apache So Ir集群的行記錄索引文件內。11. 一種數(shù)據(jù)加載、存儲及查詢系統(tǒng),該系統(tǒng)包含: Apache Kafka集群,用于從一個以上數(shù)據(jù)源接收數(shù)據(jù); 根據(jù)權利要求1-5中任一項權利要求所述的數(shù)據(jù)加載及存儲設備;以及 Apache Solr集群,用于接收查詢條件,根據(jù)該查詢條件獲取相應數(shù)據(jù)的RCfile格式文 件的路徑及行ID,并根據(jù)該RCfile格式文件的路徑及行ID獲取相應的數(shù)據(jù)。
【文檔編號】G06F17/30GK105893435SQ201510920732
【公開日】2016年8月24日
【申請日】2015年12月11日
【發(fā)明人】李鋒標
【申請人】樂視網(wǎng)信息技術(北京)股份有限公司