本申請涉及計算機領(lǐng)域,尤其涉及一種數(shù)據(jù)文件的存儲和查詢技術(shù)。
背景技術(shù):
::現(xiàn)有的分布式存儲方案中,對于較大的數(shù)據(jù)文件進行存儲時,其存儲及維護的復(fù)雜度較高。以Hbase(HadoopDatabase,Hadoop數(shù)據(jù)庫)為例,現(xiàn)有的存儲方案中,一般將數(shù)據(jù)文件本身保存于獨立的存儲區(qū)域中,同時在Hbase的數(shù)據(jù)表(table)中將這些數(shù)據(jù)文件的地址信息作為某一單元(cell)的值(Value)進行保存。用戶在查詢這些數(shù)據(jù)文件時,首先在數(shù)據(jù)表中通過行鍵(Rowkey)、列(Column)以及時間戳(Timestamp)來找到特定的單元,然后根據(jù)單元內(nèi)的值表示的地址信息由存儲區(qū)域中找到數(shù)據(jù)文件。由于在存儲數(shù)據(jù)時,需要分別向存儲區(qū)域內(nèi)寫入數(shù)據(jù)文件以及向數(shù)據(jù)表中寫入數(shù)據(jù)文件在存儲區(qū)域中的地址信息,使得數(shù)據(jù)庫的復(fù)雜性較高。由于兩者的寫入過程會存在一定的先后順序,若在寫入過程中,發(fā)生失電等狀況,可能導(dǎo)致數(shù)據(jù)文件已經(jīng)寫入存儲區(qū)域而數(shù)據(jù)表中還未寫入地址信息,因此數(shù)據(jù)的一致性無法得到保證。申請內(nèi)容本申請的一個目的是提供一種數(shù)據(jù)文件的存儲和查詢方法及設(shè)備,以解決現(xiàn)有技術(shù)中數(shù)據(jù)一致性無法保證的問題。為實現(xiàn)上述目的,本申請?zhí)峁┝艘环N數(shù)據(jù)文件的存儲方法,所述方法包括:創(chuàng)建數(shù)據(jù)文件的元信息,所述元信息包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置;將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中;根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引。進一步地,將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述 數(shù)據(jù)表中第一列簇和第二列簇的同一行中之前,包括:對所述元信息進行排序;將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,包括:根據(jù)所述排序?qū)⑺鰯?shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中。進一步地,所述元信息包括所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的行鍵、列和時間戳。進一步地,包括:依次根據(jù)所述元信息的行鍵、列和時間戳對所述元信息進行排序。進一步地,根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引,包括:根據(jù)所述元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的倒排索引。進一步地,所述數(shù)據(jù)文件包括多個子文件;創(chuàng)建數(shù)據(jù)文件的元信息,包括:創(chuàng)建數(shù)據(jù)文件的各個子文件對應(yīng)的元信息;將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,包括:將包含所述子文件的所述數(shù)據(jù)文件寫入所述數(shù)據(jù)表的第一列簇中,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。進一步地,將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之后,還包括:當(dāng)所述第二列簇的數(shù)據(jù)量達到設(shè)定閾值后,將所述數(shù)據(jù)表分裂為多個數(shù)據(jù)域,分別保存于多個服務(wù)器中。本申請還提供了一種數(shù)據(jù)文件的查詢方法,用于對采用前述存儲方法存儲的數(shù)據(jù)文件進行查詢,其中,所述方法包括:獲取查詢條件,并在所述第二列簇中查找符合所述查詢條件的元信息;根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件。進一步地,當(dāng)所述元信息包括所述數(shù)據(jù)文件中的行鍵、列和時間戳,所述查詢條件至少包括所述元信息中行鍵的全部或者部分信息。進一步地,當(dāng)所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息為分別根據(jù)元信息的排序?qū)懭胨鰯?shù)據(jù)表中時,在所述第二列簇中查找符合所述查詢條件的元信息,包括:根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述元信息依次根據(jù)所述元信息的行鍵、列和時間戳進行排序時,根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息,包括:根據(jù)所述元信息的行鍵、列和時間戳的依次排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述查詢條件至少包含所述元信息中行鍵的起始部分的信息時,根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息,包括:根據(jù)所述排序以及所述元信息中行鍵的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述索引為倒排索引時,根據(jù)所述索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置,包括:根據(jù)所述倒排索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置。進一步地,當(dāng)所述數(shù)據(jù)表包含多個保存于不同服務(wù)器中的數(shù)據(jù)域時,根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置,包括:根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表中的數(shù)據(jù)域的第一列簇中的存儲位置。進一步地,當(dāng)所述數(shù)據(jù)文件包括多個子文件,所述第一列簇中保存有包含所述子文件的所述數(shù)據(jù)文件,所述第二列簇的同一行中保存有所述子文件的元信息時,根據(jù)所述索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置,包括:根據(jù)所述索引確定所述符合所述查詢條件的元信息所對應(yīng)的子文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件,包括:由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件的子文件。根據(jù)本申請的另一方面,還提供了一種數(shù)據(jù)文件的存儲設(shè)備,其中,該設(shè)備包括:第一裝置,用于創(chuàng)建數(shù)據(jù)文件的元信息,所述元信息包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置;第二裝置,用于將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中;第三裝置,用于根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引。進一步地,該設(shè)備還包括:第四裝置,用于在將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之前,對所述元信息進行排序;所述第二裝置,用于根據(jù)所述排序?qū)⑺鰯?shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中。進一步地,所述元信息包括所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的行鍵、列和時間戳。進一步地,所述第一裝置,用于依次根據(jù)所述元信息的行鍵、列和時間戳對所述元信息進行排序。進一步地,所述第三裝置,用于根據(jù)所述元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的倒排索引。進一步地,所述數(shù)據(jù)文件包括多個子文件;所述第一裝置,用于創(chuàng)建數(shù)據(jù)文件的各個子文件對應(yīng)的元信息;所述第二裝置,用于將包含所述子文件的所述數(shù)據(jù)文件寫入所述數(shù)據(jù)表的第一列簇中,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。進一步地,該設(shè)備還包括:第五裝置,用于在將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之后,當(dāng)所述第二列簇的數(shù)據(jù)量達到設(shè)定閾值后,將所述數(shù)據(jù)表分裂為多個數(shù)據(jù)域,分別保存于多個服務(wù)器中。本申請還提供了一種數(shù)據(jù)文件的查詢設(shè)備,用于對采用前述存儲設(shè)備存儲的數(shù)據(jù)文件進行查詢,其中,包括:第六裝置,用于獲取查詢條件,并在所述第二列簇中查找符合所述查詢條件的元信息;第七裝置,用于根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;第八裝置,用于由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件。進一步地,當(dāng)所述元信息包括所述數(shù)據(jù)文件中的行鍵、列和時間戳,所述第六裝置獲取的查詢條件至少包括所述元信息中行鍵的全部或者部分信息。進一步地,當(dāng)所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息為分別根據(jù)元信息的排序?qū)懭胨鰯?shù)據(jù)表中時,所述第六裝置,用于獲取查詢條件,根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述元信息依次根據(jù)所述元信息的行鍵、列和時間戳進行排序時,所述第六裝置,用于獲取查詢條件,根據(jù)所述元信息的行鍵、列和時 間戳的依次排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述查詢條件至少包含所述元信息中行鍵的起始部分的信息時,所述第六裝置,用于獲取所述查詢條件,根據(jù)所述排序以及所述元信息中行鍵的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述索引為倒排索引時,所述第七裝置,用于根據(jù)所述倒排索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置。進一步地,當(dāng)所述數(shù)據(jù)表包含多個保存于不同服務(wù)器中的數(shù)據(jù)域時,所述第七裝置,用于根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表中的數(shù)據(jù)域的第一列簇中的存儲位置。進一步地,當(dāng)所述數(shù)據(jù)文件包括多個子文件,所述第一列簇中保存有包含所述子文件的所述數(shù)據(jù)文件,所述第二列簇的同一行中保存有所述子文件的元信息時,所述第七裝置,用于根據(jù)所述索引確定所述符合所述查詢條件的元信息所對應(yīng)的子文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;所述第八裝置,用于由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件的子文件。與現(xiàn)有技術(shù)相比,由于在存儲數(shù)據(jù)文件時會創(chuàng)建包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置的元信息,并且在寫入數(shù)據(jù)表時將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,由于在列式數(shù)據(jù)庫中對于數(shù)據(jù)表中同一行的操作為原子操作,無論對行進行訪問的事務(wù)有多少列,對該行的數(shù)據(jù)的更新都會是原子操作,即全部成功或者全部失敗,不會存在部分成功的情況,因此不會存在數(shù)據(jù)文件寫入成功而元信息寫入不成功的情況,從而保證了數(shù)據(jù)的一致性。并且由于數(shù)據(jù)文件以及該數(shù)據(jù)文件對應(yīng)的元信息在一張數(shù)據(jù)表中,后續(xù)進行維護時僅需要對一張數(shù)據(jù)表進行相關(guān)操作即可,降低了數(shù)據(jù)庫的復(fù)雜度和 維護難度。在查詢時,由于數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,若在第一列簇中查詢需要的數(shù)據(jù)文件,往往需要處理較大的數(shù)據(jù)量。本實施例提供的查詢方法中,首先根據(jù)查詢條件查詢數(shù)據(jù)文件對應(yīng)的元信息,在查找到元信息后,在根據(jù)預(yù)先建立的索引確定數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置,然后在由保存數(shù)據(jù)文件的第一列簇中的對應(yīng)存儲位置獲取數(shù)據(jù)文件,由于元信息數(shù)據(jù)量相對較小,因此處理的速度相對于直接查詢數(shù)據(jù)文件更加快速。附圖說明通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:圖1為本申請實施例提供的數(shù)據(jù)文件的存儲方法的流程圖;圖2為本申請實施例提供的數(shù)據(jù)文件的查詢方法的流程圖;圖3為本申請實施例提供的第一種數(shù)據(jù)文件的存儲設(shè)備的結(jié)構(gòu)示意圖;圖4為本申請實施例提供的第二種數(shù)據(jù)文件的存儲設(shè)備的結(jié)構(gòu)示意圖;圖5為本申請實施例提供的第三種數(shù)據(jù)文件的存儲設(shè)備的結(jié)構(gòu)示意圖;圖6為本申請實施例提供的一種數(shù)據(jù)文件的查詢設(shè)備的結(jié)構(gòu)示意圖;附圖中相同或相似的附圖標記代表相同或相似的部件。具體實施方式下面結(jié)合附圖對本申請作進一步詳細描述。在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。圖1示出了本申請實施例提供的一種數(shù)據(jù)文件的存儲方法的流程圖,該方法具體包括以下步驟:步驟S101,創(chuàng)建數(shù)據(jù)文件的元信息,所述元信息包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置;步驟S102,將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中;步驟S103,根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引。在此,本領(lǐng)域技術(shù)人員應(yīng)能理解,所述第一列簇及第二列簇分別用來指代用于寫入所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息的兩個列簇(ColumnFamily),所述第一、第二僅用于區(qū)分兩個列簇,并不表示對兩個列簇在數(shù)據(jù)表中位置的限定。由于在存儲數(shù)據(jù)文件時會創(chuàng)建包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置的元信息,并且在寫入數(shù)據(jù)表時將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,由于在列式數(shù)據(jù)庫中對于數(shù)據(jù)表中同一行的操作為原子操作,無論對行進行訪問的事務(wù)有多少列,對該行的數(shù)據(jù)的更新都會是原子操作,即全部成功或者全 部失敗,不會存在部分成功的情況,因此不會存在數(shù)據(jù)文件寫入成功而元信息寫入不成功的情況,從而保證了數(shù)據(jù)的一致性。并且由于數(shù)據(jù)文件以及該數(shù)據(jù)文件對應(yīng)的元信息在一張數(shù)據(jù)表中,后續(xù)進行維護時僅需要對一張數(shù)據(jù)表進行相關(guān)操作即可,降低了數(shù)據(jù)庫的復(fù)雜度和維護難度。其中,所述元信息至少包括所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的行鍵、列和時間戳,通過所述行鍵、列和時間戳可以確定所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置,由此可以根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引,為便于查詢這些存儲的數(shù)據(jù)文件。以Hbase為例,假設(shè)需要保存的數(shù)據(jù)文件為交通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件,其行鍵的形式可以應(yīng)用場景的不同需求進行自定義,例如為了便于查詢,可以將本例中的行鍵設(shè)置為卡口編號+拍攝時間+車牌,例如ABC123201506031455FG5709,其中ABC123表示卡口編號,201506031455表示拍攝時間是2015年6月3日14點55分,F(xiàn)G5709為車牌,在獲取到該數(shù)據(jù)文件時即可以得到該數(shù)據(jù)文件的行鍵。該數(shù)據(jù)文件的列和時間戳則會在向數(shù)據(jù)表寫入時獲得,其中,列表示該數(shù)據(jù)文件在第一列簇中的所在列,時間戳表示該數(shù)據(jù)文件寫入數(shù)據(jù)表的時間。獲取到上述三種信息后,即可以創(chuàng)建數(shù)據(jù)文件的元信息。除上述三種信息外,所述元信息還可以包括所述數(shù)據(jù)文件的文件大小(size),通過將所述文件大小的信息作為元信息的一部分,可以進一步地方便后續(xù)的數(shù)據(jù)查詢,使得根據(jù)元信息建立的索引更加準確,例如根據(jù)文件大小對需要查找的數(shù)據(jù)文件進行過濾等。在此,本領(lǐng)域技術(shù)人員應(yīng)能理解上述關(guān)于行鍵形式和元信息的內(nèi)容描述僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)行鍵形式和元信息的內(nèi)容如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。優(yōu)選地,在步驟S102,將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之前,還包括:對所述元信息進行排序。此時,步驟S102具體包括:根據(jù)所述排序?qū)⑺鰯?shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中。通過對寫入第二列簇的元信息進行排序,在后續(xù)查詢 時可以根據(jù)該排序進行快速查找,提高查詢的效率。進一步地,對所述元信息進行排序,具體包括:依次根據(jù)所述元信息的行鍵、列和時間戳對所述元信息進行排序。即先根據(jù)行鍵來排序,在行鍵相同時,按照列來排序,在行鍵和列都相同時,按照時間戳來排序。例如,三個數(shù)據(jù)文件(D1、D2和D3)及其對應(yīng)的元信息(M1、M2、M3)分別如表1所示:表1若按照元信息M1、M2、M3中行鍵、列和時間戳的字典序?qū)λ鲈畔⑦M行排序,其排序的順序為M3、M1、M2。通過依次根據(jù)行鍵、列和時間戳對所述元信息進行排序,可以方便查詢時通過一定的查詢算法(如二分查找)對來查找特定的元信息,以減少查詢時數(shù)據(jù)讀寫的次數(shù),加快查詢速度。此外,由于數(shù)據(jù)文件對應(yīng)的元信息中的行鍵、列和時間戳不可能完全一致,因此無論所述元信息是否還包含所述數(shù)據(jù)文件的文件大小,均無需以文件大小作為排序的依據(jù)。優(yōu)選地,在步驟S103中,建立的索引為倒排索引,即根據(jù)所述元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的倒排索引。由此,通過元信息的內(nèi)容,可以快速地定位到所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置,便于數(shù)據(jù)文件的查詢。在某些應(yīng)用場景下,所述數(shù)據(jù)文件包括多個子文件,所述步驟101中,創(chuàng)建數(shù)據(jù)文件的元信息,具體包括:創(chuàng)建數(shù)據(jù)文件的各個子文件對應(yīng)的元信息。所述步驟102中,將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,具體包括:將包含所述子文件的所述數(shù)據(jù)文件寫入所述數(shù)據(jù)表的第一列簇中,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。例如,需要存儲的 數(shù)據(jù)文件包含的子文件為同一網(wǎng)頁上多張相關(guān)的圖片,創(chuàng)建元信息時分別創(chuàng)建這些圖片對應(yīng)的元信息,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。在實際的數(shù)據(jù)寫入過程中,圖片數(shù)據(jù)首先會寫入內(nèi)存中,當(dāng)內(nèi)存滿或達到其它觸發(fā)條件觸發(fā)后將內(nèi)存中的圖片數(shù)據(jù)聚合為一個文件進行保存。以Hbase為例,其采用的文件系統(tǒng)為HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系統(tǒng)),假設(shè)實際保存的每個文件的大小為1GB,內(nèi)存的大小為64MB。當(dāng)每隔一段時間內(nèi)存滿了之后,內(nèi)存中的所有數(shù)據(jù)會保存為一個64MB的文件,該文件內(nèi)包含最近一段時間內(nèi)的所有新插入的數(shù)據(jù),以及這些數(shù)據(jù)對應(yīng)的時間戳范圍,由于這些數(shù)據(jù)時連續(xù)插入的,因此其時間戳范圍是連續(xù)的。當(dāng)這類文件的數(shù)量達到預(yù)設(shè)值時,預(yù)設(shè)數(shù)量的文件會合并成一個1GB的文件,同樣地,這個1GB的文件中包含的數(shù)據(jù)所對應(yīng)的時間戳范圍也應(yīng)當(dāng)是連續(xù)的。由于數(shù)據(jù)表中的元信息包含時間戳,在查詢時可以根據(jù)時間戳過濾掉大量前述1GB的文件,提高了查詢的效率。由于采用了分布式的存儲方式,在將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之后,還包括:當(dāng)所述第二列簇的數(shù)據(jù)量達到設(shè)定閾值后,將所述數(shù)據(jù)表分裂為多個數(shù)據(jù)域(region),分別保存于多個服務(wù)器中。在一般情況下,數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,如前述例子中數(shù)據(jù)文件為交通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件,每個圖片數(shù)據(jù)文件的大小可能是1MB左右,而對應(yīng)的元信息可能只有1KB甚至不到1KB,如果采用第一列簇中數(shù)據(jù)文件的大小作為分裂數(shù)據(jù)域的依據(jù),可能會造成數(shù)據(jù)域的過多。因此,本實施例中采用第二列簇中元信息的數(shù)據(jù)量作為分裂數(shù)據(jù)域的依據(jù),可以有效避免數(shù)據(jù)域的數(shù)量多個這一問題。此外,本申請實施例還提供了一種數(shù)據(jù)文件的查詢方法,用于對采用上述存儲方法存儲的數(shù)據(jù)文件進行查詢,其具體流程如圖2所示,包括以下步驟:步驟S201,獲取查詢條件,并在所述第二列簇中查找符合所述查詢條件的元信息;步驟S202,根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;步驟S203,由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件。由于數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,若在第一列簇中查詢需要的數(shù)據(jù)文件,往往需要處理較大的數(shù)據(jù)量。本實施例提供的查詢方法中,首先根據(jù)查詢條件查詢數(shù)據(jù)文件對應(yīng)的元信息,在查找到元信息后,在根據(jù)預(yù)先建立的索引確定數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置,然后在由保存數(shù)據(jù)文件的第一列簇中的對應(yīng)存儲位置獲取數(shù)據(jù)文件,由于元信息數(shù)據(jù)量相對較小,因此處理的速度相對于直接查詢數(shù)據(jù)文件更加快速。由于在存儲時,其元信息包括所述數(shù)據(jù)文件中的行鍵、列和時間戳,為了較為準確地查找元信息,查詢條件至少包括所述元信息中行鍵的全部或者部分信息。例如,數(shù)據(jù)表中保存有前述表1中的數(shù)據(jù)文件D1~D3及其元信息M1~M3,查詢條件可以包含行鍵的全部,例如ABC123201506031455FG5709,此時查找到的元信息為M1和M2,若查詢條件中還包括其他內(nèi)容,例如時間戳,則可以根據(jù)時間戳再進一步篩選,得到需要的元信息。此外,所述查詢條件也可能不包含完整的行鍵信息,例如僅知道是卡口ABC123或者僅知道是在2015年6月3日拍攝的照片,那么查詢條件可以是ABC123******************或******20150603**********,其中“*”表示可以是任意值。此外,除上述三鐘信息外,所述元信息還可以包括所述數(shù)據(jù)文件的文件大小,對應(yīng)地,在查詢時,可以在查詢條件中加入數(shù)據(jù)文件的文件大小,根據(jù)文件大小對需要查找的數(shù)據(jù)文件進行過濾,使得查找更加準確。在實際應(yīng)用中,對于用戶來說其在應(yīng)用層通過UI(UserInterface,用戶界面)輸入查詢指令時,可以直接輸入更加具體化的指令,例如在實際場景中卡口位置與卡口編號是對應(yīng)的,那么用戶可以直接的查詢指令可以是卡口位置:AA區(qū)BB路口,運行該查詢方法的設(shè)備在收到指令后,能夠自動轉(zhuǎn)化為設(shè)備容易識別的查詢條件,例如用戶可以直接輸入AA區(qū)BB路口,而設(shè)備能夠據(jù)此自動獲取到的查詢條件為ABC123。在存儲時所述數(shù)據(jù)文件對應(yīng)的元信息可以根據(jù)元信息的排序?qū)懭胨? 述數(shù)據(jù)表中,那么在所述第二列簇中查找符合所述查詢條件的元信息時,可以根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息。當(dāng)所述元信息有序排列時,可以在查找時可以根據(jù)排序使用設(shè)定的查找算法來進行元信息的查找,以提高查找的效率。優(yōu)選地,當(dāng)?shù)诙写刂械脑畔⒁来胃鶕?jù)所述元信息的行鍵、列和時間戳進行排序時,步驟S201中根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息,具體包括:根據(jù)所述元信息的行鍵、列和時間戳的依次排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述查詢條件至少包含所述元信息中行鍵的起始部分的信息時,可以根據(jù)所述排序以及所述元信息中行鍵的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查詢條件的元信息。仍以前述通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件為例,在查找特定的圖片數(shù)據(jù)文件時,若需要采用二分查找,則用戶至少需要知道拍攝該圖片的卡口的編號,并且元信息是按照行鍵、列和時間戳進行排序的。通過采用二分查找的方式,使得查詢的次數(shù)大大減少,有效提高了查詢速度。進一步地,當(dāng)所述索引為倒排索引時,步驟S202具體包括:根據(jù)所述倒排索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置,通過采用倒排索引的方式,進一步提高查詢的效率。當(dāng)所述數(shù)據(jù)表包含多個保存于不同服務(wù)器中的數(shù)據(jù)域時,步驟S202具體包括:根據(jù)所述索引,確定符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表中的數(shù)據(jù)域的第一列簇中的存儲位置。在物理上,同一個數(shù)據(jù)域的數(shù)據(jù)文件和元信息是放在一起的,例如放在一個服務(wù)器。在根據(jù)查詢條件在某一數(shù)據(jù)域查找到元信息后,可以直接在該數(shù)據(jù)域內(nèi)根據(jù)索引確定數(shù)據(jù)文件的存儲位置,并獲取該數(shù)據(jù)文件,由此數(shù)據(jù)文件的查詢效率。在前述數(shù)據(jù)文件存儲方法中提及的所述數(shù)據(jù)文件包括多個子文件時的應(yīng)用場景下,所述第一列簇中保存有包含所述子文件的所述數(shù)據(jù)文件,所述第二列簇的同一行中保存有所述子文件的元信息。此時,步驟S202具 體包括:根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的子文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;而步驟S203,具體包括:由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件的子文件。仍以前述同一網(wǎng)頁上多張相關(guān)的圖片寫入到Hbase的HDFS為例,同一網(wǎng)頁上多張相關(guān)的圖片由于在寫入時往往會保存于同一個1GB的文件中,通過元信息中的時間戳過濾掉大部分1GB的文件,可以提高查詢的效率。作為本申請的另一種實施方式,圖3示出了本申請實施例提供的一種數(shù)據(jù)文件的存儲設(shè)備1的結(jié)構(gòu)示意圖,該設(shè)備1包括第一裝置310、第二裝置320和第三裝置330。具體地,第一裝置310用于創(chuàng)建數(shù)據(jù)文件的元信息,所述元信息包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置;第二裝置320用于將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中;第三裝置330用于根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引。在此,本領(lǐng)域技術(shù)人員應(yīng)能理解,所述第一列簇及第二列簇分別用來指代用于寫入所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息的兩個列簇(ColumnFamily),所述第一、第二僅用于區(qū)分兩個列簇,并不表示對兩個列簇在數(shù)據(jù)表中位置的限定。在此,設(shè)備1包括但不限于網(wǎng)絡(luò)設(shè)備、觸控終端或網(wǎng)絡(luò)設(shè)備與觸控終端通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備。在此,所述網(wǎng)絡(luò)設(shè)備包括但不限于如網(wǎng)絡(luò)主機、單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器集或基于云計算的計算機集合等實現(xiàn);或者由用戶設(shè)備實現(xiàn)。在此,云由基于云計算(CloudComputing)的大量主機或網(wǎng)絡(luò)服務(wù)器構(gòu)成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其他現(xiàn)有的或今后可能出現(xiàn)的設(shè)備1如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護范圍以內(nèi),并在此以引用方式包含于此。由于在存儲數(shù)據(jù)文件時會創(chuàng)建包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置的元信息,并且在寫入數(shù)據(jù)表時將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,由于在列式數(shù)據(jù)庫中對于數(shù)據(jù)表中同一行的操作為原子操作,無論對行進行訪問的 事務(wù)有多少列,對該行的數(shù)據(jù)的更新都會是原子操作,即全部成功或者全部失敗,不會存在部分成功的情況,因此不會存在數(shù)據(jù)文件寫入成功而元信息寫入不成功的情況,從而保證了數(shù)據(jù)的一致性。并且由于數(shù)據(jù)文件以及該數(shù)據(jù)文件對應(yīng)的元信息在一張數(shù)據(jù)表中,后續(xù)進行維護時僅需要對一張數(shù)據(jù)表進行相關(guān)操作即可,降低了數(shù)據(jù)庫的復(fù)雜度和維護難度。其中,所述元信息至少包括所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的行鍵、列和時間戳,通過所述行鍵、列和時間戳可以確定所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置,由此可以根據(jù)所述第二列簇中的元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的索引,為便于查詢這些存儲的數(shù)據(jù)文件。以Hbase為例,假設(shè)需要保存的數(shù)據(jù)文件為交通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件,其行鍵的形式可以應(yīng)用場景的不同需求進行自定義,例如為了便于查詢,可以將本例中的行鍵設(shè)置為卡口編號+拍攝時間+車牌,例如ABC123201506031455FG5709,其中ABC123表示卡口編號,201506031455表示拍攝時間是2015年6月3日14點55分,F(xiàn)G5709為車牌,在獲取到該數(shù)據(jù)文件時即可以得到該數(shù)據(jù)文件的行鍵。該數(shù)據(jù)文件的列和時間戳則會在向數(shù)據(jù)表寫入時獲得,其中,列表示該數(shù)據(jù)文件在第一列簇中的所在列,時間戳表示該數(shù)據(jù)文件寫入數(shù)據(jù)表的時間。獲取到上述三種信息后,即可以創(chuàng)建數(shù)據(jù)文件的元信息。除上述三種信息外,所述元信息還可以包括所述數(shù)據(jù)文件的文件大小(size),通過將所述文件大小的信息作為元信息的一部分,可以進一步地方便后續(xù)的數(shù)據(jù)查詢,使得根據(jù)元信息建立的索引更加準確,例如根據(jù)文件大小對需要查找的數(shù)據(jù)文件進行過濾等。在此,本領(lǐng)域技術(shù)人員應(yīng)能理解上述關(guān)于行鍵形式和元信息的內(nèi)容描述僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)行鍵形式和元信息的內(nèi)容如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。優(yōu)選地,圖4示出了本申請實施例提供的另一種數(shù)據(jù)文件的存儲設(shè)備的結(jié)構(gòu)示意圖,除如圖3所示第一裝置310、第二裝置320和第三裝置330之外,還包括第四裝置340。具體地,所述第四裝置340用于在將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第 二列簇的同一行中之前,對所述元信息進行排序;所述第二裝置320具體用于根據(jù)所述排序?qū)⑺鰯?shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中。通過對寫入第二列簇的元信息進行排序,在后續(xù)查詢時可以根據(jù)該排序進行快速查找,提高查詢的效率。在此,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,第一裝置310和第三裝置330分別與圖3實施例中對應(yīng)裝置的內(nèi)容相同或基本相同,為簡明起見,故在此不再贅述,并以引用的方式包含于此。進一步地,所述第一裝置310具體用于依次根據(jù)所述元信息的行鍵、列和時間戳對所述元信息進行排序。即先根據(jù)行鍵來排序,在行鍵相同時,按照列來排序,在行鍵和列都相同時,按照時間戳來排序。例如,三個數(shù)據(jù)文件(D1、D2和D3)及其對應(yīng)的元信息(M1、M2、M3)分別如表1所示。若按照元信息M1、M2、M3中行鍵、列和時間戳的字典序?qū)λ鲈畔⑦M行排序,其排序的順序為M3、M1、M2。通過依次根據(jù)行鍵、列和時間戳對所述元信息進行排序,可以方便查詢時通過一定的查詢算法(如二分查找)對來查找特定的元信息,以減少查詢時數(shù)據(jù)讀寫的次數(shù),加快查詢速度。此外,由于數(shù)據(jù)文件對應(yīng)的元信息中的行鍵、列和時間戳不可能完全一致,因此無論所述元信息是否還包含所述數(shù)據(jù)文件的文件大小,均無需以文件大小作為排序的依據(jù)。優(yōu)選地,所述第三裝置330具體用于建立的索引為倒排索引,即根據(jù)所述元信息建立指向所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置的倒排索引。由此,通過元信息的內(nèi)容,可以快速地定位到所述數(shù)據(jù)文件在所述數(shù)據(jù)表中的存儲位置,便于數(shù)據(jù)文件的查詢。在某些應(yīng)用場景下,所述數(shù)據(jù)文件包括多個子文件,所述第一裝置310具體用于創(chuàng)建數(shù)據(jù)文件的各個子文件對應(yīng)的元信息。所述第二裝置320具體用于將包含所述子文件的所述數(shù)據(jù)文件寫入所述數(shù)據(jù)表的第一列簇中,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。例如,需要存儲的數(shù)據(jù)文件包含的子文件同一網(wǎng)頁上多張相關(guān)的圖片,創(chuàng)建元信息時分別創(chuàng)建這些圖片對應(yīng)的元信息,并將所述子文件對應(yīng)的元信息寫入所述數(shù)據(jù)表的第二列簇的同一行中。在實際的數(shù)據(jù)寫入過程中,圖片 數(shù)據(jù)首先會寫入內(nèi)存中,當(dāng)內(nèi)存滿或達到其它觸發(fā)條件觸發(fā)后將內(nèi)存中的圖片數(shù)據(jù)聚合為一個文件進行保存。以Hbase為例,其采用的文件系統(tǒng)為HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系統(tǒng)),假設(shè)實際保存的每個文件的大小為1GB,內(nèi)存的大小為64MB。當(dāng)每隔一段時間內(nèi)存滿了之后,內(nèi)存中的所有數(shù)據(jù)會保存為一個64MB的文件,該文件內(nèi)包含最近一段時間內(nèi)的所有新插入的數(shù)據(jù),以及這些數(shù)據(jù)對應(yīng)的時間戳范圍,由于這些數(shù)據(jù)時連續(xù)插入的,因此其時間戳范圍是連續(xù)的。當(dāng)這類文件的數(shù)量達到預(yù)設(shè)值時,預(yù)設(shè)數(shù)量的文件會合并成一個1GB的文件,同樣地,這個1GB的文件中包含的數(shù)據(jù)所對應(yīng)的時間戳范圍也應(yīng)當(dāng)是連續(xù)的。由于數(shù)據(jù)表中的元信息包含時間戳,在查詢時可以根據(jù)時間戳過濾掉大量前述1GB的文件,提高了查詢的效率。由于采用了分布式的存儲方式,本申請實施例還提供了一種優(yōu)選的數(shù)據(jù)文件的存儲設(shè)備,該設(shè)備1的結(jié)構(gòu)如圖5所示,除如圖3所示第一裝置310、第二裝置320和第三裝置330之外,還包括第五裝置350。具體地,所述第五裝置350用于在將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中之后,當(dāng)所述第二列簇的數(shù)據(jù)量達到設(shè)定閾值后,將所述數(shù)據(jù)表分裂為多個數(shù)據(jù)域,分別保存于多個服務(wù)器中。在此,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,第一裝置310、第二裝置320和第三裝置330分別與圖3實施例中對應(yīng)裝置的內(nèi)容相同或基本相同,為簡明起見,故在此不再贅述,并以引用的方式包含于此。在一般情況下,數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,如前述例子中數(shù)據(jù)文件為交通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件,每個圖片數(shù)據(jù)文件的大小可能是1MB左右,而對應(yīng)的元信息可能只有1KB甚至不到1KB,如果采用第一列簇中數(shù)據(jù)文件的大小作為分裂數(shù)據(jù)域的依據(jù),可能會造成數(shù)據(jù)域的過多。因此,本實施例中采用第二列簇中元信息的數(shù)據(jù)量作為分裂數(shù)據(jù)域的依據(jù),可以有效避免數(shù)據(jù)域的數(shù)量多個這一問題。此外,本申請實施例還提供了一種數(shù)據(jù)文件的查詢設(shè)備2,用于對采用上述存儲設(shè)備1存儲的數(shù)據(jù)文件進行查詢,該設(shè)備2的結(jié)構(gòu)如圖6所示, 包括第六裝置360、第七裝置370和第八裝置380。具體地,第六裝置360用于獲取查詢條件,并在所述第二列簇中查找符合所述查詢條件的元信息;第七裝置370用于根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;第八裝置380用于由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件。在此,設(shè)備2包括但不限于網(wǎng)絡(luò)設(shè)備、觸控終端或網(wǎng)絡(luò)設(shè)備與觸控終端通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備。在此,所述網(wǎng)絡(luò)設(shè)備包括但不限于如網(wǎng)絡(luò)主機、單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器集或基于云計算的計算機集合等實現(xiàn);或者由用戶設(shè)備實現(xiàn)。在此,云由基于云計算(CloudComputing)的大量主機或網(wǎng)絡(luò)服務(wù)器構(gòu)成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其他現(xiàn)有的或今后可能出現(xiàn)的設(shè)備1如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護范圍以內(nèi),并在此以引用方式包含于此。由于數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,若在第一列簇中查詢需要的數(shù)據(jù)文件,往往需要處理較大的數(shù)據(jù)量。本實施例提供的查詢方法中,首先根據(jù)查詢條件查詢數(shù)據(jù)文件對應(yīng)的元信息,在查找到元信息后,在根據(jù)預(yù)先建立的索引確定數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置,然后在由保存數(shù)據(jù)文件的第一列簇中的對應(yīng)存儲位置獲取數(shù)據(jù)文件,由于元信息數(shù)據(jù)量相對較小,因此處理的速度相對于直接查詢數(shù)據(jù)文件更加快速。由于在存儲時,其元信息包括所述數(shù)據(jù)文件中的行鍵、列和時間戳,為了較為準確地查找元信息,所述第六裝置360獲取的查詢條件至少包括所述元信息中行鍵的全部或者部分信息。例如,數(shù)據(jù)表中保存有前述表1中的數(shù)據(jù)文件D1~D3及其元信息M1~M3,查詢條件可以包含行鍵的全部,例如ABC123201506031455FG5709,此時查找到的元信息為M1和M2,若查詢條件中還包括其他內(nèi)容,例如時間戳,則可以根據(jù)時間戳再進一步篩選,得到需要的元信息。此外,所述查詢條件也可能不包含完整的行鍵信息,例如僅知道是卡口ABC123或者僅知道是在2015年6月3日拍攝的照片,那么查詢條件可以是ABC123******************或******20150603**********,其中“*”表示可以是任意值。此外,除上 述三鐘信息外,所述元信息還可以包括所述數(shù)據(jù)文件的文件大小,對應(yīng)地,在查詢時,可以在查詢條件中加入數(shù)據(jù)文件的文件大小,根據(jù)文件大小對需要查找的數(shù)據(jù)文件進行過濾,使得查找更加準確。在實際應(yīng)用中,對于用戶來說其在應(yīng)用層通過UI(UserInterface,用戶界面)輸入查詢指令時,可以直接輸入更加具體化的指令,例如在實際場景中卡口位置與卡口編號是對應(yīng)的,那么用戶可以直接的查詢指令可以是卡口位置:AA區(qū)BB路口,運行該查詢方法的設(shè)備在收到指令后,能夠自動轉(zhuǎn)化為設(shè)備容易識別的查詢條件,例如用戶可以直接輸入AA區(qū)BB路口,而設(shè)備能夠據(jù)此自動獲取到的查詢條件為ABC123。在存儲時所述數(shù)據(jù)文件對應(yīng)的元信息可以根據(jù)元信息的排序?qū)懭胨鰯?shù)據(jù)表中,那么所述第六裝置360具體用于獲取查詢條件,根據(jù)所述排序在所述第二列簇中查找符合所述查詢條件的元信息。當(dāng)所述元信息有序排列時,可以在查找時可以根據(jù)排序使用設(shè)定的查找算法來進行元信息的查找,以提高查找的效率。優(yōu)選地,當(dāng)?shù)诙写刂械脑畔⒁来胃鶕?jù)所述元信息的行鍵、列和時間戳進行排序時,所述第六裝置360具體用于獲取查詢條件,根據(jù)所述元信息的行鍵、列和時間戳的依次排序在所述第二列簇中查找符合所述查詢條件的元信息。進一步地,當(dāng)所述查詢條件至少包含所述元信息中行鍵的起始部分的信息時,所述第六裝置,可以根據(jù)所述排序以及所述元信息中行鍵的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查詢條件的元信息。仍以前述通卡口攝像頭拍攝的經(jīng)過車輛的圖片數(shù)據(jù)文件為例,在查找特定的圖片數(shù)據(jù)文件時,若需要采用二分查找,則用戶至少需要知道拍攝該圖片的卡口的編號,并且元信息是按照行鍵、列和時間戳進行排序的。通過采用二分查找的方式,使得查詢的次數(shù)大大減少,有效提高了查詢速度。進一步地,當(dāng)所述索引為倒排索引時,所述第七裝置具體用于根據(jù)所述倒排索引確定所述符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表的第一列簇中的存儲位置,通過采用倒排索引的方式,進一步提高查詢的效率。當(dāng)所述數(shù)據(jù)表包含多個保存于不同服務(wù)器中的數(shù)據(jù)域時,第七裝置370具體根據(jù)所述索引,確定符合所述查詢條件的元信息所對應(yīng)的數(shù)據(jù)文件在所述數(shù)據(jù)表中的數(shù)據(jù)域的第一列簇中的存儲位置。在物理上,同一個數(shù)據(jù)域的數(shù)據(jù)文件和元信息是放在一起的,例如放在一個服務(wù)器。在根據(jù)查詢條件在某一數(shù)據(jù)域查找到元信息后,可以直接在該數(shù)據(jù)域內(nèi)根據(jù)索引確定數(shù)據(jù)文件的存儲位置,并獲取該數(shù)據(jù)文件,由此數(shù)據(jù)文件的查詢效率。在前述數(shù)據(jù)文件存儲方法中提及的所述數(shù)據(jù)文件包括多個子文件時的應(yīng)用場景下,所述第一列簇中保存有包含所述子文件的所述數(shù)據(jù)文件,所述第二列簇的同一行中保存有所述子文件的元信息。此時,第七裝置370具體用于根據(jù)所述索引,確定所述符合所述查詢條件的元信息所對應(yīng)的子文件在所述數(shù)據(jù)表的第一列簇中的存儲位置;而第八裝置380具體用于由所述第一列簇中的存儲位置獲取所述數(shù)據(jù)文件的子文件。仍以前述同一網(wǎng)頁上多張相關(guān)的圖片寫入到Hbase的HDFS為例,同一網(wǎng)頁上多張相關(guān)的圖片由于在寫入時往往會保存于同一個1GB的文件中,通過元信息中的時間戳過濾掉大部分1GB的文件,可以提高查詢的效率。綜上所述,由于在存儲數(shù)據(jù)文件時會創(chuàng)建包含所述數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位置的元信息,并且在寫入數(shù)據(jù)表時將所述數(shù)據(jù)文件與該數(shù)據(jù)文件對應(yīng)的元信息分別寫入所述數(shù)據(jù)表中第一列簇和第二列簇的同一行中,由于在列式數(shù)據(jù)庫中對于數(shù)據(jù)表中同一行的操作為原子操作,無論對行進行訪問的事務(wù)有多少列,對該行的數(shù)據(jù)的更新都會是原子操作,即全部成功或者全部失敗,不會存在部分成功的情況,因此不會存在數(shù)據(jù)文件寫入成功而元信息寫入不成功的情況,從而保證了數(shù)據(jù)的一致性。并且由于數(shù)據(jù)文件以及該數(shù)據(jù)文件對應(yīng)的元信息在一張數(shù)據(jù)表中,后續(xù)進行維護時僅需要對一張數(shù)據(jù)表進行相關(guān)操作即可,降低了數(shù)據(jù)庫的復(fù)雜度和維護難度。在查詢時,由于數(shù)據(jù)文件的大小往往會遠大于其對應(yīng)的元信息,若在第一列簇中查詢需要的數(shù)據(jù)文件,往往需要處理較大的數(shù)據(jù)量。本實施例提供的查詢方法中,首先根據(jù)查詢條件查詢數(shù)據(jù)文件對應(yīng)的元信息,在查找到元信息后,在根據(jù)預(yù)先建立的索引確定數(shù)據(jù)文件在數(shù)據(jù)表中的存儲位 置,然后在由保存數(shù)據(jù)文件的第一列簇中的對應(yīng)存儲位置獲取數(shù)據(jù)文件,由于元信息數(shù)據(jù)量相對較小,因此處理的速度相對于直接查詢數(shù)據(jù)文件更加快速。需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(ASIC)、通用目的計算機或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本申請的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。另外,本申請的一部分可被應(yīng)用為計算機程序產(chǎn)品,例如計算機程序指令,當(dāng)其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本申請的多個實施例的方法和/或技術(shù)方案。對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3