專利名稱:一種存儲數(shù)據(jù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機領(lǐng)域,特別涉及一種存儲數(shù)據(jù)的方法和裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)應(yīng)用服務(wù)的發(fā)展,常見的數(shù)據(jù)源為數(shù)據(jù)庫系統(tǒng)以及文件系統(tǒng)?,F(xiàn)有技術(shù)中主流操作系統(tǒng),例如Windows, Unix, Solaris,都支持了 MMF (Memory Mapped File,內(nèi)存映射文件)機制,提高了文件讀寫的效率。在MMF機制中,以某一特定文件作為數(shù)據(jù)源,開辟一塊內(nèi)存,映射到該文件,在需要讀寫數(shù)據(jù)操作的時候,直接對該塊內(nèi)存進行操作,最后操作系統(tǒng)的MMF機制將內(nèi)存中的數(shù)據(jù)變化寫入文件。通過內(nèi)存映射文件保留一個內(nèi)存地址空間的區(qū)域,同時將物理存儲器提交給此區(qū)域。使用MMF機制處理存儲于磁盤上的文件時,將不必對文件執(zhí)行I/O操作,處理速度更快。但是該MMF機制存在如下缺陷,對于32位的操作系統(tǒng),最大僅能夠支持2G的文件,在文件讀寫操作的時候,會鎖住文件的位置標記(position),在有大量并發(fā)請求到來的時候僅能串行順序處理,效率較低。
發(fā)明內(nèi)容
本發(fā)明提供的一種存儲數(shù)據(jù)的方法和裝置,以解決最大僅能夠支持2G的文件,以及在有大量并發(fā)請求到來的時候僅能串行順序處理,使得處理效率較低的問題。本發(fā)明公開了一種存儲數(shù)據(jù)的方法,所述方法包括:步驟1,按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元;步驟2,建立內(nèi)存與子文件的映射;步驟3,為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。其中,所述步驟3后還包括:步驟21,在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項;步驟22,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中;步驟23,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中。其中,所述步驟3后還包括:步驟31,在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引;步驟32,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù);步驟33,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。其中,所述步驟3后還包括:步驟41,在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引;步驟42,將所述索引從索引表中刪除。
其中,所述將索引表中的表項與數(shù)據(jù)單兀對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引進一步包括:步驟51,確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號組成所述數(shù)據(jù)單元的位置標號;步驟52,通過哈希表存儲索引和位置標號,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,組成鍵值對。其中,所述步驟3后還包括:步驟61,在修改數(shù)據(jù)時,以待修改數(shù)據(jù)的索引為主鍵;步驟62,獲得所述主鍵對應(yīng)的鍵值對的值,根據(jù)所述值確定數(shù)據(jù)單元,修改數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù);步驟63,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。其中,所述步驟21后還包括:步驟71,對于所述空表項,確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號;步驟72,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,通過哈希表存儲所述主鍵和所述值組成的鍵值對。其中,所述子文件中數(shù)據(jù)單元的數(shù)量為配置的單元數(shù)量;所述將索引表中的表項與數(shù)據(jù)單元--對應(yīng)進一步包括:
步驟81,索引表中的表項與數(shù)據(jù)單元順序?qū)?yīng);所述確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號進一步包括:步驟82,將表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號;所述表項在索引表中的順序號、子文件在文件中的順序號、以及數(shù)據(jù)單元在子文件中的順序號都以O(shè)為起始。本發(fā)明還公開了一種存儲數(shù)據(jù)的裝置,所述裝置包括:子文件劃分模塊,用于按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元;映射建立模塊,用于建立內(nèi)存與子文件的映射;索引建立模塊,用于為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元--
對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。其中,所述裝置還包括:數(shù)據(jù)寫入模塊,用于在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中;和/ 或,數(shù)據(jù)修改模塊,用于在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù),將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元;
和/ 或,數(shù)據(jù)刪除模塊,用于在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引,將所述索引從索引表中刪除。本發(fā)明實施例的有益效果是:通過將文件劃分為多個子文件,使用索引表存儲數(shù)據(jù)索引,將索引表表項同存儲數(shù)據(jù)的存儲單元對應(yīng),能夠使得文件不受2G大小的局限,并實現(xiàn)多文件的并行處理,提高處理效率;通過使用哈希表記錄表項與存儲單元的對應(yīng)關(guān)系,能夠提高數(shù)據(jù)操作時,依據(jù)索引進行數(shù)據(jù)查找的速度,進一步提高處理效率。
圖1為本發(fā)明一種存儲數(shù)據(jù)的方法的流程圖;圖2為本發(fā)明一種存儲數(shù)據(jù)的方法實施例中索引表的示意圖;圖3為本發(fā)明一種存儲數(shù)據(jù)的裝置的結(jié)構(gòu)圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。參見圖1,為本發(fā)明一種存儲數(shù)據(jù)的方法的流程圖。步驟S100,按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個
數(shù)據(jù)單元。磁盤中文件為數(shù)據(jù)源。每個數(shù)據(jù)單元用于存儲一條數(shù)據(jù)記錄。步驟S200,為該文件建立內(nèi)存與子文件的映射。步驟S300,建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引??梢酝ㄟ^多種方式將索引表中的表項與數(shù)據(jù)單兀 對應(yīng)。例如,使用表格記錄索引表中表項序號和對應(yīng)的數(shù)據(jù)單元的位置標號。數(shù)據(jù)單元的位置標號由數(shù)據(jù)單元所在子文件在文件中的順序號和數(shù)據(jù)單元在子文件中的順序號組成。采用上述技術(shù)方案,提高了文件存儲的擴展性,現(xiàn)有技術(shù)中僅支持最大為2G的文件,由于本方案將文件劃分為多個不大于2G的子文件,對多個子文件采用同一索引,通過索引得到不同子文件中數(shù)據(jù)單元的位置,能夠在子文件中讀取到數(shù)據(jù),支持的最大存儲量可以通過配置設(shè)定成硬件設(shè)備所能支持范圍內(nèi)的任意數(shù)值?,F(xiàn)有技術(shù)中每個文件在讀寫的時候,有一個位置標志(position),指向了文件當(dāng)前被操作的位置,在任何讀寫操作的時候為了避免數(shù)據(jù)混亂,都將該標志鎖住一段時間,直到操作完成。因為現(xiàn)有技術(shù)中只打開一個文件,每一次讀寫操作都會爭奪和等待同一個鎖,效率較低。采用上述方法,由于將文件分為多個子文件,可同時對每個子文件進行處理,實現(xiàn)并行處理,同現(xiàn)有技術(shù)對一個文件處理相比,提高效率倍數(shù)為劃分的子文件的數(shù)量。在一較佳的實施方式中,使用哈希表存儲索引表表項與數(shù)據(jù)單元的對應(yīng)關(guān)系。所述將索引表中的表項與數(shù)據(jù)單兀 對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引進一步包括:步驟S310,確定表項對應(yīng)數(shù)據(jù)單元所在子文件在文件中的順序號和數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號。步驟S320,通過哈希表存儲索引和位置標號,以表項存儲的索引為主鍵(key),以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值(value),組成鍵值對。例如,value為一個長整型數(shù)字,長整型占據(jù)8個字節(jié),前四個字節(jié)表示數(shù)據(jù)單元所在的子文件在文件中的順序號,后四個字節(jié)表示數(shù)據(jù)單元在子文件中順序號。如圖2中,子文件I中數(shù)據(jù)單元0,該數(shù)據(jù)單元的位置標號為00010000。所述子文件中數(shù)據(jù)單元的數(shù)量為配置的單元數(shù)量;所述將索引表中的表項與數(shù)據(jù)單元--對應(yīng)進一步包括索引表中的表項與數(shù)據(jù)單元順序?qū)?yīng)。所述確定表項對應(yīng)的數(shù)據(jù) 單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號具體可以包括:將表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號;所述表項在索引表中的順序號、子文件在文件中的順序號、以及數(shù)據(jù)單元在子文件中的順序號都以O(shè)為起始。并且,當(dāng)應(yīng)用數(shù)據(jù)源的應(yīng)用程序重新啟動時,遍歷索引表,將表項在索引表中的順序號與所述單元數(shù)量相除,所得商為表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為表項對應(yīng)的數(shù)據(jù)單元在子文件中的順序號。所述順序號都以O(shè)為起始。將數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號組成所述數(shù)據(jù)單元的位置標號。通過哈希表存儲索引和位置標號,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,組成鍵值對。采用該方法,將主鍵與子文件的順序號的哈希,以及主鍵與數(shù)據(jù)單元的順序號的哈希,合并為一個哈希表,減少了操作索引的耗費的資源和效率。在應(yīng)用數(shù)據(jù)源的應(yīng)用程序重新啟動后,遍歷整個索引表,由于索引表中存儲主鍵的表項的位置與子文件中數(shù)據(jù)單元的位置對應(yīng),按照索引中存儲主鍵的表項的位置確定哈希表中鍵值對中的值。進一步地,在修改數(shù)據(jù)時,使用數(shù)據(jù)的索引,依據(jù)哈希表獲得存儲該數(shù)據(jù)的數(shù)據(jù)單元的位置標號。步驟S410,在修改數(shù)據(jù)時,以待修改數(shù)據(jù)的索引為主鍵;步驟S420,獲得所述主鍵對應(yīng)的鍵值對的值,根據(jù)所述值確定數(shù)據(jù)單元,修改數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù);步驟S430,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。采用哈希索引方式,查找更加方便。在重新啟動,需要將索引重新裝載到內(nèi)存中時,無需遍歷整個數(shù)據(jù)源文件,只需讀取各個數(shù)據(jù)記錄的索引后,將索引與數(shù)據(jù)記錄所在數(shù)據(jù)單元的位置標號組成哈希表的鍵值對。在一較佳的實施方式中,在寫數(shù)據(jù)時,將數(shù)據(jù)寫入索引表中空表項對應(yīng)的數(shù)據(jù)單元中。步驟S510,在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述
空表項。空表項表示該表項對應(yīng)的數(shù)據(jù)單元也為空。步驟S520,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中。
步驟S530,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中。在采用哈希表存儲索引和數(shù)據(jù)單元數(shù)據(jù)標號時,在寫入數(shù)據(jù)的同時建立鍵值對。所述步驟S510后還包括:對于所述空表項,確定所述空表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號。其中,所述子文件中數(shù)據(jù)單元的數(shù)量為配置的單元數(shù)量;所述將索引表中的表項與數(shù)據(jù)單元--對應(yīng)進一步包括索引表中的表項與數(shù)據(jù)單元順序?qū)?yīng)。所述確定所述空表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號進一步包括:將所述空表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號。所述順序號都以O(shè)為起始。以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,通過哈希表存儲所述主鍵和所述值組成的鍵值對。在一較佳的實施方式中,在修改數(shù)據(jù)時,利用索引表確定待修改的數(shù)據(jù)所在數(shù)據(jù)單元。 步驟S610,在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引。步驟S620,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù)。步驟S630,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。在一較佳的實施方式中,在刪除數(shù)據(jù)時,利用索引表刪除數(shù)據(jù)。步驟710,在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引。步驟720,將所述索引從索引表中刪除。這樣,在下次寫數(shù)據(jù)時,判斷該表項為空,則將數(shù)據(jù)寫入待刪除數(shù)據(jù)所在的數(shù)據(jù)單元,因而通過在索引表中刪除索引達到同在文件中刪除數(shù)據(jù)相同的效果。參見圖2,為本發(fā)明一種存儲數(shù)據(jù)的方法實施例中索引表的示意圖。首先,創(chuàng)建配置文件。配置文件中包含多個配置信息,文件劃分的子文件數(shù)量,表示為m ;每個子文件占用空間大小,表示為Y ;數(shù)據(jù)單元占用空間大小,表示為Z ;以及文件目錄、文件名等信息。可以通過更改配置文件修改對于存儲的配置。其次,在應(yīng)用數(shù)據(jù)源的應(yīng)用程序啟動前,在以文件作為數(shù)據(jù)源進行存儲的時候,按照配置,將磁盤中一個文件劃分為多個子文件,每個子文件占用空間小于2G。每個子文件包括一個或多個數(shù)據(jù)單元。第三,建立內(nèi)存與子文件的映射。第四,為文件建立索引表,將索引表中的表項與數(shù)據(jù)單元--對應(yīng),所述表項中存
儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。數(shù)據(jù)單元所在子文件在文件中的順序號和數(shù)據(jù)單元在子文件中的順序號組成數(shù)據(jù)單元的位置標號。如圖2中所示,每個數(shù)據(jù)單元對應(yīng)子文件,子文件在文件中順序號為O至m-1,m為配置的文件劃分的子文件的數(shù)量,每個子文件包含η個數(shù)據(jù)單元,數(shù)據(jù)單元在子文件中順序號為O至η-1。例如,配置中,打開的子文件數(shù)量為m,子文件占用空間大小為Y,數(shù)據(jù)單元占用空間大小為Z,則文件占用空間總大小為YXm,文件可以存儲的數(shù)據(jù)記錄個數(shù)為mXY/Z。其中,Y/Z即為每個子文件包含的數(shù)據(jù)單元數(shù)量η。每一個數(shù)據(jù)單元對應(yīng)文件中的一條數(shù)據(jù)記錄。每一條數(shù)據(jù)記錄在索引表中具有其索引。索引表中每個表項占用空間大小為8個字節(jié),則索引表占用空間大小為8XmXn字節(jié),如圖2所示。采用哈希表存儲表項中索引同表項對應(yīng)的數(shù)據(jù)單元的位置標號。以表項中索引為key (主鍵),以表項對應(yīng)的數(shù)據(jù)單元的位置標號為value (值),組成鍵值對。按哈希算法規(guī)定,依據(jù)key按規(guī)定算法得出地址,在所述地址中存儲value。value為一個長整型數(shù)字,占據(jù)8個字節(jié),前四個字節(jié)代表子文件在文件中順序號,后四個字節(jié)代表數(shù)據(jù)單元在子文件中順序號。在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項;將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中;將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中。并且,將表項的順序號除以n,該順序號從O開始,所得商為子文件在文件中順序號,所得余數(shù)為數(shù)據(jù)單元在子文件中順序號,組成所述數(shù)據(jù)單元的位置標號。采用哈希表存儲表項中索引同表項對應(yīng)的數(shù)據(jù)單元的位置標號。在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引;以該索引為key,得到value,從value中拆分出子文件的順序號和數(shù)據(jù)單元的順序號。按子文件順序號和數(shù)據(jù)單元順序號確定數(shù)據(jù)單元。修改該數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù),在內(nèi)存中將內(nèi)存中的數(shù)據(jù)修改同步到該數(shù)據(jù)單元。在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引;將該索引從索引表中刪除。當(dāng)寫入數(shù)據(jù)時,查找索引表,確定該表項為空表項,則將數(shù)據(jù)寫入該表項對應(yīng)的數(shù)據(jù)單元中,因而通過在索引表中刪除索引達到同在文件中刪除數(shù)據(jù)相同的效果。參見圖3,為本發(fā)明一種存儲數(shù)據(jù)的裝置的結(jié)構(gòu)圖。子文件劃分模塊100,用于按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元。映射建立模塊200,用于建立內(nèi)存與子文件的映射。索引建立模塊300,用于為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。進一步地,所述裝置還包括:數(shù)據(jù)寫入模塊,用于在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中。其中,所述數(shù)據(jù)寫入模塊還用于確定所述空表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號;以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,通過哈希表存儲所述主鍵和所述值組成的鍵值對。其中,所述子文件中數(shù)據(jù)單元的數(shù)量為配置的單元數(shù)量;所述索引建立模塊將索引表中的表項與數(shù)據(jù)單元一一對應(yīng)時具體可以用于:將索引表中的表項與數(shù)據(jù)單元順序?qū)?yīng);所述數(shù)據(jù)寫入模塊在確定所述空表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號時具體可以用于:將所述空表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號。所述表項在索引表中的順序號、子文件在文件中的順序號、以及數(shù)據(jù)單元在子文件中的順序號都以O(shè)為起始。進一步地,所述裝置還可以包括:數(shù)據(jù)修改模塊,用于在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù),將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。數(shù)據(jù)刪除模塊,用于在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引,將所述索引從索引表中刪除。進一步地,索引建立模塊在將索引表中的表項與數(shù)據(jù)單兀 對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引時具體可以用于:確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號;通過哈希表存儲索引和位置標號,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,組成鍵值對。其中,所述索引建立模塊在確定所述表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號時具體可以用于:將所述表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號。所述表項在索引表中的順序號、子文件在文件中的順序號、以及數(shù)據(jù)單元在子文件中的順序號都以O(shè)為起始。其中,數(shù)據(jù)修改模塊進一步用于在修改數(shù)據(jù)時,以待修改數(shù)據(jù)的索引為主鍵,獲得所述主鍵對應(yīng)的鍵值對的值,根據(jù)所述值確定數(shù)據(jù)單元,修改數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù),將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種存儲數(shù)據(jù)的方法,其特征在于,所述方法包括: 步驟1,按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元; 步驟2,建立內(nèi)存與子文件的映射; 步驟3,為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。
2.根據(jù)權(quán)利要求1所述的存儲數(shù)據(jù)的方法,其特征在于, 所述步驟3后還包括: 步驟21,在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項; 步驟22,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中; 步驟23,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中。
3.根據(jù)權(quán)利要求1所述的存儲數(shù)據(jù)的方法,其特征在于, 所述步驟3后還包括:步驟31,在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引; 步驟32,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù); 步驟33,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。
4.根據(jù)權(quán)利要求1所述的存儲數(shù)據(jù)的方法,其特征在于, 所述步驟3后還包括: 步驟41,在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引; 步驟42,將所述索引從索引表中刪除。
5.根據(jù)權(quán)利要求1所述的存儲數(shù)據(jù)的方法,其特征在于, 所述將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引包括: 步驟51,確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號; 步驟52,通過哈希表存儲索引和位置標號,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,組成鍵值對。
6.根據(jù)權(quán)利要求5所述的存儲數(shù)據(jù)的方法,其特征在于, 所述步驟3后還包括: 步驟61,在修改數(shù)據(jù)時,以待修改數(shù)據(jù)的索引為主鍵; 步驟62,獲得所述主鍵對應(yīng)的鍵值對的值,根據(jù)所述值確定數(shù)據(jù)單元,修改數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù); 步驟63,將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元。
7.根據(jù)權(quán)利要求2所述的存儲數(shù)據(jù)的方法,其特征在于, 所述步驟21后還包括: 步驟71,對于所述空表項,確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號,組成所述數(shù)據(jù)單元的位置標號; 步驟72,以表項存儲的索引為主鍵,以表項對應(yīng)的數(shù)據(jù)單元的位置標號為值,通過哈希表存儲所述主鍵和所述值組成的鍵值對。
8.根據(jù)權(quán)利要求5或7所述的存儲數(shù)據(jù)的方法,其特征在于, 所述子文件中數(shù)據(jù)單元的數(shù)量為配置的單元數(shù)量; 所述將索引表中的表項與數(shù)據(jù)單元一一對應(yīng)進一步包括: 步驟81,索引表中的表項與數(shù)據(jù)單元順序?qū)?yīng); 所述確定表項對應(yīng)的數(shù)據(jù)單元所在子文件在文件中的順序號和所述數(shù)據(jù)單元在子文件中的順序號包括: 步驟82,將表項在索引表中的順序號與所述單元數(shù)量相除,所得商為所述數(shù)據(jù)單元所在子文件在文件中 的順序號,所得余數(shù)為所述數(shù)據(jù)單元在子文件中的順序號; 所述表項在索引表中的順序號、子文件在文件中的順序號、以及數(shù)據(jù)單元在子文件中的順序號都以O(shè)為起始。
9.一種存儲數(shù)據(jù)的裝置,其特征在于,所述裝置包括: 子文件劃分模塊,用于按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元; 映射建立模塊,用于建立內(nèi)存與子文件的映射; 索引建立模塊,用于為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。
10.根據(jù)權(quán)利要求9所述的存儲數(shù)據(jù)的裝置,其特征在于, 所述裝置還包括: 數(shù)據(jù)寫入模塊,用于在寫入數(shù)據(jù)時,從索引表中查找空表項,將待寫入數(shù)據(jù)的索引存入所述空表項,將數(shù)據(jù)寫入所述空表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中,將內(nèi)存中寫入的數(shù)據(jù)同步到所述數(shù)據(jù)單元中; 和/或, 數(shù)據(jù)修改模塊,用于在修改數(shù)據(jù)時,從索引表中查找到待修改的數(shù)據(jù)的索引,修改存儲所述索引的表項對應(yīng)的數(shù)據(jù)單元映射的內(nèi)存中數(shù)據(jù),將內(nèi)存中的數(shù)據(jù)修改同步到所述數(shù)據(jù)單元; 和/或, 數(shù)據(jù)刪除模塊,用于在刪除數(shù)據(jù)時,從索引表中查找到待刪除數(shù)據(jù)記錄的索引,將所述索引從索引表中刪除。
全文摘要
本發(fā)明公開一種存儲數(shù)據(jù)的方法和裝置,所述方法包括步驟1,按配置將磁盤中一個文件劃分為多個子文件,子文件包括一個或多個數(shù)據(jù)單元;步驟2,建立內(nèi)存與子文件的映射;步驟3,為所述文件建立索引表,將索引表中的表項與數(shù)據(jù)單元一一對應(yīng),所述表項中存儲該表項對應(yīng)的數(shù)據(jù)單元中數(shù)據(jù)記錄的索引。本發(fā)明能夠解決最大僅能夠支持2G的文件,以及在有大量并發(fā)請求到來的時候僅能串行順序處理,使得處理效率較低的問題。
文檔編號G06F17/30GK103186617SQ20111045740
公開日2013年7月3日 申請日期2011年12月30日 優(yōu)先權(quán)日2011年12月30日
發(fā)明者郭祎, 徐廣鑫 申請人:北京新媒傳信科技有限公司