本發(fā)明涉及數(shù)據(jù)存儲技術領域,具體而言,涉及一種磁盤內部的數(shù)據(jù)緩存方法及裝置。
背景技術:
一般文件服務器或圖片服務器都會有代理服務讀取功能,也就是通過代理功能實現(xiàn)從其他服務器讀取文件的功能,比如從ftp、http等服務器上讀取??紤]到從這些服務器上讀取存在速度慢的問題,常見的如網(wǎng)絡不穩(wěn)定、服務器負荷壓力大等情況,都可能會導致讀取性能低的問題。為了改善這個問題,服務器通常都會采用磁盤緩存文件的做法。常規(guī)的做法是直接在磁盤上創(chuàng)建文件副本并建立一個索引文件來記錄文件總量及訪問關系。這種方式建立的文件副本是1:1,當緩存的總量較大時(如:8G),而文件又相對較小時(如:10KB),就會產(chǎn)生過萬的文件數(shù)量,不僅讀取性能下降,還會產(chǎn)生不少磁盤碎片造成空間浪費。
另外一種磁盤緩存文件的做法是通過文件拼湊的形式組合成大文件,這種方式通常會在大文件中劃分連續(xù)的一塊區(qū)域來存儲一個文件,能夠保證順序讀寫,提升讀取速度。但這種方式有個嚴重的缺陷是不能支持隨機擦寫,比如一塊空間一旦被文件占用后,當此文件刪除后,空間也不能再次回收利用,造成很大的磁盤空間浪費,造成有限駐留空間內緩存的有效文件數(shù)據(jù)較少。
發(fā)明人在研究中發(fā)現(xiàn),現(xiàn)有技術中的磁盤緩存文件的方法均不理想,針對上述兩種磁盤緩存文件的缺陷,目前尚未提出一種較好的解決方式。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明實施例的目的在于提供一種磁盤內部的數(shù)據(jù)緩存方法及裝置,其通過創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,并對該內存映射文件的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,同時提升了緩存文件的讀寫速度。
第一方面,本發(fā)明實施例提供了一種磁盤內部的數(shù)據(jù)緩存方法,包括:
創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,所述內存映射文件對應有虛擬地址空間的空閑內存區(qū)域;所述內存映射文件預先被劃分為多個空閑存儲塊;
根據(jù)預存的緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量;
從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,并將所述空閑存儲塊設置為待用存儲塊;
通過所述待用存儲塊存儲所述緩存文件,得到存儲文件。
結合第一方面,本發(fā)明實施例提供了第一方面的第一種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存方法,還包括:
實時檢測所述內存映射文件對應的所述空閑內存區(qū)域的大?。?/p>
在檢測到所述空閑內存區(qū)域的大小小于第一設定閾值時,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量;其中,所述第二設定閾值大于所述第一設定閾值;
將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
結合第一方面的第一種可能的實施方式,本發(fā)明實施例提供了第一方面的第二種可能的實施方式,其中,實時檢測所述內存映射文件對應的所述空閑內存區(qū)域的大小,包括:
實時獲取所述內存映射文件中所述空閑存儲塊的第二數(shù)量;
根據(jù)所述第二數(shù)量,計算所述內存映射文件中所述空閑內存區(qū)域的大小。
結合第一方面的第一種可能的實施方式,本發(fā)明實施例提供了第一方面的第三種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存方法,還包括:
每檢測到一個所述存儲文件時,將所述存儲文件存儲的所述緩存文件的文件名存儲到預先建立的熱度鏈表的頭部;其中,所述熱度鏈表包括:用于存儲所述文件名的第一文件名存儲區(qū)。
結合第一方面的第三種可能的實施方式,本發(fā)明實施例提供了第一方面的第四種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存方法,還包括:
每檢測到一個所述存儲文件時,將所述存儲文件及其存儲的所述緩存文件的文件名存儲到預先建立的數(shù)據(jù)緩存表中;其中,所述數(shù)據(jù)緩存表包括:用于存儲所述存儲文件的存儲文件存儲區(qū)和用于存儲所述文件名的第二文件名存儲區(qū)。
結合第一方面的第四種可能的實施方式,本發(fā)明實施例提供了第一方面的第五種可能的實施方式,其中,將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中,包括:
根據(jù)所述熱度鏈表中所述第一文件名存儲區(qū)存儲的所述文件名從后到前的排序順序,獲取所述第三數(shù)量的所述文件名作為待釋放文件名;
根據(jù)所述待釋放文件名從所述數(shù)據(jù)緩存表中查找匹配的所述存儲文件,作為待釋放存儲文件;
將所述待釋放存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
結合第一方面,本發(fā)明實施例提供了第一方面的第六種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存方法,還包括:將多個所述空閑存儲塊串連在一起建立內存塊鏈表;從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,包括:
按照所述內存塊鏈表中所述空閑存儲塊的串連順序,從所述內存塊鏈表抽取所述第一數(shù)量的所述空閑存儲塊。
結合第一方面,本發(fā)明實施例提供了第一方面的第七種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存方法,還包括:將多個所述待用存儲塊串連在一起建立文件塊鏈表;
通過所述待用存儲塊存儲所述緩存文件,得到存儲文件,包括:
按照所述文件塊鏈表中所述待用存儲塊的串連順序,依次通過所述待用存儲塊存儲所述緩存文件,得到所述存儲文件。
第二方面,本發(fā)明實施例還提供了一種磁盤內部的數(shù)據(jù)緩存裝置,包括:
創(chuàng)建模塊,用于創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,所述內存映射文件對應有虛擬地址空間的空閑內存區(qū)域;所述內存映射文件預先被劃分為多個空閑存儲塊;
第一計算模塊,用于根據(jù)預存的緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量;
抽取模塊,用于從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,并將所述空閑存儲塊設置為待用存儲塊;
第一存儲模塊,用于通過所述待用存儲塊存儲所述緩存文件,得到存儲文件。
結合第二方面,本發(fā)明實施例提供了第二方面的第一種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存裝置,還包括:
檢測模塊,用于實時檢測所述內存映射文件對應的所述空閑內存區(qū)域的大?。?/p>
第二計算模塊,用于在檢測到所述空閑內存區(qū)域的大小小于第一設定閾值時,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量;其中,所述第二設定閾值大于所述第一設定閾值;
釋放模塊,用于將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
結合第二方面的第一種可能的實施方式,本發(fā)明實施例提供了第二方面的第二種可能的實施方式,其中,所述檢測模塊,包括:
第一獲取單元,用于實時獲取所述內存映射文件中所述空閑存儲塊的第二數(shù)量;
計算單元,用于根據(jù)所述第二數(shù)量,計算所述內存映射文件中所述空閑內存區(qū)域的大小。
結合第二方面的第一種可能的實施方式,本發(fā)明實施例提供了第二方面的第三種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存裝置,還包括:
第二存儲模塊,用于每檢測到一個所述存儲文件時,將所述存儲文件存儲的所述緩存文件的文件名存儲到預先建立的熱度鏈表的頭部;其中,所述熱度鏈表包括:用于存儲所述文件名的第一文件名存儲區(qū)。
結合第二方面的第三種可能的實施方式,本發(fā)明實施例提供了第二方面的第四種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存裝置,還包括:
第三存儲模塊,用于每檢測到一個所述存儲文件時,將所述存儲文件及其存儲的所述緩存文件的文件名存儲到預先建立的數(shù)據(jù)緩存表中;其中,所述數(shù)據(jù)緩存表包括:用于存儲所述存儲文件的存儲文件存儲區(qū)和用于存儲所述文件名的第二文件名存儲區(qū)。
結合第二方面的第四種可能的實施方式,本發(fā)明實施例提供了第二方面的第五種可能的實施方式,其中,所述釋放模塊,包括:
第二獲取單元,用于根據(jù)所述熱度鏈表中所述第一文件名存儲區(qū)存儲的所述文件名從后到前的排序順序,獲取所述第三數(shù)量的所述文件名作為待釋放文件名;
查找單元,用于根據(jù)所述待釋放文件名從所述數(shù)據(jù)緩存表中查找匹配的所述存儲文件,作為待釋放存儲文件;
釋放單元,用于將所述待釋放存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
結合第二方面,本發(fā)明實施例提供了第二方面的第六種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存裝置,還包括:第一建立模塊,用于將多個所述空閑存儲塊串連在一起建立內存塊鏈表;
所述抽取模塊具體用于,按照所述內存塊鏈表中所述空閑存儲塊的串連順序,從所述內存塊鏈表抽取所述第一數(shù)量的所述空閑存儲塊。
結合第二方面,本發(fā)明實施例提供了第二方面的第七種可能的實施方式,其中,所述的磁盤內部的數(shù)據(jù)緩存裝置,還包括:第二建立模塊,用于將多個所述待用存儲塊串連在一起建立文件塊鏈表;
所述第一存儲模塊具體用于,按照所述文件塊鏈表中所述待用存儲塊的串連順序,依次通過所述待用存儲塊存儲所述緩存文件,得到所述存儲文件。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存方法及裝置,包括:創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,內存映射文件對應有虛擬地址空間的空閑內存區(qū)域;內存映射文件預先被劃分為多個空閑存儲塊;根據(jù)預存的緩存文件的大小,計算內存映射文件中用于存儲緩存文件的空閑存儲塊的第一數(shù)量;從內存映射文件中抽取第一數(shù)量的空閑存儲塊,并將空閑存儲塊設置為待用存儲塊;通過待用存儲塊存儲緩存文件,得到存儲文件,與現(xiàn)有技術中直接在磁盤上創(chuàng)建文件副本并建立索引文件來記錄文件總量及訪問關系的方式以及通過文件拼湊的形式組合成大文件的方式,存在讀取性能下降,易造成磁盤空間浪費相比,其能夠對多個空閑存儲塊的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,提升緩存文件訪問的命中率,同時提升了緩存文件的讀寫速度。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關的附圖。
圖1示出了本發(fā)明實施例所提供的一種磁盤內部的數(shù)據(jù)緩存方法的流程圖;
圖2示出了本發(fā)明實施例所提供的另一種磁盤內部的數(shù)據(jù)緩存方法的流程圖;
圖3示出了本發(fā)明實施例所提供的另一種磁盤內部的數(shù)據(jù)緩存方法的流程圖;
圖4示出了本發(fā)明實施例所提供的另一種磁盤內部的數(shù)據(jù)緩存方法的流程圖;
圖5示出了本發(fā)明實施例所提供的內存映射文件對應的內存塊鏈表的示意圖;
圖6示出了本發(fā)明實施例所提供磁盤內部的數(shù)據(jù)緩存方法的整體示意圖;
圖7示出了本發(fā)明實施例所提供的一種磁盤內部的數(shù)據(jù)緩存裝置的結構示意圖;
圖8示出了本發(fā)明實施例所提供的另一種磁盤內部的數(shù)據(jù)緩存裝置的結構示意圖;
圖9示出了本發(fā)明實施例所提供的一種磁盤內部的數(shù)據(jù)緩存裝置中檢測模塊和釋放模塊的結構示意圖。
主要標號說明:
11、創(chuàng)建模塊;12、第一計算模塊;13、抽取模塊;14、第一存儲模塊;15、檢測模塊;16、第二計算模塊;17、釋放模塊;151、第一獲取單元;152、計算單元;171、第二獲取單元;172、查找單元;173、釋放單元。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發(fā)明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例?;诒景l(fā)明的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
很多文件服務或數(shù)據(jù)庫服務通常會在以下三種情況采用磁盤駐留的方式來提升自身訪問性能。其中,采用磁盤駐留的方式不局限于上述三種方式:
(1)處理大數(shù)據(jù)量時。
(2)應用服務提供的數(shù)據(jù)并不是總能使用(如離線情況)。
(3)緩存的數(shù)據(jù)必須能在進程回收和機器重啟的情況下保持有效。
現(xiàn)有磁盤駐留方法一種是采用文件直接落盤的形式進行緩存,這種做法是通過在磁盤上創(chuàng)建文件副本并建立一個索引文件來記錄文件總量及訪問關系。而建立的文件副本數(shù)量是1:1,當緩存的總量較大時(如:8G),而文件又相對較小時(如:10KB),就會產(chǎn)生過萬的文件數(shù)量,不僅讀取性能下降,還會產(chǎn)生不少磁盤碎片造成空間浪費這種方法容易產(chǎn)生磁盤碎片,造成空間浪費。而另外一種磁盤駐留方法,是通過文件拼湊的形式組合成大文件,這種方式通常會在大文件中劃分連續(xù)的一塊區(qū)域來存儲一個文件,能夠保證順序讀寫,提升讀取速度。但這種方式有個嚴重的缺陷是不能支持隨機擦寫,比如一塊空間一旦被文件占用后,當此文件刪除后,空間也不能再次回收利用,造成磁盤空間浪費,導致有限駐留空間內緩存的有效文件數(shù)據(jù)較少。
基于上述磁盤駐留緩存文件暴露的缺點,本發(fā)明實施例提供了一種磁盤內部的數(shù)據(jù)緩存方法及裝置,其通過創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,并對該內存映射文件的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,同時提升了緩存文件的讀寫速度,下面通過實施例進行描述。
參見圖1所示的磁盤內部的數(shù)據(jù)緩存方法的流程圖,本發(fā)明實施例提供了一種磁盤內部的數(shù)據(jù)緩存方法,包括:
S101、創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,所述內存映射文件對應有虛擬地址空間的空閑內存區(qū)域;所述內存映射文件預先被劃分為多個空閑存儲塊。
本發(fā)明實施例中,磁盤的存儲文件即磁盤駐留緩存空間;每個內存映射文件保留一個虛擬地址空間的空閑內存區(qū)域(或者稱為虛擬內存區(qū));在創(chuàng)建內存映射文件完成后,將該內存映射文件劃分為多個空閑存儲塊,每個空閑存儲塊均對應一個虛擬內存區(qū),該空閑存儲塊用于被抽取出來,后續(xù)通過其對應的虛擬內存去存儲緩存文件。
具體的,上述內存映射文件的大小可以根據(jù)實際應用的緩存文件的大小進行設置,本發(fā)明實施例中,磁盤駐留緩存空間大小優(yōu)選設置為1GB的整數(shù)倍,對應的,建立的磁盤駐留緩存空間的大小也優(yōu)選設置為1GB的整數(shù)倍,下面以4GB的為例進行闡述。
具體的,采用內存映射方式創(chuàng)建4個1GB(1GB=1024MB,1MB=1024KB,1KB=1024B)的內存映射文件(首先創(chuàng)建的內存映射文件為大文件),該大文件用于映射磁盤的存儲文件,然后將每個大文件按4KB小塊進行分割,每個大文件有262144(1024*1024/4)個小塊,對每個小塊按內存順序進行編號,第一個大文件中小塊編號是[0,262143],第二個為[262144,524287],第三個為[524288,786431],第四個為[786432,1048575]。
S102、根據(jù)預存的緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量。
本發(fā)明實施例中,在接收到待存的緩存文件后,首先確定該緩存文件的大小,然后根據(jù)該緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量。
具體的,以緩存文件大小為200KB為例,通過以緩存文件大小除以對大文件的分割數(shù)4(200/4),得到所需的空閑存儲塊數(shù)量為50。
S103、從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,并將所述空閑存儲塊設置為待用存儲塊。
具體的,在計算得到空閑存儲塊的第一數(shù)量后(如50),從分割的所有的空閑存儲塊中取出50個小塊,作為待用存儲塊,然后將這50個小塊從內存映射文件中移出。
S104、通過所述待用存儲塊存儲所述緩存文件,得到存儲文件。
具體的,在得到50個小塊后,通過這50個小塊存儲接收到的緩存文件,得到存儲文件。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存方法,與現(xiàn)有技術中直接在磁盤上創(chuàng)建文件副本并建立索引文件來記錄文件總量及訪問關系的方式以及通過文件拼湊的形式組合成大文件的方式,存在讀取性能下降,易造成磁盤空間浪費相比,其能夠對多個空閑存儲塊的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,提升緩存文件訪問的命中率,同時提升了緩存文件的讀寫速度。
進一步的,為了保證接收到的緩存文件都能順利的進行存儲,提升存儲緩存文件的讀寫速度,本發(fā)明實施例中還定時檢測內存映射文件對應的所述空閑內存區(qū)域的大小,并在檢測到空閑內存區(qū)域不足時,及時釋放存儲了緩存文件后的待用存儲塊,具體的,參見圖2,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法,還包括如下步驟:
S105、實時檢測所述內存映射文件對應的所述空閑內存區(qū)域的大小。
本發(fā)明實施例中,參見圖3,檢測內存映射文件對應的空閑內存區(qū)域的大小的方式如下:
S1051、實時獲取所述內存映射文件中所述空閑存儲塊的第二數(shù)量;
S1052、根據(jù)所述第二數(shù)量,計算所述內存映射文件中所述空閑內存區(qū)域的大小。
具體的,通過獲取內存映射文件中空閑存儲塊的第二數(shù)量,即可計算出剩余空間的大小N(MB)(N=空閑存儲塊的第二數(shù)量*4/1024)即可計算出剩余空間的大小N(MB)(N=空閑存儲塊的第二數(shù)量*4/1024)。
S106、在檢測到所述空閑內存區(qū)域的大小小于第一設定閾值時,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量;其中,所述第二設定閾值大于所述第一設定閾值。
本發(fā)明實施例中,以第一設定閾值為50MB、第二設定閾值為200MB為例,在檢測到步驟105計算的空閑內存區(qū)域的大小小于50MB時,則確定將所述內存映射文件的可用虛擬內存區(qū)不足,此時,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量,以便后續(xù)將第三數(shù)量的存儲文件作為空閑存儲塊釋放到內存映射文件中,使內存映射文件的可用虛擬內存區(qū)的大小滿足第二設定閾值(此處的滿足認為可用虛擬內存區(qū)大于或者等于第二設定閾值),此時,認為內存映射文件的可用虛擬內存區(qū)已足夠,不再進行釋放存儲文件的過程。
本發(fā)明實施例中,上述第一設定閾值和第二設定閾值均可以根據(jù)具體應用場景為進行設定,上述50MB和200MB僅僅是示例說明,本發(fā)明實施例不限制其具體數(shù)值。本發(fā)明實施例中,第二設定閾值大于第一設定閾值的目的是,避免內存映射文件的可用虛擬內存區(qū)的大小多次不足,使得進行多次釋放存儲文件引起的不必要開銷。
S107、將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
具體的,在將存儲文件作為空閑存儲塊釋放到所述內存映射文件中后,所述內存映射文件的虛擬內存區(qū)滿足第二設定閾值,此時,認為內存映射文件的可用虛擬內存區(qū)已足夠,不再進行釋放存儲文件的過程。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法,還包括:
每檢測到一個所述存儲文件時,將所述存儲文件存儲的所述緩存文件的文件名存儲到預先建立的熱度鏈表的頭部;其中,所述熱度鏈表包括:用于存儲所述文件名的第一文件名存儲區(qū)。
具體的,預先建立熱度鏈表ListHeatFiles,該熱度鏈表ListHeatFiles包括用于存儲所述文件名的第一文件名存儲區(qū),然后每在檢測到一個存儲文件時,將該存儲文件對應的文件名(即該存儲文件存儲的緩存文件的文件名)存儲到上述熱度鏈表中,并置于熱度鏈表的頭部。也就是說越是最后的存儲文件,其在熱度鏈表中就越靠前。
每次命中駐留磁盤緩存文件后,將ListHeatFiles熱度鏈表中的此文件調整到頭部。這樣命中磁盤駐留緩存中次數(shù)越多的文件,在ListHeatFiles熱度鏈表中越靠前,長時間未命中的文件排名越靠后。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法,還包括:
每檢測到一個所述存儲文件時,將所述存儲文件及其存儲的所述緩存文件的文件名存儲到預先建立的數(shù)據(jù)緩存表中;其中,所述數(shù)據(jù)緩存表包括:用于存儲所述存儲文件的存儲文件存儲區(qū)和用于存儲所述文件名的第二文件名存儲區(qū)。
具體的,預先數(shù)據(jù)緩存表(即緩存map表MapFiles),該數(shù)據(jù)緩存表MapFiles包括用于存儲所述存儲文件的存儲文件存儲區(qū)和用于存儲所述文件名的第二文件名存儲區(qū),然后每在檢測到一個存儲文件時,將該存儲文件和該存儲文件對應的文件名(即該存儲文件存儲的緩存文件的文件名)均存儲到上述數(shù)據(jù)緩存表中。
即每檢測到一個所述存儲文件時,將該存儲文件添加到以文件名為Key,以鏈表B1為Value的文件緩存map表MapFiles中。
進一步的,參見圖4,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法中,上述步驟107中,將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中,包括:
S1061、根據(jù)所述熱度鏈表中所述第一文件名存儲區(qū)存儲的所述文件名從后到前的排序順序,獲取所述第三數(shù)量的所述文件名作為待釋放文件名。
具體的,由于每次命中駐留磁盤緩存文件后,該緩存文件存儲到ListHeatFiles熱度鏈表的頭部。這樣命中磁盤駐留緩存中次數(shù)越多的文件,在ListHeatFiles熱度鏈表中越靠前,長時間未命中的文件排名越靠后。
本發(fā)明實施例中,若空閑內存區(qū)域的大小小于第一設定閾值(即小于50MB)時,則通過熱度鏈表ListHeatFiles從尾部開始刪除,首先獲取熱度鏈表中排名依次從后至前的第三數(shù)量的所述文件名作為待釋放文件名。
S1062、根據(jù)所述待釋放文件名從所述數(shù)據(jù)緩存表中查找匹配的所述存儲文件,作為待釋放存儲文件。
具體的,以文件名為索引(key),從數(shù)據(jù)緩存表(即MapFiles)中找到對應的存儲文件,并將該存儲文件設置為待釋放存儲文件。
S1063、將所述待釋放存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
上述過程利用文件熱度決定緩存文件駐留生命周期,提升了駐留空間內存儲的緩存文件都是有效文件的命中率,即提升緩存文件訪問的命中率。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法中,還包括:將多個所述空閑存儲塊串連在一起建立內存塊鏈表;步驟103中從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,包括:
按照所述內存塊鏈表中所述空閑存儲塊的串連順序,從所述內存塊鏈表抽取所述第一數(shù)量的所述空閑存儲塊。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法中,還包括:將多個所述待用存儲塊串連在一起建立文件塊鏈表;
步驟104,通過所述待用存儲塊存儲所述緩存文件,得到存儲文件,包括:
按照所述文件塊鏈表中所述待用存儲塊的串連順序,依次通過所述待用存儲塊存儲所述緩存文件,得到所述存儲文件。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存方法,與現(xiàn)有技術中直接在磁盤上創(chuàng)建文件副本并建立索引文件來記錄文件總量及訪問關系的方式以及通過文件拼湊的形式組合成大文件的方式,存在讀取性能下降,易造成磁盤空間浪費相比,其能夠對多個空閑存儲塊的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,提升緩存文件訪問的命中率,同時提升了緩存文件的讀寫速度。
下面結合圖5和圖6整體對本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法進行說明:
首先對本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法進行概括說明:
參考圖5和圖6,首先,創(chuàng)建一定數(shù)量大小為1GB的文件,把每個1GB的文件按4K大小進行分塊并順序編號,加入到可用空間鏈表A(即下面的內存塊鏈表)中。依據(jù)要緩存文件的大小從可用空間鏈表A中釋放出等量的存儲塊并進行數(shù)據(jù)拷貝,同時把這些塊建立起新的鏈表B(即下面的文件塊鏈表),以文件名為Key,值為鏈表B加入到map中。同時建立起以文件名為元素的熱度鏈表,新插入或新訪問的文件調整到熱度鏈表的頭部。當可用空間鏈表容量不足時,可以從熱度鏈表的尾部開始刪除,并把對應的數(shù)據(jù)塊加入到可用空間鏈表A中。達到重復擦寫利用和提升緩存命中率的目的。其中,通常情況下,一個鏈表A對應多個鏈表B,即一個鏈表A對應鏈表B1、B2…Bn。
需要說明的是,本發(fā)明實施例提供的磁盤駐留緩存空間(對應內存映射文件的空閑內存區(qū)域)大小約定為1GB的整數(shù)倍,本發(fā)明實施例以4GB的為例進行闡述。
結合圖5和圖6,下面對本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法進行整體說明,該磁盤內部的數(shù)據(jù)緩存方法:
1、用于映射磁盤的存儲文件的內存映射文件并對該內存映射文件按4KB小塊進行分割,將分割得到的空閑存儲塊串連起來建立起內存塊鏈表。
具體的,采用內存映射方式創(chuàng)建4個1GB(1GB=1024MB,1MB=1024KB,1KB=1024B)的大文件(即內存映射文件),每個大文件按4K小塊進行分割,每個大文件有262144(1024*1024/4)個小塊。對每個小塊按內存順序進行編號,第一個大文件中小塊編號是[0,262143],第二個為[262144,524287],第三個為[524288,786431],第四個為[786432,1048575],使用鏈表A(方便后續(xù)說明將內存塊鏈表標記為A)將所有的小塊串起來。
2、依據(jù)預存的緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量,并建立文件塊鏈表。
具體的,以緩存文件大小為200KB為例,所需的內存文件塊數(shù)量(即第一數(shù)量)為50(200/4),從鏈表A中取出50個小塊建立新的鏈表B1(即文件塊鏈表),同時從鏈表A中移出這50個小塊,使用鏈表B1存儲此緩存文件,得到存儲文件。然后將該存儲文件添加到以文件名為Key,以鏈表B1為Value的文件緩存map表(即數(shù)據(jù)緩存表)MapFiles中,同時添加插入到文件熱度鏈表ListHeatFiles的頭部。
3、更新文件熱度鏈表ListHeatFiles
每次命中駐留磁盤緩存文件后,將熱度鏈表ListHeatFiles中的此緩存文件調整到熱度鏈表ListHeatFiles的頭部。這樣命中磁盤駐留緩存中次數(shù)越多的文件,在ListHeatFiles熱度鏈表中越靠前,長時間未命中的的文件排名越靠后。
4、在檢測到所述空閑內存區(qū)域的大小小于第一設定閾值時,刪除磁盤駐留緩存中經(jīng)常不使用的文件。
具體的,當駐留空間(即內存映射文件中的空閑內存區(qū)域)剩余大小不足時,這里以50MB為例,通過獲取鏈表A的中空閑存儲塊的數(shù)量,即可計算出剩余空間的大小N(MB)(N=鏈表元素總數(shù)*4/1024)。若剩余空間的大小小于50MB,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量,則通過熱度鏈表ListHeatFiles從尾部開始刪除,即根據(jù)熱度鏈表中第一文件名存儲區(qū)存儲的文件名從后到前的排序順序,獲取第三數(shù)量的文件名作為待釋放文件名,根據(jù)待釋放文件名從MapFiles中(即數(shù)據(jù)緩存表中)找到對應此待釋放文件名的鏈表B,并將B插入到鏈表A中。繼續(xù)此過程,直到駐留空間剩余大小超過第二閾值200MB,認為內存映射文件的可用虛擬內存區(qū)已足夠,不再進行釋放存儲文件的過程。
本發(fā)明實施例中,上述第一設定閾值和第二設定閾值均可以根據(jù)具體應用場景為進行設定,上述50MB和200MB僅僅是示例說明,本發(fā)明實施例不限制其具體數(shù)值。本發(fā)明實施例中,第二設定閾值大于第一設定閾值的目的是,避免內存映射文件的可用虛擬內存區(qū)的大小多次不足,使得進行多次釋放存儲文件引起的不必要開銷。
本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法,采用可重復擦寫及回收小塊機制,保證了緩存文件空間利用最大化。利用文件熱度決定緩存文件駐留生命周期,提升緩存文件訪問的命中率?;谖募却嬗成涞姆绞?,直接采用操作內存形式操作文件,提升緩存文件的讀寫速度。
本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法:1、采用內存映射方式和內存池思想重復擦寫及回收小塊,提升緩存空間利用最大化。2、利用文件熱度決定緩存文件駐留生命周期,提升緩存文件訪問的命中率。
本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存方法把內存映射方式與內存池思想結合起來,做到緩存空間重復擦寫及回收利用,提升緩存空間利用最大化,同時結合熱度文件生命周期最大化,保證了在有限的駐留空間內,提升緩存文件訪問的命中率,進而提升緩存文件的讀寫效率。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存方法,主要適用于文件服務器或圖片服務器,能夠提高文件(如圖片)讀取速度。
本發(fā)明實施例提供了一種磁盤內部的數(shù)據(jù)緩存裝置,所述數(shù)據(jù)緩存裝置用于執(zhí)行上述磁盤內部的數(shù)據(jù)緩存方法,參考圖7,所述裝置包括:
創(chuàng)建模塊11,用于創(chuàng)建用于映射磁盤的存儲文件的內存映射文件,所述內存映射文件對應有虛擬地址空間的空閑內存區(qū)域;所述內存映射文件預先被劃分為多個空閑存儲塊;
第一計算模塊12,用于根據(jù)預存的緩存文件的大小,計算所述內存映射文件中用于存儲所述緩存文件的所述空閑存儲塊的第一數(shù)量;
抽取模塊13,用于從所述內存映射文件中抽取所述第一數(shù)量的所述空閑存儲塊,并將所述空閑存儲塊設置為待用存儲塊;
第一存儲模塊14,用于通過所述待用存儲塊存儲所述緩存文件,得到存儲文件。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存裝置,與現(xiàn)有技術中直接在磁盤上創(chuàng)建文件副本并建立索引文件來記錄文件總量及訪問關系的方式以及通過文件拼湊的形式組合成大文件的方式,存在讀取性能下降,易造成磁盤空間浪費相比,其能夠對多個空閑存儲塊的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,提升緩存文件訪問的命中率,同時提升了緩存文件的讀寫速度。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置,參考圖8,還包括:
檢測模塊15,用于實時檢測所述內存映射文件對應的所述空閑內存區(qū)域的大小;
第二計算模塊16,用于在檢測到所述空閑內存區(qū)域的大小小于第一設定閾值時,根據(jù)第二設定閾值,計算待釋放的所述存儲文件的第三數(shù)量;其中,所述第二設定閾值大于所述第一設定閾值;
釋放模塊17,用于將所述第三數(shù)量的所述存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
進一步的,參考圖9,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置中,檢測模塊15,包括:
第一獲取單元151,用于實時獲取所述內存映射文件中所述空閑存儲塊的第二數(shù)量;
計算單元152,用于根據(jù)所述第二數(shù)量,計算所述內存映射文件中所述空閑內存區(qū)域的大小。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置,還包括:
第二存儲模塊,用于每檢測到一個所述存儲文件時,將所述存儲文件存儲的所述緩存文件的文件名存儲到預先建立的熱度鏈表的頭部;其中,所述熱度鏈表包括:用于存儲所述文件名的第一文件名存儲區(qū)。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置,還包括:
第三存儲模塊,用于每檢測到一個所述存儲文件時,將所述存儲文件及其存儲的所述緩存文件的文件名存儲到預先建立的數(shù)據(jù)緩存表中;其中,所述數(shù)據(jù)緩存表包括:用于存儲所述存儲文件的存儲文件存儲區(qū)和用于存儲所述文件名的第二文件名存儲區(qū)。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置中,參考圖9,釋放模塊17,包括:
第二獲取單元171,用于根據(jù)所述熱度鏈表中所述第一文件名存儲區(qū)存儲的所述文件名從后到前的排序順序,獲取所述第三數(shù)量的所述文件名作為待釋放文件名;
查找單元172,用于根據(jù)所述待釋放文件名從所述數(shù)據(jù)緩存表中查找匹配的所述存儲文件,作為待釋放存儲文件;
釋放單元173,用于將所述待釋放存儲文件作為空閑存儲塊釋放到所述內存映射文件中。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置,還包括:第一建立模塊,用于將多個所述空閑存儲塊串連在一起建立內存塊鏈表;
所述抽取模塊具體用于,按照所述內存塊鏈表中所述空閑存儲塊的串連順序,從所述內存塊鏈表抽取所述第一數(shù)量的所述空閑存儲塊。
進一步的,本發(fā)明實施例提供的磁盤內部的數(shù)據(jù)緩存裝置,還包括:第二建立模塊,用于將多個所述待用存儲塊串連在一起建立文件塊鏈表;
所述第一存儲模塊具體用于,按照所述文件塊鏈表中所述待用存儲塊的串連順序,依次通過所述待用存儲塊存儲所述緩存文件,得到所述存儲文件。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存裝置,與現(xiàn)有技術中直接在磁盤上創(chuàng)建文件副本并建立索引文件來記錄文件總量及訪問關系的方式以及通過文件拼湊的形式組合成大文件的方式,存在讀取性能下降,易造成磁盤空間浪費相比,其能夠對多個空閑存儲塊的緩存空間進行重復擦寫及回收利用,提升了緩存空間的利用率,使緩存空間利用最大化,提升緩存文件訪問的命中率,同時提升了緩存文件的讀寫速度。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存裝置,采用文件內存映射的方式并結合文件拼湊、內存池重復利用思想,精心設計了存儲過程,從根本上保證對磁盤駐留文件的讀取操作效率。具有如下三個優(yōu)點:
1)定量的磁盤駐留空間內,采用可重復擦寫機制,提升緩存文件空間利用最大化。
2)利用文件熱度決定緩存文件駐留生命周期,提升緩存文件訪問的命中率。
3)基于文件內存映射的方式,提升緩存文件的讀寫速度。
本發(fā)明實施例提供的一種磁盤內部的數(shù)據(jù)緩存方法,主要適用于文件服務器或圖片服務器,能夠提高文件(如圖片)讀取速度。
本發(fā)明實施例所提供的磁盤內部的數(shù)據(jù)緩存裝置可以為設備上的特定硬件或者安裝于設備上的軟件或固件等。本發(fā)明實施例所提供的裝置,其實現(xiàn)原理及產(chǎn)生的技術效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應內容。所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,前述描述的系統(tǒng)、裝置和單元的具體工作過程,均可以參考上述方法實施例中的對應過程,在此不再贅述。
在本發(fā)明所提供的實施例中,應該理解到,所揭露裝置和方法,可以通過其它的方式實現(xiàn)。以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,又例如,多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明提供的實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋,此外,術語“第一”、“第二”、“第三”等僅用于區(qū)分描述,而不能理解為指示或暗示相對重要性。
最后應說明的是:以上所述實施例,僅為本發(fā)明的具體實施方式,用以說明本發(fā)明的技術方案,而非對其限制,本發(fā)明的保護范圍并不局限于此,盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,其依然可以對前述實施例所記載的技術方案進行修改或可輕易想到變化,或者對其中部分技術特征進行等同替換;而這些修改、變化或者替換,并不使相應技術方案的本質脫離本發(fā)明實施例技術方案的精神和范圍。都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。