亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種用于多文件的存儲方法_2

文檔序號:8457369閱讀:來源:國知局
個文件的讀寫操作,首先在命名空間中查詢,查找文件的塊地址、文件大小等信息,然后再在數(shù)據(jù)節(jié)點空間中進行檢索。當讀取的文件很小時,讀寫過程中主要時間都消耗在了檢索查詢中,而不是文件數(shù)據(jù)的傳輸,影響服務(wù)器集群的處理效率。
[0021]云存儲平臺利用小文件合并來生成存儲文件。首先實現(xiàn)一個過濾器對文件按類型和大小進行過濾,選擇可以進行全文檢索的文檔文件,本文文件大小設(shè)定閾值為10M,當文件大于1M時則視為大文件,不需要進行合并。過濾后云存儲平臺按照文件條目所屬資源集合為單位對過濾后的小文件進行合并成為文件塊。資源集合是具有一定相關(guān)性的資源條目的集合,一個資源條目只屬于一個資源集合。通常集合按照屬性范圍、時間等劃分,文件可以按照屬性域來劃分。新的文件塊內(nèi)資源條目具有很大的關(guān)聯(lián)性,在以后的數(shù)據(jù)處理中就可以將文件塊分配給一個MapReduce任務(wù),避免了因任務(wù)的計算量太少而浪費任務(wù)分配和切換的時間,減少數(shù)據(jù)在集群中的移動,正符合Hadoop移動計算比移動數(shù)據(jù)更有效的原理。
[0022]2建立次索引優(yōu)化文件讀取速度
[0023]小文件合并后名字節(jié)點內(nèi)存是整個文件系統(tǒng)的性能瓶頸,因為所有的文件元數(shù)據(jù)信息需要存儲在其內(nèi)存中,將小文件合并后可以減少文件的數(shù)量,節(jié)省很多內(nèi)存空間,但是合并后的文件讀取效率會很低。
[0024]本發(fā)明優(yōu)選的實施例采用分級索引來建立小文件元數(shù)據(jù)索引,將大的索引文件以合理的規(guī)則劃分為小的索引文件。以資源集合為主索引,每個資源集合下的資源條目內(nèi)容作為次索引,這樣在查找的時候先根據(jù)資源條目所在集合進行查找,再到相應(yīng)的次索引文件中進行查找。雖然多了一個在主索引中查找的過程,但是由于資源集合數(shù)不會太多,其查找時間是很小的,經(jīng)過劃分的次索引文件比全局索引文件小的多,所以整體上會提高查找效率。同時次索引文件也并非全部加載入內(nèi)存,可根據(jù)內(nèi)存使用情況并結(jié)合緩存策略進行靈活調(diào)度,解決內(nèi)存不足的問題。
[0025]3基于索引預(yù)取的文件響應(yīng)速度優(yōu)化
[0026]這里提出的索引預(yù)取是指通過用戶當前訪問的數(shù)據(jù)預(yù)測用戶下面將會訪問的數(shù)據(jù),并將其索引調(diào)入緩存。若能準確預(yù)測,就可提前將用戶將要訪問的數(shù)據(jù)載入緩存,當用戶訪問時就能得到較快的系統(tǒng)響應(yīng)。
[0027]用戶在下載或瀏覽資源條目前,通常必須通過檢索或目錄查找的方式得到“中間結(jié)果集”,然后才能在其中選擇需要的資源條目進一步訪問。在用戶看到結(jié)果集頁面與執(zhí)行下載或瀏覽之間存在一個數(shù)秒的間隔,在這段時間內(nèi)通過提前緩存中間結(jié)果集中資源條目的索引,在用戶點擊下載或瀏覽時就不用再執(zhí)行一系列文件元數(shù)據(jù)查詢,直接進行傳輸文件即可,這樣可以很大程度上提高這些文件的請求響應(yīng)。這種響應(yīng)提升并不需要太多的內(nèi)存,假設(shè)有10萬個用戶同時在執(zhí)行檢索,每個結(jié)果集頁面顯示20條資源條目,緩存一個文件的元數(shù)據(jù)信息需要150B,也只需要0.3G內(nèi)存空間。
[0028]以下詳細描述了本發(fā)明云存儲平臺的存儲層構(gòu)架。云存儲平臺系統(tǒng)除了利用上述策略,在實現(xiàn)時,其存儲層架構(gòu)是系統(tǒng)的基礎(chǔ)。云存儲平臺存儲層構(gòu)建在Hadoop集群上的分布式存儲系統(tǒng)上,提供基本的文件保存和讀取服務(wù)。
[0029]云存儲平臺存儲層的架構(gòu)采用三層結(jié)構(gòu)設(shè)計:用戶接口層,業(yè)務(wù)邏輯層和存儲層,而且為了提高性能,采用將Web服務(wù)器和服務(wù)器集群分離的方式。用戶接口層即提供的用戶界面,用戶通過該層提供的功能發(fā)送請求和接收反饋信息。業(yè)務(wù)邏輯層是小文件讀取和寫入的功能實現(xiàn)層,包括文件合并、索引構(gòu)建和緩存構(gòu)建等。
[0030]業(yè)務(wù)邏輯層包括文件合并、檢索系統(tǒng)、小文件索引、緩存和分布式系統(tǒng)客戶端等功能模塊。各模塊具體實現(xiàn)如下:
[0031]⑴文件合并
[0032]文件合并功能包含2個階段:倉ij建SequenceFile對象進行小文件進行合并。通過過濾器的過濾,對符合合并要求的文件進行合并,首先根據(jù)資源條目所在的資源集合在主索引中查找,查找到資源集合對應(yīng)的文件路徑后,創(chuàng)建SequenceFile對象,并獲得SequenceFile的Writer對象并對其進行配置,準備寫入文件。在執(zhí)行文件寫入的同時開啟一個新的線程,將該資源條目對應(yīng)的文件位值、長度等元數(shù)據(jù)信息寫入資源條目次索引。資源條目寫入成功后關(guān)閉輸出流,返回提交成功,否則返回提交失敗。
[0033](2)檢索系統(tǒng)
[0034]提供文件檢索功能,依靠該模塊基于“中間結(jié)果集”對分布式文件系統(tǒng)進行讀取優(yōu)化。
[0035](3)小文件索引
[0036]構(gòu)建小文件索引,包括資源集合主索引和資源條目次索引,提供索引文件創(chuàng)建、追加和刪除記錄等功能。
[0037]主索引數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫中,通過關(guān)系數(shù)據(jù)庫訪問接口提供訪問,使用Java中的Map數(shù)據(jù)結(jié)構(gòu)保存。因為資源集合已經(jīng)存入數(shù)據(jù)庫,根據(jù)此索引只需要增加在資源條目添加的時候由系統(tǒng)生成值的字段,所以可以保存在關(guān)系數(shù)據(jù)庫中,不影響處理效率。主索引中的數(shù)據(jù)采用Key/Value結(jié)構(gòu),可以使用Java中Map數(shù)據(jù)結(jié)構(gòu)提高查詢效率。另外,為保證檢索效率,必須在服務(wù)啟動的時候根據(jù)數(shù)據(jù)庫中內(nèi)容初始化該Map對象并一直存在,由于主索引文件數(shù)不多,Map對象占用內(nèi)存很小,所以系統(tǒng)開銷有限,當有新的資源集合加入或有的被刪除的時候,需對該Map對象進行更新。
[0038]次索引是通過開源項目Lucene創(chuàng)建的,支持小文件元數(shù)據(jù)檢索。Lucene有一套完善的索引構(gòu)建、更新和查找解決方案,而且在索引文件小于IG時查詢效率非常高,可用于構(gòu)建商用搜索引擎。云存儲平臺要創(chuàng)建的索引需要一些特殊的功能,如每當用戶添加資源條目的時候需實時更新索引文件;多個用戶在一個資源集合下同時添加資源條目時,文件寫入的并發(fā)控制;壓縮索引文件以減少內(nèi)存占用等。
[0039]⑷預(yù)取
[0040]為了更好地提升響應(yīng)速度,這里提供對用戶感興趣的“中間結(jié)果集”的緩存管理,包括緩存空間維護,緩存更新,更新算法維護等功能。
[0041]在用戶發(fā)出檢索請求后,Web服務(wù)根據(jù)用戶檢索條件查詢符合用戶需要的資源條目結(jié)果集,返回給用戶,同時創(chuàng)建異步線程更新緩存,在返回用戶結(jié)果集到用戶瀏覽結(jié)果集并確定點擊下載或瀏覽操作之間的時間間隔內(nèi)更新緩存內(nèi)容。當緩存模塊接收到更新緩存內(nèi)容請求時,調(diào)用索引模塊進行檢索,將當前結(jié)果集條目的元數(shù)據(jù)載入緩存。當用戶發(fā)送下載或瀏覽請求時,Web服務(wù)調(diào)用分布式系統(tǒng)客戶端在緩存中查找元數(shù)據(jù)開始讀取數(shù)據(jù)并向客戶端傳輸。
[0042]系統(tǒng)維護一個固定線程數(shù)量的線程池在每次接收到更新緩存請求的時候調(diào)用一個線程去處理,若線程池內(nèi)沒有空閑線程則讓該緩存任務(wù)等待。這樣可以將緩存更新任務(wù)占的系統(tǒng)資源維持在一個合理的范圍內(nèi),不影響系統(tǒng)整體性能。本發(fā)明選擇FIFO算法實現(xiàn)緩存模塊調(diào)度功能,以最高效的方式淘汰最久以前的緩存條目。具體實現(xiàn)是:建立緩存池,配置緩存池大小,默認為32M,可以保存20萬條文件元數(shù)據(jù)信息。緩存池里面存儲的是一個個鍵值對key/value,文件名作為key,文件的數(shù)據(jù)節(jié)點ID,起始位置和長度的組合作為value。該緩存池提供兩個操作put和get。put往緩存池放入數(shù)據(jù),如果緩存池里面已有的數(shù)據(jù)達到了上限,則根據(jù)緩存替換算法替換相應(yīng)的數(shù)據(jù),如果還有空間直接放入就行。Get操作根據(jù)key值獲取相應(yīng)的value值,如沒有則返回空。
[0043](5)分布式系統(tǒng)客戶端
[0044]分布式系統(tǒng)客戶端封裝了操作文件系統(tǒng)與外界交互的API,包括讀寫文件和查詢文件位置等。當文件系統(tǒng)接收到文件讀取請求時,首先經(jīng)過文件過濾器進行判斷,屬于被合并了的文件則首先在緩存中查找文件的元數(shù)據(jù)信息,若不存在,則在索引文件中進行查找,若還是查找不到則與名字節(jié)點通信。查找到文件元數(shù)據(jù)后構(gòu)建SequenceFile對象然后獲得SequenceFile的Reader對象向數(shù)據(jù)節(jié)點發(fā)送讀取請求,將數(shù)據(jù)傳輸給用戶后關(guān)閉輸入流,返回完成。
[0045
當前第2頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1