一種用于多文件的存儲方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲,特別涉及一種大數(shù)據(jù)的多文件存儲方法。
【背景技術(shù)】
[0002]隨著智慧醫(yī)療的迅速發(fā)展和海量醫(yī)學(xué)數(shù)據(jù)的出現(xiàn),需要相應(yīng)的大型數(shù)據(jù)庫作為載體來保存這些數(shù)據(jù),但大數(shù)據(jù)的調(diào)度成了一個大問題。醫(yī)學(xué)界的文件檢索數(shù)量隨著網(wǎng)絡(luò)資源也呈指數(shù)級增長,尤其是小文件的更新速度和累積量都不斷提升,已經(jīng)成為醫(yī)療云存儲亟待解決的問題。盡管分布式文件系統(tǒng)已經(jīng)被廣泛應(yīng)用于大規(guī)模數(shù)據(jù)的存儲、分析中,很多機構(gòu)都已采用分布式文件系統(tǒng)來解決快速增長的數(shù)據(jù)問題。然而現(xiàn)有分布式文件系統(tǒng)的設(shè)計主要針對大文件的讀寫,大量小文件的存儲會降低文件系統(tǒng)整體性能,不能被很好地應(yīng)用在醫(yī)學(xué)檢索等以小文件存儲為主的系統(tǒng)中。因此,針對相關(guān)技術(shù)中所存在的上述問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0003]為解決上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明提出了一種用于多文件的存儲方法,用于在云存儲平臺中對文件進(jìn)行處理,所述云存儲平臺包括三層結(jié)構(gòu),即用戶接口層,業(yè)務(wù)邏輯層和存儲層,其特征在于,所述業(yè)務(wù)邏輯層首先將低于預(yù)設(shè)大小的文件進(jìn)行合并,然后建立文件索引,將存儲層構(gòu)建在分布式文件系統(tǒng)上,為用戶提供文件讀取和寫入接口。
[0004]優(yōu)選地,所述分布式文件系統(tǒng)采用將Web服務(wù)器和服務(wù)器集群分離的方式,并且所述用戶接口層即提供的用戶界面,用于使用戶發(fā)送請求和接收反饋信息;
[0005]所述文件索引包括資源集合主索引和資源條目次索引,主索引數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫中,通過關(guān)系數(shù)據(jù)庫訪問接口提供訪問,使用Java中的Map數(shù)據(jù)結(jié)構(gòu)保存,在資源集合已經(jīng)寫入數(shù)據(jù)庫的基礎(chǔ)上,增加在資源條目添加時由系統(tǒng)生成值的字段,主索引中的數(shù)據(jù)采用Key/Value結(jié)構(gòu),使用Java中Map數(shù)據(jù)結(jié)構(gòu),在服務(wù)啟動的時候根據(jù)數(shù)據(jù)庫中內(nèi)容初始化該Map對象并一直存在,當(dāng)有新的資源集合加入或有的被刪除的時候,對該Map對象進(jìn)行更新;次索引是通過開源項目Lucene創(chuàng)建的,支持小文件元數(shù)據(jù)檢索,每當(dāng)用戶添加資源條目的時候?qū)崟r更新索引文件;多個用戶在一個資源集合下同時添加資源條目時,實現(xiàn)文件寫入的并發(fā)控制;
[0006]所述將文件進(jìn)行合并進(jìn)一步包括:創(chuàng)建SequenceFile對象,通過過濾器的過濾,對符合預(yù)設(shè)條件的文件進(jìn)行合并,根據(jù)資源條目所在的資源集合在主索引中查找,查找到資源集合對應(yīng)的文件路徑后,倉Il建SequenceFile對象,并獲得SequenceFile的Writer對象并對其進(jìn)行配置,準(zhǔn)備寫入文件,在執(zhí)行文件寫入的同時開啟一個新的線程,將該資源條目對應(yīng)的文件位值、長度信息寫入資源條目次索引,資源條目寫入成功后關(guān)閉輸出流,返回提交成功,否則返回提交失敗。
[0007]優(yōu)選地,所述業(yè)務(wù)邏輯層還包括分布式系統(tǒng)客戶端,其封裝了操作文件系統(tǒng)與外界交互的API,當(dāng)文件系統(tǒng)接收到文件讀取請求時,首先經(jīng)過文件過濾器進(jìn)行判斷,若屬于被合并的文件則首先在緩存中查找文件的元數(shù)據(jù)信息,若不存在元數(shù)據(jù)信息,則在索引文件中進(jìn)行查找,若在索引文件中查找不到則與名字節(jié)點通信,在查找到文件元數(shù)據(jù)后構(gòu)建SequenceFile對象,然后獲得SequenceFile的Reader對象向數(shù)據(jù)節(jié)點發(fā)送讀取請求,將數(shù)據(jù)傳輸給用戶后關(guān)閉輸入流。
[0008]優(yōu)選地,所述文件寫入進(jìn)一步包括:當(dāng)Web服務(wù)器接收到用戶提交資源請求時,首先判斷是否需要進(jìn)行小文件合并,若不需要文件合并,則直接使用分布式文件系統(tǒng)寫入接口進(jìn)行寫入,文件合并后通過分布式文件系統(tǒng)客戶端準(zhǔn)備將文件寫入分布式文件系統(tǒng),在分布式系統(tǒng)客戶端寫入文件的同時,調(diào)用小文件索引更新模塊執(zhí)行小文件索引及更新,寫入和更新通過不同的線程同時執(zhí)行,當(dāng)分布式文件系統(tǒng)寫入成功后Web服務(wù)向客戶端返回提交成功信息;
[0009]所述文件讀取進(jìn)一步包括:在用戶需要瀏覽文件內(nèi)容或下載文件時發(fā)送文件讀取請求,Web服務(wù)器接收到用戶的讀取請求,首先通過檢索系統(tǒng)根據(jù)用戶提交的條件進(jìn)行檢索,得到用戶需要的資源條目結(jié)果集返回給用戶瀏覽,同時將結(jié)果集中顯示在用戶界面的條目集合發(fā)送給緩存模塊,并開啟一個單獨的線程更新緩存,當(dāng)用戶瀏覽完返回的結(jié)果集頁面請求下載或瀏覽詳細(xì)時,Web服務(wù)調(diào)用分布式文件系統(tǒng)客戶端準(zhǔn)備讀取文件內(nèi)容,分布式文件系統(tǒng)客戶端首先在緩存中查找文件位置信息,若沒有查找到文件位置信息,則在文件索引中查找,當(dāng)查找到位置信息后則直接到數(shù)據(jù)節(jié)點讀取數(shù)據(jù),返回給用戶。
[0010]優(yōu)選地,在所述建立文件索引之后,該方法還包括對索引進(jìn)行預(yù)取,所述預(yù)取進(jìn)一步包括:
[0011]在用戶發(fā)出檢索請求后,Web服務(wù)根據(jù)用戶檢索條件查詢符合用戶需要的資源條目結(jié)果集,返回給用戶,同時創(chuàng)建異步線程更新緩存,在返回用戶結(jié)果集到用戶瀏覽結(jié)果集并確定點擊下載或瀏覽操作之間的時間間隔內(nèi)更新緩存內(nèi)容,當(dāng)接收到更新緩存內(nèi)容請求時,調(diào)用索引模塊進(jìn)行檢索,將當(dāng)前結(jié)果集條目的元數(shù)據(jù)載入緩存,當(dāng)用戶發(fā)送下載或瀏覽請求時,Web服務(wù)調(diào)用分布式文件系統(tǒng)客戶端在緩存中查找元數(shù)據(jù)開始讀取數(shù)據(jù)并向客戶端傳輸;服務(wù)器維護(hù)一個固定線程數(shù)量的線程池,在每次接收到更新緩存請求的時候調(diào)用一個線程處理,若線程池內(nèi)沒有空閑線程則讓該緩存任務(wù)等待,利用FIFO算法建立緩存池并配置緩存池大小,將鍵值對key/value保存在緩存池中,其中文件名作為key,文件的數(shù)據(jù)節(jié)點ID,起始位置和長度的組合作為value,淘汰最久以前的緩存條目,該緩存池提供兩個操作即put操作和get操作,put操作往緩存池放入數(shù)據(jù),如果緩存池里面已有的數(shù)據(jù)達(dá)到了上限,則根據(jù)FIFO緩存替換算法替換數(shù)據(jù);Get操作根據(jù)key值獲取相應(yīng)的value值。
[0012]本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點:
[0013]針對用于全文檢索的小文件的讀寫,通過索引和預(yù)取提高檢索效率,在大量小文件的存儲和讀取的情況下保持云存儲平臺的響應(yīng)速度和分布式文件系統(tǒng)整體性能。
【附圖說明】
[0014]圖1是根據(jù)本發(fā)明實施例的用于多文件的存儲方法的流程圖。
【具體實施方式】
[0015]下文與圖示本發(fā)明原理的附圖一起提供對本發(fā)明一個或者多個實施例的詳細(xì)描述。結(jié)合這樣的實施例描述本發(fā)明,但是本發(fā)明不限于任何實施例。本發(fā)明的范圍僅由權(quán)利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié)以便提供對本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無這些具體細(xì)節(jié)中的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實現(xiàn)本發(fā)明。
[0016]本發(fā)明的一方面提供了一種用于小文件讀寫的用于多文件的存儲方法,為大數(shù)據(jù)存取和利用提供了新的解決方案。圖1是根據(jù)本發(fā)明實施例的用于多文件的存儲方法流程圖。
[0017]用戶在云存儲平臺中提交資源后,資源首先需要經(jīng)過文件過濾器的篩選,過濾條件包括文件大小、類型等,通過篩選的文件統(tǒng)稱為小文件。隨后對這些小文件提出一種合并策略,一定數(shù)量的小文件合并后生成新的存儲文件,一般對屬于同一屬性的小文件進(jìn)行合并。在將新的存儲文件寫入系統(tǒng)的同時更新索引文件。云存儲平臺中的索引包括,主索引是文件所屬的資源集合,如類型等;次索引是具體的資源條目。在需要讀取文件時,依次在主索引和次索引中查詢,縮小了查詢范圍,能夠保證較高的讀取響應(yīng)。
[0018]本發(fā)明的云存儲平臺系統(tǒng)的存儲層設(shè)計的核心包括:首先對小文件進(jìn)行合并生成存儲文件,再基于數(shù)據(jù)庫的存儲特征對合并后的文件建立次索引,通過索引預(yù)取提高文件讀取的響應(yīng)速度。以下詳細(xì)介紹存儲層具體的細(xì)節(jié)。
[0019]I基于小文件合并的存儲文件生成策略
[0020]將文件劃分成一個個block即塊,塊的默認(rèn)大小是64M。分布式文件系統(tǒng)的命名空間被持久化在一個鏡像文件中,啟動時由名字節(jié)點將其加載到內(nèi)存中。大量小文件會造成名字節(jié)點內(nèi)存不足,生成過大的鏡像文件降低讀取文件時文件的查找效率。對每一