本發(fā)明涉及數(shù)據(jù)讀寫領域,具體地,涉及一種讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法以及裝置。
背景技術:
隨著高通量測序技術的不斷發(fā)展,生物信息數(shù)據(jù)正以爆炸式速度增長。生物大數(shù)據(jù)包羅信息多、價值大,具有數(shù)據(jù)量大(Volume)、多樣性(Variety)、價值高(Value)、處理速度快(Velocity)等“4V”特點,如能有效挖掘,對科研、農(nóng)業(yè)、醫(yī)藥、健康、衛(wèi)生等各方面都將產(chǎn)生深刻的影響。在數(shù)據(jù)爆炸式增長的同時,如何對這些數(shù)據(jù)進行存儲和有效利用也是個極具挑戰(zhàn)的問題。傳統(tǒng)的基礎架構已經(jīng)對這些大規(guī)模的數(shù)據(jù)束手無策,對基礎架構的擴充和維護也需要較大的成本。幸運的是,以大規(guī)模分布式數(shù)據(jù)中心集群為支撐的對象存儲云服務的不斷發(fā)展,使得企業(yè)在大數(shù)據(jù)存儲方面有了一個很好的解決方案。
然而,在處理大量生物信息數(shù)據(jù)時,如何簡便信息計算程序對大量中間文件進行頻繁的讀寫操作是一個極具有挑戰(zhàn)性的問題。
技術實現(xiàn)要素:
本發(fā)明的目的是提供一種讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法以及裝置。其中,所述方法不僅極大地方便了信息計算程序對大量中間文件進行頻繁的讀寫操作,而且還優(yōu)化了計算程序的處理流程。
為了實現(xiàn)上述目的,本發(fā)明提供一種讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法。所述方法包括:
將所述對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的用戶空間文件系統(tǒng)中,并配置每個客戶端到所述對象存儲系統(tǒng)中存儲空間的路徑信息;
在客戶端讀取存儲對象的情況下,先從所述用戶空間文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存中沒有要讀取的數(shù)據(jù),則根據(jù)所述用戶空間文件系統(tǒng)數(shù)據(jù)庫中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作所述對象存儲系統(tǒng)中的存儲對象,實現(xiàn)所述對象存儲系統(tǒng)中的數(shù)據(jù)的讀??;
在客戶端寫入文件的情況下,所述用戶空間文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和分塊信息,最后調用rest服務將緩存中的分塊寫入所述對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息。
可選地,所述方法還包括:
在所述客戶端讀取存儲對象的情況下,根據(jù)所述數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息判斷本地緩存空間中是否存在所請求的數(shù)據(jù)資源,若存在,則讀取所述本地緩存空間中的數(shù)據(jù)。
可選地,所述方法還包括:
在根據(jù)所述文件大小及分塊大小對所述文件進行處理后,將處理后的文件存儲至本地緩存空間,并通過rest服務將存儲至本地緩存空間的文件上傳至所述對象存儲系統(tǒng)的存儲空間中。
可選地,所述將文件分割成一個或多個分塊文件,包括:
根據(jù)所述文件的屬性信息判斷所述文件的大小是否大于預設的閾值;
在根據(jù)所述文件的屬性信息判斷所述文件的大小大于預設的閾值的情況下,將所述文件進行分塊處理,并將所述文件的分塊存儲至本地緩存空間中。
可選地,所述方法還包括:
采用LRU算法管理所述本地緩存空間,換出緩存中最近最久未被使用的數(shù)據(jù),存入最近寫入的數(shù)據(jù)。
可選地,所述元數(shù)據(jù)信息包括以下中的至少一者:
分塊信息、存儲對象元數(shù)據(jù)、文件與對象的映射關系以及本地文件屬性信息。
可選地,所述對象存儲系統(tǒng)包括S3對象存儲系統(tǒng)和OSS對象存儲系統(tǒng)。
可選地,所述方法還包括:
在所述內核fuse模塊在用戶空間創(chuàng)建用戶空間文件系統(tǒng)時,通過參數(shù)配置選擇對象存儲系統(tǒng)類別和數(shù)據(jù)中心。
相應地,本發(fā)明還提供一種讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的裝置。所述裝置包括:
掛載單元,用于將所述對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的用戶空間文件系統(tǒng)中,并配置每個客戶端到所述對象存儲系統(tǒng)中存儲空間的路徑信息;
讀取單元,用于在客戶端讀取存儲對象的情況下,先從所述用戶空間文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存中沒有要讀取的數(shù)據(jù),則根據(jù)所述用戶空間文件系統(tǒng)數(shù)據(jù)庫中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作所述對象存儲系統(tǒng)中的存儲對象,實現(xiàn)所述對象存儲系統(tǒng)中的數(shù)據(jù)的讀?。?/p>
寫入單元,用于在客戶端寫入文件的情況下,所述用戶空間文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和分塊信息,最后調用rest服務將緩存中的的分塊寫入所述對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息。
可選地,所述讀取單元,還用于:
在所述客戶端讀取存儲對象的情況下,根據(jù)所述數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息判斷本地緩存空間中是否存在所請求的數(shù)據(jù)資源,若存在,則讀取所述本地緩存空間中的數(shù)據(jù)。
通過上述技術方案,將對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的用戶空間文件系統(tǒng)中,并配置每個客戶端到對象存儲系統(tǒng)中存儲空間的路徑信息;在客戶端讀取存儲對象的情況下,先從用戶空間文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存中沒有要讀取的數(shù)據(jù),則根據(jù)用戶空間文件系統(tǒng)數(shù)據(jù)庫中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作對象存儲系統(tǒng)中的存儲對象,實現(xiàn)對象存儲系統(tǒng)中的數(shù)據(jù)的讀?。辉诳蛻舳藢懭胛募那闆r下,用戶空間文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和分塊信息,最后調用rest服務將緩存中的分塊寫入對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息,不僅極大地方便了信息計算程序對大量中間文件進行頻繁的讀寫操作,而且還優(yōu)化了計算程序的處理流程。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹。顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些圖獲得其他的附圖。
圖1是本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法的流程圖;
圖2是本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的裝置的結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖1是本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法的流程圖。如圖1所示,本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法包括:
在步驟S101中,將所述對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的用戶空間文件系統(tǒng)中,并配置每個客戶端到所述對象存儲系統(tǒng)中存儲空間的路徑信息。
其中,所述對象存儲系統(tǒng)包括亞馬遜的S3對象存儲系統(tǒng)和阿里云的OSS對象存儲系統(tǒng)。對象存儲系統(tǒng)負責對象數(shù)據(jù)的存儲,由對象存儲系統(tǒng)提供標準的API接口,供rest服務進行對象操作。內核fuse模塊提供文件操作接口,并和虛擬文件系統(tǒng)進行交互。通過rest服務和內核fuse模塊將對象存儲系統(tǒng)以文件系統(tǒng)的形式掛載到用戶空間中。此外,通過rest接口操作及管理對象存儲系統(tǒng)中的遠程存儲對象。根據(jù)不同的文件操作封裝一組不同的rest接口和緩存操作接口成為一個單獨事務,以完成一個文件操作,如讀操作或寫操作等。
具體地,每個客戶端到對象存儲系統(tǒng)的存儲空間均有一條自定義的路徑,并將自定義的路徑掛載于用戶空間文件系統(tǒng)中,從而實現(xiàn)了數(shù)據(jù)的隔離和保護。在客戶端所寫入的文件被分塊處理成多個文件分塊的情況下,一個文件會對應多個存儲對象,也就是說,一個文件映射成多個對象存儲至對象存儲系統(tǒng)的存儲空間的同一個路徑下,并支持多個客戶端同時掛載同一存儲空間下的不同路徑。不同的客戶端在同時掛載于同一存儲空間的情況下,需要配置不同的存儲空間路徑。如果路徑相同,將掛載失敗。
優(yōu)選地,所述方法還包括:在所述內核fuse模塊在用戶空間創(chuàng)建用戶空間文件系統(tǒng)時,通過參數(shù)配置選擇對象存儲系統(tǒng)類別和數(shù)據(jù)中心。具體地,在創(chuàng)建文件空間時客戶端可以通過參數(shù)配置選擇不同的對象存儲系統(tǒng)(S3或OSS)和數(shù)據(jù)中心(endpoint)。
接著,在步驟S102中,在客戶端讀取存儲對象的情況下,先從所述用戶空間文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存中沒有要讀取的數(shù)據(jù),則根據(jù)所述用戶空間文件系統(tǒng)數(shù)據(jù)庫中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作所述對象存儲系統(tǒng)中的存儲對象,實現(xiàn)所述對象存儲系統(tǒng)中的數(shù)據(jù)的讀取。
其中,所述元數(shù)據(jù)信息包括:分塊信息、存儲對象元數(shù)據(jù)、文件與對象的映射關系以及本地文件屬性信息。具體地,分塊信息用于在客戶端寫入的文件被分塊時記錄分割點和分塊大小等信息,存儲對象元數(shù)據(jù)用于記錄文件分塊在對象存儲系統(tǒng)的存儲空間中的存儲對象的屬性信息,文件與對象的映射關系用于記錄文件名與對象存儲系統(tǒng)的存儲空間中的一個或多個對象名(存儲對象的名稱)之間的映射關系,本地文件屬性信息用于管理和處理本地文件。
不同的客戶端的數(shù)據(jù)存放到對象存儲系統(tǒng)的同一存儲空間的不同路徑下,在分布式環(huán)境下處理多個讀取任務時,不同客戶端的生物信息計算程序通過讀取不同路徑下的數(shù)據(jù)同時運行。
優(yōu)選地,在所述客戶端讀取存儲對象的情況下,根據(jù)所述數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息判斷本地緩存空間中是否存在所述數(shù)據(jù)資源,若存在,則讀取所述本地緩存空間中的數(shù)據(jù),并將所述存儲對象發(fā)送至相應的客戶端。藉此,在文件系統(tǒng)可直接得到客戶端所需的存儲對象,不僅節(jié)省了資源,還節(jié)省了讀取數(shù)據(jù)的時間。
最后,在步驟S103中,在客戶端寫入文件的情況下,所述用戶空間文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和分塊信息,最后調用rest服務將緩存中的分塊寫入所述對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息。
其中,用戶空間文件系統(tǒng)通過寫入文件的屬性信息,在寫入過程中同時初始化元數(shù)據(jù)信息,以供讀取數(shù)據(jù)時使用。
具體地,所述根據(jù)所述寫入文件的屬性信息對所述文件進行處理,包括:根據(jù)所述文件的屬性信息判斷所述文件的大小是否大于預設的閾值;在根據(jù)所述文件的屬性信息判斷所述文件的大小大于預設的閾值的情況下,將所述文件進行分塊處理,并將所述文件的分塊存儲至本地緩存空間中。此外,還將分塊信息添加到數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息中。其中,預設的閾值為100MB,在文件的大小大于100MB的情況下,將文件進行分塊處理,并將文件分塊存放到同一存儲空間的一個路徑下或將文件分塊存儲至本地緩存空間中。藉此,減少分塊數(shù)量,減輕因緩存管理和頻繁的rest服務所帶來的性能影響。
其中,本地緩存空間的大小可配置,默認為128GB,以適應絕大多數(shù)生物信息計算程序對大文件大寫性能的要求。
優(yōu)選地,所述方法還包括:在根據(jù)所述文件大小及分塊大小對所述文件進行處理后,將處理后的文件存儲至本地緩存空間,并通過rest服務將存儲至本地緩存空間的文件上傳至所述對象存儲系統(tǒng)的存儲空間中。具體地,rest接口在將存儲至本地緩存空間的文件上傳至所述對象存儲系統(tǒng)的存儲空間后,返回存儲對象元數(shù)據(jù)信息以及文件與對象的映射關系,并將存儲對象元數(shù)據(jù)信息以及文件與對象的映射關系添加到數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息中。藉此,在寫數(shù)據(jù)時采用緩存和并發(fā)處理,方便了程序對大量中間文件進行頻繁的寫操作。
優(yōu)選地,所述方法還包括:采用LRU算法管理所述本地緩存空間,換出最近最久未使用的存儲對象,并存入最新寫入的數(shù)據(jù)。其中,LRU算法為最近最久未使用算法,將長時間未使用的數(shù)據(jù)換出,存入最近生成的數(shù)據(jù)。藉此,能夠增加客戶端從本地緩存空間中讀取存儲對象的概率。
該方法是用phthon編寫的linux后臺服務程序,內部實現(xiàn)對用戶不可見,用戶可以在shell終端進行操作。
本實施例通過將對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的文件系統(tǒng)中,并配置每個客戶端到對象存儲系統(tǒng)中存儲空間的路徑信息;在客戶端讀取存儲對象的情況下,先從所述文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存沒有要讀取的數(shù)據(jù),則根據(jù)用戶空間文件系統(tǒng)中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作對象存儲系統(tǒng)中的存儲對象,實現(xiàn)對象存儲系統(tǒng)中的數(shù)據(jù)的讀??;在客戶端寫入文件的情況下,所述文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和及分塊信息,最后調用rest服務將緩存中的的分塊寫入對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息。本發(fā)明不僅極大地方便了信息計算程序對大量中間文件進行頻繁的讀寫操作,而且還優(yōu)化了計算程序的處理流程。
以下以具體的技術方案為例進行相關說明:
客戶端需要將生物信息文件的格式轉化成分析軟件能識別的格式,調用了fastq_quality_convert這個程序進行文件格式的轉化,并使用本申請中的用戶空間文件系統(tǒng)將轉化后的文件輸出到對象存儲系統(tǒng)中,具體使用包含如下步驟:
第一步,在配置文件中配置認證信息,配置信息如下:
1、storage-url:存儲系統(tǒng)名稱://bucket名稱
2、backend-login:對象存儲系統(tǒng)提供的訪問id(Access_Key_id)
3、backend-password:對象存儲系統(tǒng)提供的訪問密碼(Access_Key_Secret)
4、fs-passphrase:創(chuàng)建用戶空間文件系統(tǒng)時用戶指定的驗證
第二步,指定命令行參數(shù),參數(shù)包括如下:
1、存儲系統(tǒng)名稱,oss或s3,在本實施例中使用oss
2、bucket名稱,一個命名空間,用于存儲對象,在本實施例中使用了名為bmksxoutputfiles的bucket。
3、數(shù)據(jù)中心名稱,若使用的存儲系統(tǒng)是s3,則不用指定數(shù)據(jù)中心名稱,若使用oss,則需要指定內網(wǎng)使用的數(shù)據(jù)中心名稱,本實施例中使用的是oss-cn-beijing-internal。
4、用戶空間名稱,用戶自定義的存儲對象的地方,為存儲空間下的一個自定義路徑,在本實施例中使用了fastq_convert的存儲空間。
第三步,配置完成后,通過命令行創(chuàng)建文件系統(tǒng)。
第四步,創(chuàng)建好文件系統(tǒng),即可通過命令掛載,掛載時需要指定掛載點,在本實施例中將文件系統(tǒng)掛載到/mnt/bmkfsql目錄下。
第五步,掛載完成后,用戶就可以像使用本地文件系統(tǒng)一樣使用對象存儲系統(tǒng)中的數(shù)據(jù)。計算程序將輸出文件生成到用戶空間文件系統(tǒng)的掛載目錄下,并記錄了計算程序運行的開始和結束時間。
測試證明,系統(tǒng)較好地滿足了生物信息計算程序在運行過程中對讀寫文件性能的要求,具有較高實用性。
在本發(fā)明另一實施例中,某用戶使用比對程序Tophat對RNA-Seq數(shù)據(jù)進行快速剪切映射,并使用用戶空間文件系統(tǒng)將中間文件和結果保存到對象存儲系統(tǒng)中。在程序運行的過程中,生成了大量的中間文件,Tophat程序會對這些中間文件進行頻繁的讀寫操作。具體過程如下:
第一步,創(chuàng)建并掛載文件系統(tǒng),掛載點為/mnt/bmkfsql/Tophat
第二步,運行tophat程序,將程序輸出目錄指定為/mnt/bmkfsql/Tophat,
在本實施例中,將Tophat程序的啟動命令和記錄程序開始、結束時間的命令都配置到了命令行中,然后通過命令行后臺啟動,并將輸出日志記錄到tophat.log文件中,以防止Topaht程序因shell終端連接斷開而中斷。
第三步,等待程序運行完,先查看日志信息,總共運行了6小時39分鐘25秒,和私有云的運行時間6小時23分鐘34秒相接近,達到了預期期望。然后查看文件系統(tǒng)中的輸出信息。其中,align_summary.txt是最終的結果文件,其他是一些輔助文件。在本實施例中,并沒有看到很多中間文件,這是因為Tophat程序在運行最后會將一個tmp文件夾刪除,這個文件夾中存放了大量的中間文件。這里可以再運行一次,在程序沒運行完查看文件系統(tǒng)中的文件,在/mnt/bmkfsql/Tophat/tmp目錄下生成了很多中間文件。
本實例很好地說明了本發(fā)明中的文件系統(tǒng)具有很高的穩(wěn)定性和健壯性,較好地支撐了計算程序對大量中間文件和結果文件進行的頻繁操作,適合生產(chǎn)使用。
對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。
圖2是本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的裝置的結構示意圖。如圖2所示,本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的裝置包括:
掛載單元201,用于將所述對象存儲系統(tǒng)掛載到內核fuse模塊在用戶空間創(chuàng)建的用戶空間文件系統(tǒng)中,并配置每個客戶端到所述對象存儲系統(tǒng)中存儲空間的路徑信息;
讀取單元202,用于在客戶端讀取存儲對象的情況下,先從所述用戶空間文件系統(tǒng)的緩存中讀取數(shù)據(jù),若緩存中沒有要讀取的數(shù)據(jù),則根據(jù)所述用戶空間文件系統(tǒng)數(shù)據(jù)庫中存儲對象的元數(shù)據(jù)信息封裝rest服務接口,通過rest服務操作所述對象存儲系統(tǒng)中的存儲對象,實現(xiàn)所述對象存儲系統(tǒng)中的數(shù)據(jù)的讀??;
寫入單元203,用于在客戶端寫入文件的情況下,所述用戶空間文件系統(tǒng)根據(jù)文件大小和分塊大小,將文件分割成一個或多個分塊文件,寫入本地緩存,并存儲文件屬性信息和分塊信息,最后調用rest服務將緩存中的的分塊寫入所述對象存儲系統(tǒng),并記錄存儲對象的元數(shù)據(jù)信息。
在本發(fā)明公開的一可選實施例中,所述讀取單元202,還用于:
在所述客戶端讀取存儲對象的情況下,根據(jù)所述數(shù)據(jù)庫中存儲的元數(shù)據(jù)信息判斷本地緩存空間中是否存在所請求的數(shù)據(jù)資源,若存在,則讀取所述本地緩存空間中的數(shù)據(jù)。
對于本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的裝置還涉及的具體細節(jié)已在本發(fā)明一實施例提供的讀寫對象存儲系統(tǒng)中的數(shù)據(jù)的方法中作了詳細的描述,在此不再贅述。
應當注意的是,在本發(fā)明的系統(tǒng)的各個部件中,根據(jù)其要實現(xiàn)的功能而對其中的部件進行了邏輯劃分,但是,本發(fā)明不受限于此,可以根據(jù)需要對各個部件進行重新劃分或者組合,例如,可以將一些部件組合為單個部件,或者可以將一些部件進一步分解為更多的子部件。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
以上實施方式僅適于說明本發(fā)明,而并非對本發(fā)明的限制,有關技術領域的普通技術人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應由權利要求限定。