信息存儲處理方法
【技術領域】
[0001] 本發明涉及網絡存儲,特別涉及一種大數據存儲處理方法。
【背景技術】
[0002] 在大規模存儲系統中,為了提高存儲系統的可靠性、改善IO性能以及滿足海量數 據存儲需求,將多個存儲集群聯合起來,形成統一的存儲設備,例如將數據分散存儲到集群 中的不同磁盤上以保證并行性,并采用冗余校驗機制,在保證數據安全性的同時可獲得大 容量和高數據傳輸率,對于順序讀寫數據的存儲系統,一般對數據傳輸帶寬要求不苛刻,但 對數據可靠性、存儲空間要求較高。即使考慮視頻回放、備份恢復等對帶寬的額外需求,采 用存儲集群時,也存在著嚴重的性能浪費,同時伴隨著嚴重的能源浪費和磁盤損耗,為了計 算校驗數據,數據寫入需要額外的讀寫開銷和延時,降低了存儲集群的吞吐能力。另一方 面,當向存儲集群寫入的數據塊隨機時,磁盤就需要尋址到新的數據位置,此時,隨機讀寫 傳輸性能比順序讀寫傳輸性能更低。
【發明內容】
[0003] 為解決上述現有技術所存在的問題,本發明提出了一種信息存儲處理方法,包 括:
[0004] 將非順序的讀寫請求地址映射到連續的實際地址空間,在緩存中緩存并構造與存 儲集群條塊對齊的寫數據,對物理地址順序化的寫請求進行聚合或拆分,在內存緩存區內 組織成為與存儲集群的條塊對齊的寫請求,以使寫請求在存儲集群上覆蓋完整的條塊。
[0005] 優選地,所述在緩存中緩存并構造與存儲集群條塊對齊的寫數據,包括采用非易 失性RAM鏡像內存緩存區內的寫請求,并且進一步包括:
[0006] 運行一個對齊寫請求的驅動程序,該程序包括接收線程和發送線程和寫請求隊 列,其中;
[0007] 接收線程用于監控和接收應用程序發送給存儲集群的寫請求,首先進行地址轉 換,轉換為物理空間內連續的寫請求,并將其加入到寫請求隊列中;所述發送線程用于當寫 請求隊列不為空時從寫請求隊列中取出并處理寫請求;
[0008] 首先,通過讀取存儲集群配置文件獲得存儲集群的參數,該參數包括條塊單位、成 員磁盤數,再由條塊單位乘以成員磁盤數,獲得條塊大小,可條塊單位和成員磁盤數;
[0009] 將寫請求表示為(buf,cnt,〇ff),其中buf為用戶空間緩存區指針,指向寫數據的 起始地址;cnt為寫數據塊的大小;off是偏移量,是用戶數據寫入設備文件的起始位置;
[0010] 發送線程創建一個發送緩存區數組,記作bufsend[M],其中M為大于1的正整數, 緩存區bufsend[i] (0 <i〈M)的大小等于存儲集群的條塊大小,記為STSize;獲取緩存區 bufsend[i]緩存的字節數filled[i],以及空閑字節數empty[i];
[0011] 發送線程首先從bufsend[M]中獲得空閑緩存區bufsend[i],若沒有則等待,對于 bufsend[i],初始empty[i]為STSize,filled[i] = 0,然后按如下流程處理寫請求隊列中 的與請求:
[0012] 緩存區bUfsend[i]填滿后,發送線程將其中的數據發送給存儲集群,對存儲集 群條塊的整體寫入,對齊驅動程序監控應用程序對設備文件的打開與關閉操作,進行現 場保護與恢復;當應用程序關閉設備文件、發送線程最后一次向存儲集群寫數據時,在 bufsend[i]中的數據寫入存儲集群的同時,記錄本次寫操作的off和cnt值;當設備文件 再次打開時,根據記錄的off和cnt值,進行現場恢復,然后進入正常的寫請求處理流程。
[0013] 本發明相比現有技術,具有以下優點:
[0014] 本發明提出了一種存儲方法,在寫入磁盤過程中避免了因生成校驗數據而產生的 額外讀寫開銷,通過數據的順序寫入有效減少了尋址操作,提高了存儲性能。
【附圖說明】
[0015] 圖1是根據本發明實施例的信息存儲處理方法的流程圖。
【具體實施方式】
[0016] 下文與圖示本發明原理的附圖一起提供對本發明一個或者多個實施例的詳細描 述。結合這樣的實施例描述本發明,但是本發明不限于任何實施例。本發明的范圍僅由權 利要求書限定,并且本發明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細節 以便提供對本發明的透徹理解。出于示例的目的而提供這些細節,并且無這些具體細節中 的一些或者所有細節也可以根據權利要求書實現本發明。
[0017] 本發明的一方面提供了一種信息存儲處理方法,以提高順序數據存儲中存儲集群 的寫入性能。圖1是根據本發明實施例的方法流程圖。
[0018] 本發明利用區段映射進行地址轉換,將非順序的讀寫請求地址映射到連續的地址 空間,以實現連續寫入。特別適合順序數據存儲中的大塊數據的地址轉換;利用基于緩存的 存儲集群寫優化存儲架構,在緩存中緩存并構造與存儲集群條塊對齊的寫數據,然后整個 條塊寫入存儲集群,實現對存儲集群的完全寫。
[0019] 在寫數據地址轉換和對齊寫數據過程中,首先引入虛擬地址、物理地址的定義。虛 擬地址是應用程序發來的讀寫請求地址;物理地址是數據在存儲集群存儲空間內的實際地 址。地址轉換過程實現虛擬地址到物理地址的映射,即將非順序(可能部分順序)的虛擬 地址映射為連續的物理地址,并記錄映射關系到地址轉換表。經過地址轉換后,寫操作在物 理地址空間內完全順序化。
[0020] 對齊寫數據是對物理地址順序化的寫請求進行聚合或拆分,在內存緩存區內組織 成為與存儲集群條塊對齊的寫請求,即1個寫請求在存儲集群上恰好覆蓋1個或多個完整 的條塊。為了防止掉電導致緩存區內數據丟失,采用非易失性RAM鏡像內存緩存區內的寫 請求。
[0021] 在本發明的區段映射中實現地址轉換,以每次寫操作的寫區段為單位進行地址映 射,主要數據結構如下。
[0022] 1)映射元數據:開多式為(Vistart,Pistart,Leni,next),描述一個映射區段,Vistart, PistartAeivnext分別為映射區段i的虛擬起始地址、物理起始地址區段長度和相鄰映射元 數據索引,外存數據結構簡稱元數據;
[0023] 2)映射存儲區:外存中映射元數據的存儲區段;
[0024] 3)地址轉換表:記錄每個虛擬地址對應的元數據索引(index),外存數據結構。
[0025] 地址轉換時,先根據虛擬地址從地址轉換表獲得元數據索引,然后在映射存儲區 由索引值獲得元數據,并根據元數據進行區段地址轉換。
[0026] 地址轉換時可以從虛擬區段(Vstart,VEnd)中的Vsta^ljVEnd,其中Vstart為虛擬區段 的虛擬起始地址,ViEnd為虛擬區段的虛擬結束地址,根據虛擬地址逐個查詢,最壞情況是查 詢所有塊的虛擬地址。
[0027] 為了進一步提高地址轉換效率,可以考慮引入LSM樹進行映射區段查詢。在內存 中建立映射元數據的LSM樹,用(ViStart,ViEnd,pimrta)表示葉子節點,其中Vstart為區段i的虛 擬起始地址,ViEnd為區段i的虛擬結束地址,pimeta是指向元數據(ViStal^PistartAeivnext) 的指針(已讀入內存)。
[0028] 父節點的關鍵字是所有子樹中的最大關鍵字,每個葉子節點只包含兩個關鍵字, 表示一個順序區段。查找時如果查找值位于某個區段則查找成功,否則可由其父節點的關 鍵字,確定其相鄰區段,映射按虛擬地址由低到高的順序排列在鏈表中(由映射插入規則, 虛擬區段不會相交)。
[0029] 設請求k的虛擬地址區段為(Vkstart,VkEnd),利用LSM樹查詢映射區段的過程如下: [0030] 1)分別查找Vkstart,VkEnd在LSM樹中的位置;
[0031] 2)將Vkstart,VkEnd之間所有存在的映射作為要查找的映射。
[0032] 為了防止LSM樹過大,優選地可設定LSM樹的最大節點數,當超過該最大節點數時 便構建一棵新的LSM樹,查找時先根據虛擬地址確定所在的LSM樹再進行查找。
[0033] 在數據寫入請求對齊方面,順序數據存儲中為了實現對存儲集群的完全寫,需要 運行一個對齊寫請求的驅動程序,主要包括2個線程和1個寫請求隊列,2個線程分別是接 收和發送線程。
[0034] 1)接收線程:監控和接收應用程序發送給存儲集群的寫請求,首先進行上述地址 轉換,轉換為物理空間內連續的寫請求,并將其加入到寫請求隊列中。
[0035] 2)發送線程:當寫請求隊列不為空時從寫請求隊列中取出并處理寫請求。
[0036] 首先,需要獲取存儲集群的參數,包括條塊單位、成員磁盤數,再由條塊單位乘以 成員磁盤數,獲得條塊大小。可通過讀取存儲集群配置文件獲得條塊單位和成員磁盤數。
[0037] 設寫請求表示為(buf,cnt,off