本申請涉及計算機技術領域,尤其涉及一種臟數(shù)據(jù)更新方法及裝置。
背景技術:
隨著計算機技術的不斷發(fā)展,越來越多的軟件和系統(tǒng)都使用面向對象語言進行開發(fā),如,大規(guī)模Web系統(tǒng)的開發(fā)一般都使用面向對象語言進行開發(fā)。
目前,由于使用大規(guī)模Web系統(tǒng)的用戶數(shù)量比較巨大,并且存儲數(shù)據(jù)的磁盤的讀寫性能低下,這樣勢必會導致服務器負載特別高,因此,需要使用內存作為緩存來提高整個大規(guī)模Web系統(tǒng)的性能,并且,建立面向對象緩存系統(tǒng)用于將向緩存中存入大規(guī)模Web系統(tǒng)的數(shù)據(jù)以及從緩存中獲取數(shù)據(jù)并提供給大規(guī)模Web系統(tǒng)。
整個數(shù)據(jù)存入的過程如圖1所示,大規(guī)模Web系統(tǒng)101通過外部接口102將需要寫入的數(shù)據(jù)以及該數(shù)據(jù)對應的標識(即,鍵值)傳輸給面向對象緩存系統(tǒng)103,面向對象緩存系統(tǒng)103將要寫入的數(shù)據(jù)序列化為字節(jié)流,根據(jù)該數(shù)據(jù)對應的標識將序列化成字節(jié)流的該數(shù)據(jù)寫入到緩存104中,再將該數(shù)據(jù)存入到數(shù)據(jù)庫105中。而整個數(shù)據(jù)獲取的過程如圖1所示,大規(guī)模Web系統(tǒng)101將待獲取的數(shù)據(jù)對應的標識(如,鍵值)通過外部接口102傳輸給面向對象緩存系統(tǒng)103,面向對象緩存系統(tǒng)103直接根據(jù)該數(shù)據(jù)對應的標識,先從緩存104中確定是否存在該標識對應的已經序列化的數(shù)據(jù),如果存在,則將確定出的字節(jié)流反序列化成數(shù)據(jù)并通過外部接口102提供給大規(guī)模Web系統(tǒng)101,如果不存在,直接從數(shù)據(jù)庫105中確定該標識對應的數(shù)據(jù),并通過外部接口102提供給大規(guī)模Web系統(tǒng)101。
在實際應用中,大規(guī)模Web系統(tǒng)對應的服務器上的服務需要不斷升級,而升級的時候有可能會更改數(shù)據(jù)庫中存儲的數(shù)據(jù)的數(shù)據(jù)結構,如,增加某數(shù)據(jù)的屬性,但是,該數(shù)據(jù)在緩存中依然不變,這樣會產生臟數(shù)據(jù)(也就是說,針對任一數(shù)據(jù),在緩存中的該數(shù)據(jù)與數(shù)據(jù)庫中的該數(shù)據(jù)在數(shù)據(jù)結構上不一致,則該數(shù)據(jù)為臟數(shù)據(jù)),而后續(xù),由于在將數(shù)據(jù)提供給大規(guī)模Web系統(tǒng)時,是需要先讀取緩存中數(shù)據(jù),因此,可能會將臟數(shù)據(jù)通過外部接口提供給大規(guī)模Web系統(tǒng),這樣勢必會使得大規(guī)模Web系統(tǒng)無法根據(jù)臟數(shù)據(jù)對外提供服務,也就是服務無法正常運行。
為了能夠使得服務能夠正常的運行,在現(xiàn)有技術中,當數(shù)據(jù)庫中的數(shù)據(jù)的數(shù)據(jù)結構發(fā)生更改,如,針對某數(shù)據(jù),增加了該數(shù)據(jù)的屬性,需要將緩存中的數(shù)據(jù)全部清空,這樣外部系統(tǒng)(如,大規(guī)模Web系統(tǒng))在獲取該數(shù)據(jù)時,直接訪問數(shù)據(jù)庫并從數(shù)據(jù)庫中獲取,如果訪問量巨大時,勢必會造成數(shù)據(jù)庫由于壓力過大而導致服務崩潰的問題。
技術實現(xiàn)要素:
本申請實施例提供一種臟數(shù)據(jù)更新方法及裝置,用以解決現(xiàn)有技術中當訪問量巨大時,勢必會造成數(shù)據(jù)庫由于訪問量巨大使得壓力過大而導致服務崩潰的問題。
本申請實施例提供一種臟數(shù)據(jù)更新方法,包括:
獲取對象的屬性名以及鍵值;
根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別;
根據(jù)對象的屬性名識別緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)時,根據(jù)鍵值從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù);
根據(jù)從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。
優(yōu)選地,根據(jù)獲取到的對象的屬性名,在緩存中訪問屬性名對應的屬性,當獲取到的對象的至少一個屬性名在緩存中訪問不到對應的屬性時,確定緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)。
優(yōu)選地,調用getattr方法,從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù)。
優(yōu)選地,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)替換掉所述緩存中該鍵值對應的數(shù)據(jù)。
優(yōu)選地,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)構造成對象,并將該對象序列化為字節(jié)流,根據(jù)所述鍵值,在緩存中確定該鍵值對應的數(shù)據(jù),將序列化字節(jié)流后的數(shù)據(jù)替換掉在緩存中確定出的該鍵值對應的數(shù)據(jù)。
本申請實施例提供一種臟數(shù)據(jù)更新裝置,包括:
第一獲取模塊,用于獲取對象的屬性名以及鍵值;
臟數(shù)據(jù)確定模塊,用于根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別;
第二獲取模塊,用于根據(jù)對象的屬性名識別緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)時,根據(jù)鍵值從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù);
更新模塊,用于根據(jù)從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。
優(yōu)選地,所述臟數(shù)據(jù)確定模塊具體用于,根據(jù)獲取到的對象的屬性名,在緩存中訪問屬性名對應的屬性,當獲取到的對象的至少一個屬性名在緩存中訪問不到對應的屬性時,確定緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)。
優(yōu)選地,所述第二獲取模塊具體用于,調用getattr方法,從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù)。
優(yōu)選地,所述更新模塊具體用于,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)替換掉所述緩存中該鍵值對應的數(shù)據(jù)。
優(yōu)選地,所述更新模塊具體用于,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)構造成對象,并將該對象序列化為字節(jié)流,根據(jù)所述鍵值,在緩存中確定該鍵值對應的數(shù)據(jù),將序列化字節(jié)流后的數(shù)據(jù)替換掉在緩存中確定出的該鍵值對應的數(shù)據(jù)。
本申請實施例提供一種臟數(shù)據(jù)更新方法及裝置,該方法首先獲取對象的屬性名以及鍵值,根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別,根據(jù)對象的屬性名識別緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)時,根據(jù)鍵值從數(shù)據(jù)庫中獲取該鍵值對應的數(shù)據(jù),根據(jù)從數(shù)據(jù)庫中獲取到的該鍵值對應的數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。通過上述方法,即使緩存中存在臟數(shù)據(jù),也不用再清空緩存,而是對緩存中的臟數(shù)據(jù)進行識別,并對識別出的臟數(shù)據(jù)進行平滑更新,這樣可有效的解決數(shù)據(jù)庫由于訪問量巨大使得壓力過大而導致服務崩潰的問題。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1為本申請實施例提供的一種現(xiàn)有技術中存入和獲取數(shù)據(jù)的過程示意圖;
圖2為本申請實施例提供的一種臟數(shù)據(jù)更新的過程示意圖;
圖3為本申請實施例提供的一種臟數(shù)據(jù)更新裝置的結構示意圖。
具體實施方式
為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
圖2為本申請實施例提供的臟數(shù)據(jù)更新過程,具體包括以下步驟:
S201:獲取對象的屬性名以及鍵值。
在實際應用中,有些對外提供服務的系統(tǒng)通常都會使用面向對象語言進行開發(fā),如,大規(guī)模Web系統(tǒng)的開發(fā)使用的就是面向對象語言進行開發(fā)的。
而使用面向對象語言進開發(fā)的系統(tǒng)在從緩存或數(shù)據(jù)庫中存儲和獲取數(shù)據(jù)時,都是以對象為整體進行存儲和讀取的,也就是說,將數(shù)據(jù)作為一個對象,并對該對象包含的數(shù)據(jù)進行存儲和獲取,對象中可包含一個數(shù)據(jù),也可以包含多個數(shù)據(jù),每個對象包含多少數(shù)據(jù)是可以預先定義的。所述對象為要執(zhí)行或操作的任何事物,可以表示具體的事物,也可以表示抽象的事物,如,規(guī)則,并且,由于屬性能夠描述刻畫一個對象,因此,每個對象都是有各自的屬性的,如,售賣的蘋果是一個對象,蘋果有顏色:紅色、重量:0.5千克這兩個屬性,而每個屬性均包含屬性名和屬性值,如,蘋果的顏色為紅色,重量為0.5千克,則顏色以及重量為屬性的屬性名,而紅色以及0.5千克為屬性的屬性值。
進一步的,為了方便外部系統(tǒng)對存儲在緩存或者數(shù)據(jù)庫中的對象,因此,在緩存或數(shù)據(jù)庫中存儲對象的過程中,會為該對象確定一個鍵值,也就是說,為該對象確定一個唯一的標識,通過該鍵值能夠唯一確定出該對象。
由于鍵值只是能夠確定出需要獲取哪個對象對應的數(shù)據(jù),而具體需要獲取該對象中的哪個屬性(其中,所述屬性包含屬性名和屬性值)時是由屬性名決定的,因此,在本申請中,外部系統(tǒng)為了對外提供服務而在緩存中獲取對象時,需要將待獲取對象的屬性名以及鍵值通過外部接口傳輸給面向對象緩存系統(tǒng),面向對象緩存系統(tǒng)在獲取到對象的屬性名以及鍵值后,可直接根據(jù)對象的屬性名以及鍵值去緩存中查詢。
例如,某倉儲系統(tǒng)用于對外提供查詢服務,倉儲系統(tǒng)此刻接收到用戶輸入的查詢對象:蘋果,假設原先蘋果對應的鍵值為:XX,蘋果包含兩個屬性,顏色:紅色以及重量:0.5千克,后續(xù),根據(jù)實際需求在數(shù)據(jù)庫中將蘋果(對象)對應的數(shù)據(jù)進行了更改(即,對蘋果對應的屬性進行了更改),在原來兩個屬性的基礎之上增加一個屬性:價格1RMB,但是緩存中的蘋果對應的屬性還是原來的兩個屬性,因此,倉儲系統(tǒng)將蘋果對應的鍵值(即,XX)以及蘋果的三個屬性名(顏色、重量和價格)通過外部接口傳輸給面向對象緩存系統(tǒng),面向對象緩存系統(tǒng)在接收到倉儲系統(tǒng)傳輸?shù)奶O果對應的三個屬性名以及鍵值后執(zhí)行步驟S202。
S202:根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別。
S203:根據(jù)對象的屬性名識別緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)時,根據(jù)鍵值從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù)。
由于在實際應用中,外部系統(tǒng)對應的服務器上的服務需要不斷升級,而升級的時候有可能會更改數(shù)據(jù)庫中存儲的某對象對應的數(shù)據(jù)的數(shù)據(jù)結構,如,增加某對象的屬性,但是,該對象對應的數(shù)據(jù)在緩存中依然不變,這樣會產生臟數(shù)據(jù)(也就是說,針對任一數(shù)據(jù),在緩存中的該數(shù)據(jù)與數(shù)據(jù)庫中的該數(shù)據(jù)在數(shù)據(jù)結構上不一致,則該數(shù)據(jù)為臟數(shù)據(jù)),而在本申請中,屬性缺失的對象所對應的數(shù)據(jù)即為臟數(shù)據(jù),并且,屬性缺失的對象是無法通過外部接口直接提供給外部系統(tǒng)的,需要通過特定的方式去繼續(xù)查詢缺少的屬性所對應的數(shù)據(jù),因此,在本申請中,面向對象緩存系統(tǒng)在獲取到外部系統(tǒng)通過接口傳輸?shù)膶ο蟮膶傩悦玩I值后,需要根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別,確定緩存中的與鍵值對應的數(shù)據(jù)是不是臟數(shù)據(jù)。
進一步的,由于在緩存中存儲對象對應的數(shù)據(jù)中包含對象的屬性名,因此,本申請?zhí)峁┝艘环N根據(jù)對象的屬性名來識別緩存的數(shù)據(jù)為臟數(shù)據(jù)(即,屬性缺失的對象)的方法,具體的,可以根據(jù)對象的鍵值,在緩存中查詢該鍵值對應的對象,也就是說,查詢該鍵值對應的數(shù)據(jù),在查詢出該鍵值對應的數(shù)據(jù)(也即,該鍵值對應的對象的數(shù)據(jù))后,則根據(jù)獲取到的對象的屬性名,在緩存中訪問屬性名對應的屬性,當獲取到的對象的至少一個屬性名在緩存中訪問不到對應的屬性時(也即,屬性缺失),其中,所述屬性包括屬性名和屬性值,確定緩存的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)。
在此需要說明的是,如果識別出的數(shù)據(jù)不是臟數(shù)據(jù),則直接在該鍵值對應的數(shù)據(jù)中確定屬性名對應的屬性,將查詢到的屬性數(shù)據(jù)對應的字節(jié)流反序列化為相應的包含數(shù)據(jù)的對象,并將該包含數(shù)據(jù)的對象通過外部接口返回給外部系統(tǒng)。
進一步的,由于通常情況下,如果出現(xiàn)屬性缺失是因為數(shù)據(jù)庫中的數(shù)據(jù)的數(shù)據(jù)結構被更改,如,增加了某對象的屬性,而被更改的數(shù)據(jù)在緩存中卻依然不會改變,也就是說,數(shù)據(jù)庫中的數(shù)據(jù)的數(shù)據(jù)結構是全的,也是最新的、正確的,因此,在本申請中,當出現(xiàn)屬性缺失(即,臟數(shù)據(jù))這種情況,需要通過特定的方式去繼續(xù)查詢缺少的屬性所對應的數(shù)據(jù)時,具體查詢方式直接調用getattr方法,從數(shù)據(jù)庫中獲取該鍵值對應的數(shù)據(jù),在此著重強調在本申請中,該getattr方法可以實現(xiàn)從數(shù)據(jù)庫中獲取該鍵值對應的數(shù)據(jù)的功能。
在此需要說明的是,在從數(shù)據(jù)庫中獲取數(shù)據(jù)時,可只獲取所缺失的屬性對應的數(shù)據(jù),也可以將鍵值對應的對象包含的數(shù)據(jù)全部獲取到。
延續(xù)上例,面向對象緩存系統(tǒng)首先根據(jù)鍵值在緩存中查詢蘋果對應的數(shù)據(jù),在緩存中根據(jù)鍵值:XX,查詢到蘋果對應的數(shù)據(jù)“顏色:紅色,重量:0.5千克”,并根據(jù)獲取到的蘋果(即,對象)的“顏色、重量以及價格”這三個屬性名,在緩存中訪問屬性名對應的屬性,確定獲取到的對象的至少一個屬性名在緩存中訪問不到對應的屬性時(也即,緩存中不存在價格這一屬性對應的屬性名和屬性值,也就是屬性缺失),確定緩存的與鍵值“XX”對應的數(shù)據(jù)為臟數(shù)據(jù),調用getattr方法,從數(shù)據(jù)庫中獲取該鍵值:XX對應的數(shù)據(jù)“顏色:紅色、重量0.5千克以及價格1RMB”。
S204:根據(jù)從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。
在本申請中,為了能夠使外部系統(tǒng)繼續(xù)能在緩存中查找到數(shù)據(jù),而不是去數(shù)據(jù)庫中查找到數(shù)據(jù),以此降低數(shù)據(jù)庫的運行壓力,因此,在通過特定的方式獲取到所述鍵值對應的對象所包含的所有數(shù)據(jù)后,可根據(jù)該鍵值對應的所有數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。
具體可以將從數(shù)據(jù)庫中獲取到的該鍵值對應的數(shù)據(jù)替換掉該緩存中該鍵鍵值對應的數(shù)據(jù),在此需要說明的是,可只替換缺失的屬性對應的數(shù)據(jù),也可以,將鍵值對應的所有數(shù)據(jù)整體替換掉緩存中該鍵值對應的所有數(shù)據(jù)。
進一步的,在將數(shù)據(jù)庫中獲取到的該鍵值對應的數(shù)據(jù)替換掉緩存中該鍵值對應的數(shù)據(jù)的過程中,需要將從數(shù)據(jù)庫中獲取到的該鍵值對應的數(shù)據(jù)構造成對象,并對該對象序列化字節(jié)流,并根據(jù)該鍵值,在緩存中確定出該鍵值對應的數(shù)據(jù),將序列化字節(jié)流后的數(shù)據(jù)替換掉在緩存中確定出的該鍵值對應的數(shù)據(jù)。
繼續(xù)沿用上例,在數(shù)據(jù)庫中獲取到鍵值:XX對應的數(shù)據(jù)后,將數(shù)據(jù)“顏色:紅色、重量0.5千克以及價格1RMB”構造成對象,并將該對象序列化為字節(jié)流,并根據(jù)該鍵值:XX,在緩存中確定出該鍵值:XX對應的數(shù)據(jù)“顏色:紅色、重量:0.5千克”,將序列化字節(jié)流后的數(shù)據(jù)“顏色:紅色、重量0.5千克以及價格1RMB”替換掉在緩存中確定出的該鍵值對應的數(shù)據(jù)“顏色:紅色、重量:0.5千克”。
通過上述方法,即使緩存中存在臟數(shù)據(jù),也不用再清空緩存,可對緩存中的臟數(shù)據(jù)進行識別,并對識別出的臟數(shù)據(jù)進行平滑更新,這樣可有效的解決數(shù)據(jù)庫由于壓力過大而導致服務崩潰的問題。
以上為本申請實施例提供的臟數(shù)據(jù)更新方法,基于同樣的思路,本申請實施例還提供一種臟數(shù)據(jù)更新裝置。
如圖3所示,本申請實施例提供的一種臟數(shù)據(jù)更新裝置,包括:
第一獲取模塊301,用于獲取對象的屬性名以及鍵值;
臟數(shù)據(jù)確定模塊302,用于根據(jù)對象的屬性名,對緩存中的與鍵值對應的數(shù)據(jù)進行識別;
第二獲取模塊303,用于根據(jù)對象的屬性名識別緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)時,根據(jù)鍵值從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù);
更新模塊304,用于根據(jù)從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù),對緩存中的數(shù)據(jù)進行更新。
所述臟數(shù)據(jù)確定模塊302具體用于,根據(jù)獲取到的對象的屬性名,在緩存中訪問屬性名對應的屬性,當獲取到的對象的至少一個屬性名在緩存中訪問不到對應的屬性時,確定緩存中的與鍵值對應的數(shù)據(jù)為臟數(shù)據(jù)。
所述第二獲取模塊303具體用于,調用getattr方法,從數(shù)據(jù)庫中獲取所述鍵值對應的數(shù)據(jù)。
所述更新模塊304具體用于,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)替換掉所述緩存中該鍵值對應的數(shù)據(jù)。
所述更新模塊304具體用于,將從數(shù)據(jù)庫中獲取到的所述鍵值對應的數(shù)據(jù)構造成對象,并將該對象序列化為字節(jié)流,根據(jù)所述鍵值,在緩存中確定該鍵值對應的數(shù)據(jù),將序列化字節(jié)流后的數(shù)據(jù)替換掉在緩存中確定出的該鍵值對應的數(shù)據(jù)。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調制的數(shù)據(jù)信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內。