專利名稱:一種面向切面的云存儲(chǔ)引擎構(gòu)造方法
技術(shù)領(lǐng)域:
本發(fā)明屬于網(wǎng)絡(luò)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種云存儲(chǔ)引擎的構(gòu)造方法。
背景技術(shù):
在現(xiàn)代計(jì)算技術(shù)、軟硬件技術(shù)、網(wǎng)絡(luò)技術(shù)的發(fā)展下,計(jì)算機(jī)系統(tǒng)通過集群應(yīng)用、網(wǎng)格計(jì)算技術(shù)或分布式文件系統(tǒng)等技術(shù),將網(wǎng)絡(luò)中大量各種不同類型的存儲(chǔ)設(shè)備通過應(yīng)用軟件集合起來協(xié)同工作,共同對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問功能。我們把這種系統(tǒng)稱之為云計(jì)算機(jī)系統(tǒng)。在這樣的云計(jì)算系統(tǒng)中,系統(tǒng)的核心是大量數(shù)據(jù)的存儲(chǔ)和管理,而針對(duì)這種情況,云計(jì)算系統(tǒng)中需要配置大量的存儲(chǔ)設(shè)備,這些存儲(chǔ)設(shè)備存儲(chǔ)的數(shù)據(jù)及數(shù)據(jù)本身的管理方法,就衍生、轉(zhuǎn)變成為一個(gè)云存儲(chǔ)系統(tǒng)(簡(jiǎn)稱云存儲(chǔ));與傳統(tǒng)的存儲(chǔ)設(shè)備相比,云存儲(chǔ)系統(tǒng)不僅僅是一個(gè)硬件,而是一個(gè)網(wǎng)絡(luò)設(shè)備、存儲(chǔ)設(shè)備、服務(wù)器、應(yīng)用軟件、公用訪問接口、 接入網(wǎng)、和客戶端程序等多個(gè)部分組成的復(fù)雜系統(tǒng),在這個(gè)系統(tǒng)中,各部分以存儲(chǔ)設(shè)備為核心,通過應(yīng)用軟件來對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問服務(wù)。存儲(chǔ)引擎是數(shù)據(jù)庫(kù)系統(tǒng)中,一種將數(shù)據(jù)集中存儲(chǔ)管理的方式,現(xiàn)有的存儲(chǔ)引擎,主要針對(duì)關(guān)系型數(shù)據(jù)庫(kù),這種存儲(chǔ)引擎將關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)表按照存儲(chǔ)方法、索引類型以及鎖定水平分類,并將分類后的數(shù)據(jù)表加載到內(nèi)存中。但是現(xiàn)有的存儲(chǔ)引擎并沒有解除數(shù)據(jù)之間高度耦合的關(guān)系,沒有改變數(shù)據(jù)的存儲(chǔ)方法,使得用戶在檢索數(shù)據(jù)和進(jìn)行數(shù)據(jù)管理時(shí),花費(fèi)大量的時(shí)間進(jìn)行查找、比對(duì),而且現(xiàn)有的存儲(chǔ)引擎沒有支持非關(guān)系型數(shù)據(jù)庫(kù)。因此,現(xiàn)有的存儲(chǔ)引擎在面對(duì)異構(gòu)的云存儲(chǔ)分布方式時(shí),難以適應(yīng)數(shù)據(jù)變化大、數(shù)據(jù)并發(fā)量高等新特點(diǎn)。
發(fā)明內(nèi)容
本發(fā)明的目的是解決現(xiàn)有的存儲(chǔ)引擎在面對(duì)異構(gòu)的云存儲(chǔ)分布方式時(shí),難以適應(yīng)數(shù)據(jù)變化大、數(shù)據(jù)并發(fā)量高的不足,提出一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,該方法利用面向切面的思想,抽象出對(duì)數(shù)據(jù)的操作,屏蔽對(duì)底層關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)的差異, 統(tǒng)一對(duì)數(shù)據(jù)的管理和訪問控制。本發(fā)明的技術(shù)方案是一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,包括如下步驟步驟1 設(shè)計(jì)人員根據(jù)所采用的數(shù)據(jù)庫(kù)類型構(gòu)建數(shù)據(jù)訪問層;步驟2 設(shè)計(jì)人員對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行切面;步驟3 設(shè)計(jì)人員分析業(yè)務(wù)請(qǐng)求,對(duì)數(shù)據(jù)操作切面得到切面數(shù)據(jù);步驟4 設(shè)計(jì)人員在步驟3中構(gòu)建好的切面數(shù)據(jù)的基礎(chǔ)上,構(gòu)建云存儲(chǔ)引擎。上述步驟1中構(gòu)建數(shù)據(jù)訪問層的具體過程如下確定使用數(shù)據(jù)存儲(chǔ)方式為關(guān)系型數(shù)據(jù)庫(kù)或非關(guān)系型數(shù)據(jù)庫(kù),分別對(duì)關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)建立數(shù)據(jù)訪問層。上述步驟2中對(duì)關(guān)系型數(shù)據(jù)庫(kù)切面的過程包括如下步驟遍歷數(shù)據(jù)庫(kù)所有的原始數(shù)據(jù)表,對(duì)每張表進(jìn)行編號(hào),保證編號(hào)不重復(fù);將上一步中的表編號(hào)單獨(dú)存儲(chǔ)在另一張表中;對(duì)原始數(shù)據(jù)表的數(shù)據(jù),逐列(一列一屬性)提取,將提取的數(shù)據(jù)單獨(dú)存放在新的數(shù)據(jù)表中,再將新的數(shù)據(jù)表中的數(shù)據(jù)編號(hào),所有從原始數(shù)據(jù)表逐列提取的數(shù)據(jù),在所有的新的數(shù)據(jù)表中對(duì)應(yīng)的編號(hào)一致,這個(gè)編號(hào)可以是原始數(shù)據(jù)表中的主鍵,也可以用其他方式生成, 但要保證新的數(shù)據(jù)表中的所有數(shù)據(jù)編號(hào)不重復(fù)。上述步驟2中對(duì)非關(guān)系數(shù)據(jù)庫(kù)切面的過程包括如下步驟非關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)是用鍵值對(duì)的形式存儲(chǔ)的,每一條數(shù)據(jù)都會(huì)有數(shù)據(jù)鍵和對(duì)應(yīng)的數(shù)據(jù)值,所以在對(duì)非關(guān)系型數(shù)據(jù)庫(kù)切面的時(shí)候,只需要將數(shù)據(jù)的數(shù)據(jù)鍵存儲(chǔ)在一張表中,數(shù)據(jù)鍵對(duì)應(yīng)的數(shù)據(jù)值存儲(chǔ)在另一張表中,得到兩個(gè)新的數(shù)據(jù)表。本發(fā)明的有益效果是本發(fā)明與傳統(tǒng)技術(shù)相比較,在現(xiàn)有的云存儲(chǔ)架構(gòu)中,新加入數(shù)據(jù)訪問層的概念,該數(shù)據(jù)訪問層使用面向切面編程的思想將數(shù)據(jù)切面處理,大幅提高了數(shù)據(jù)檢索和數(shù)據(jù)管理的效率,簡(jiǎn)化了關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù)處理過程中數(shù)據(jù)異構(gòu)的復(fù)雜性問題。
圖1是本發(fā)明所涉及的云存儲(chǔ)系統(tǒng)整體架構(gòu)示意圖。圖2為本發(fā)明的面向切面管理模型圖。
具體實(shí)施例方式下面結(jié)合附圖和具體的實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的闡述。為了對(duì)本發(fā)明的具體實(shí)施例做說明,有必要先確定一些本發(fā)明的專用的概念和理論。1.云存儲(chǔ)架構(gòu)云存儲(chǔ)架構(gòu),通過添加標(biāo)準(zhǔn)硬件和共享標(biāo)準(zhǔn)網(wǎng)絡(luò)(公共互聯(lián)網(wǎng)或私有的企業(yè)內(nèi)部網(wǎng))提供對(duì)數(shù)據(jù)的訪問,云容量和性能具有良好的可擴(kuò)性。數(shù)百臺(tái)云存儲(chǔ)服務(wù)器對(duì)外提供服務(wù),邏輯上是一個(gè)單一的、大型的存儲(chǔ)池設(shè)備。本發(fā)明所涉及的云存儲(chǔ)系統(tǒng),其結(jié)構(gòu)模型自下而上由以下五層組成,如圖1所示, 其中第一層(存儲(chǔ)層)、第三層(基礎(chǔ)管理層)、第四層(訪問層)、第五層(應(yīng)用接口層) 為標(biāo)準(zhǔn)的云存儲(chǔ)結(jié)構(gòu)模型,第二層是本發(fā)明為了構(gòu)建新的云存儲(chǔ)引擎,而新引入的數(shù)據(jù)訪問層,該數(shù)據(jù)訪問層的構(gòu)建使用了面向切面編程的思想。下面對(duì)各層做進(jìn)一步的介紹11.存儲(chǔ)層存儲(chǔ)層是云存儲(chǔ)最基礎(chǔ)的部分。存儲(chǔ)設(shè)備可以是FC光纖通道存儲(chǔ)設(shè)備,可以是 NAS和iSCSI等IP存儲(chǔ)設(shè)備,也可以是SCSI或SAS等DAS存儲(chǔ)設(shè)備。云存儲(chǔ)中的存儲(chǔ)設(shè)備往往數(shù)量龐大且分布多不同地域,彼此之間通過廣域網(wǎng)、互聯(lián)網(wǎng)或者FC光纖通道網(wǎng)絡(luò)連接在一起。存儲(chǔ)層可以包含存儲(chǔ)引擎,存儲(chǔ)引擎是一種將數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件 (或者內(nèi)存)中的方法。根據(jù)各種不同技術(shù)中采用的對(duì)數(shù)據(jù)存儲(chǔ)方式、索引技巧、鎖定水平的不同分類后,最終提供廣泛的功能。12.數(shù)據(jù)訪問層數(shù)據(jù)訪問層是使用面向切面編程思想實(shí)現(xiàn)的對(duì)關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)操作。數(shù)據(jù)訪問層向上封裝成為具體的程序調(diào)用,表現(xiàn)為相同的程序名稱,向下實(shí)現(xiàn)了對(duì)不同類型數(shù)據(jù)庫(kù)的訪問,將相同的程序名稱映射為對(duì)不同數(shù)據(jù)庫(kù)的具體操作。13.基礎(chǔ)管理層
基礎(chǔ)管理層是云存儲(chǔ)最核心的部分。基礎(chǔ)管理層通過集群、分布式文件系統(tǒng)和網(wǎng)格計(jì)算等技術(shù),實(shí)現(xiàn)云存儲(chǔ)中多個(gè)存儲(chǔ)設(shè)備之間的協(xié)同工作,使多個(gè)的存儲(chǔ)設(shè)備可以對(duì)外提供同一種服務(wù),并提供更大更強(qiáng)更好的數(shù)據(jù)訪問性能。
身份認(rèn)證技術(shù)、數(shù)據(jù)加密技術(shù)保證云存儲(chǔ)中的數(shù)據(jù)不會(huì)被未授權(quán)的用戶所訪問, 同時(shí),通過各種數(shù)據(jù)備份和容災(zāi)技術(shù)和措施可以保證云存儲(chǔ)中的數(shù)據(jù)不會(huì)丟失,保證云存儲(chǔ)自身的安全和穩(wěn)定。
14.訪問層
任何一個(gè)授權(quán)用戶都可以通過標(biāo)準(zhǔn)的公用應(yīng)用接口來登錄云存儲(chǔ)系統(tǒng),享受云存儲(chǔ)服務(wù)。云存儲(chǔ)運(yùn)營(yíng)單位不同,云存儲(chǔ)提供的訪問類型和訪問手段也不同。
15.應(yīng)用接口層
云存儲(chǔ)最靈活的部分。不同的云存儲(chǔ)運(yùn)營(yíng)單位可以根據(jù)實(shí)際業(yè)務(wù)類型,開發(fā)不同的應(yīng)用服務(wù)接口,提供不同的應(yīng)用服務(wù)。
2.簡(jiǎn)單對(duì)象訪問協(xié)議(SOAP, Simple Object Access Protocol)
簡(jiǎn)單對(duì)象訪問協(xié)議是一種標(biāo)準(zhǔn)化的通訊規(guī)范,簡(jiǎn)化了網(wǎng)頁(yè)服務(wù)器從數(shù)據(jù)庫(kù)提取數(shù)據(jù)的過程,使得網(wǎng)頁(yè)服務(wù)器無(wú)需再花大量時(shí)間格式化數(shù)據(jù),并能夠讓不同應(yīng)用程序之間透過HTTP通訊協(xié)定,以XML格式互相交換彼此的數(shù)據(jù),使得數(shù)據(jù)的傳輸與具體的編程語(yǔ)言、平臺(tái)和硬件無(wú)關(guān)。
3.(Aspect Oriented Programming, A0P)白勺:j>@。
面向切面編程主要實(shí)現(xiàn)的目的是針對(duì)業(yè)務(wù)處理過程中的切面進(jìn)行提取,它所面對(duì)的是處理過程中的某個(gè)步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。
下面介紹本發(fā)明中需要用到的面向切面編程的一些基本概念
接入點(diǎn)(join point):是程序執(zhí)行中的一個(gè)精確執(zhí)行點(diǎn),例如程序的一個(gè)方法。接入點(diǎn)是一個(gè)抽象的概念,在實(shí)現(xiàn)面向切面編程時(shí),并不需要刻意去定義一個(gè)連接點(diǎn)。
切點(diǎn)(point cut)本質(zhì)上是一個(gè)捕獲接入點(diǎn)的結(jié)構(gòu)。通常定義一個(gè)切點(diǎn),來捕獲程序中相關(guān)方法的調(diào)用。
切面(aspect)切點(diǎn)和連接點(diǎn)結(jié)合起來就是切面,是針對(duì)具體程序中的一個(gè)程序模塊,這個(gè)程序模塊包含了執(zhí)行切面的具體方法。
通知(advide)切點(diǎn)的執(zhí)行代碼,是切面中包含的執(zhí)行具體程序的代碼。
目標(biāo)對(duì)象(target)切面作用的具體對(duì)象。
代理對(duì)象(proxy)切面通過操作代理對(duì)象,間接操作具體對(duì)象。
織入(weaving)是指切面使用代理對(duì)象的過程。
在充分理解上述本發(fā)明相關(guān)的專用的概念和理論后,下面進(jìn)一步的介紹本發(fā)明的具體實(shí)施過程一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,如圖1所示,包括步驟
步驟1 設(shè)計(jì)人員根據(jù)所采用的數(shù)據(jù)庫(kù)類型構(gòu)建數(shù)據(jù)訪問層。
構(gòu)建數(shù)據(jù)訪問層的具體過程如下
步驟11 確定使用數(shù)據(jù)存儲(chǔ)方式為關(guān)系型數(shù)據(jù)庫(kù)或非關(guān)系型數(shù)據(jù)庫(kù),分別對(duì)關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)建立數(shù)據(jù)訪問層;具體設(shè)計(jì)如下
a.關(guān)系型數(shù)據(jù)庫(kù)可使用的訪問方式包括
ODBC (Open Database Connectivity)開放數(shù)據(jù)庫(kù)互連,
JDBC (Java Database Connectivity) :java
ADO (ActiveX Data Objects) :ActiveX 數(shù)據(jù)對(duì)象,
OLEDB (Object Linking and Embedding Database):對(duì)象鏈接嵌入數(shù)據(jù)庫(kù);
b.非關(guān)系型數(shù)據(jù)庫(kù)可使用的訪問方式包括
Key-Value 基于鍵值對(duì)的存儲(chǔ)方式;
由于上述提及的訪問方式均為本領(lǐng)域的現(xiàn)有技術(shù),因此未對(duì)其詳細(xì)展開描述。
步驟2 設(shè)計(jì)人員對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行切面。
步驟21 在關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)是用表的形式存儲(chǔ)的,表的每一行就是一條數(shù)據(jù),表的每一列就是數(shù)據(jù)所擁有的屬性,由于關(guān)系型數(shù)據(jù)庫(kù)只針對(duì)數(shù)據(jù)本身,而沒有針對(duì)數(shù)據(jù)的屬性,所以可以對(duì)數(shù)據(jù)的屬性進(jìn)行切面。
關(guān)系型數(shù)據(jù)庫(kù)切面的過程如下
遍歷數(shù)據(jù)庫(kù)所有的原始數(shù)據(jù)表,對(duì)每張表進(jìn)行編號(hào),保證編號(hào)不重復(fù);
將上一步中的表編號(hào)單獨(dú)存儲(chǔ)在另一張表中;
對(duì)原始數(shù)據(jù)表的數(shù)據(jù),逐列(一列一屬性)提取,將提取的數(shù)據(jù)單獨(dú)存放在新的數(shù)據(jù)表中,再將新的數(shù)據(jù)表中的數(shù)據(jù)編號(hào),所有從原始數(shù)據(jù)表逐列提取的數(shù)據(jù),在所有的新的數(shù)據(jù)表中對(duì)應(yīng)的編號(hào)一致,這個(gè)編號(hào)可以是原始數(shù)據(jù)表中的主鍵,也可以用其他方式生成, 但要保證新的數(shù)據(jù)表中的所有數(shù)據(jù)編號(hào)不重復(fù)。
步驟22 在非關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)是用鍵值對(duì)的形式存儲(chǔ)的,每一條數(shù)據(jù)都會(huì)有數(shù)據(jù)鍵和對(duì)應(yīng)的數(shù)據(jù)值,所以在對(duì)非關(guān)系型數(shù)據(jù)庫(kù)切面的時(shí)候,只需要將數(shù)據(jù)的數(shù)據(jù)鍵存儲(chǔ)在一張表中,數(shù)據(jù)鍵對(duì)應(yīng)的數(shù)據(jù)值存儲(chǔ)在另一張表中,得到兩個(gè)新的數(shù)據(jù)表。
以上用新的數(shù)據(jù)表存儲(chǔ)的數(shù)據(jù)就是切面數(shù)據(jù)。
步驟3 設(shè)計(jì)人員分析業(yè)務(wù)請(qǐng)求,對(duì)數(shù)據(jù)操作切面得到切面數(shù)據(jù)。如圖2所示,切面操作可以是一種抽象行為,如數(shù)據(jù)的操作可抽象為查詢、新增、修改、刪除、日志等,每一種操作即可作為一個(gè)切面操作;
在數(shù)據(jù)庫(kù)系統(tǒng)中,設(shè)計(jì)人員首先提取數(shù)據(jù)操作的切面,這種數(shù)據(jù)操作對(duì)應(yīng)具體的數(shù)據(jù)庫(kù)操作步驟,具體的數(shù)據(jù)庫(kù)操作步驟又需要具體的數(shù)據(jù)庫(kù)訪問方式,設(shè)計(jì)人員將具體的數(shù)據(jù)庫(kù)訪問方式封裝成一個(gè)程序,這個(gè)程序可以訪問關(guān)系型數(shù)據(jù)庫(kù),也可訪問非關(guān)系型數(shù)據(jù)庫(kù),這個(gè)程序作為通知。
應(yīng)用接口層會(huì)向服務(wù)器發(fā)出請(qǐng)求,發(fā)出請(qǐng)求的程序是接入點(diǎn),請(qǐng)求從接入點(diǎn)發(fā)出后,切面操作截獲服務(wù)請(qǐng)求,捕獲接入點(diǎn)的程序作為切點(diǎn),通過切點(diǎn)捕獲到的請(qǐng)求,將由切點(diǎn)判斷請(qǐng)求的有效性,如果為無(wú)效請(qǐng)求則攔截,如果是有效請(qǐng)求就將請(qǐng)求交給通知進(jìn)行處理,通知針對(duì)具體的請(qǐng)求會(huì)轉(zhuǎn)向具體的數(shù)據(jù)庫(kù)對(duì)象。
具體的數(shù)據(jù)庫(kù)對(duì)象已經(jīng)通過第一步變?yōu)榍忻鏀?shù)據(jù),這時(shí),切面數(shù)據(jù)就是目標(biāo)對(duì)象, 如果目標(biāo)對(duì)象本身是對(duì)數(shù)據(jù)的封裝,這些封裝只是包含了對(duì)真實(shí)數(shù)據(jù)的操作,則把包含了對(duì)真實(shí)數(shù)據(jù)操作的數(shù)據(jù)對(duì)象稱為代理對(duì)象,當(dāng)切面操作要處理切面數(shù)據(jù)時(shí),就會(huì)先處理代理對(duì)象,然后通過代理對(duì)象,實(shí)現(xiàn)對(duì)切面數(shù)據(jù)的操作。
上述切面操作通過操作代理對(duì)象而間接操作切面數(shù)據(jù)的過程稱為織入。
步驟4 設(shè)計(jì)人員在步驟3中構(gòu)建好的切面數(shù)據(jù)的基礎(chǔ)上,構(gòu)建云存儲(chǔ)引擎。
由于數(shù)據(jù)的存儲(chǔ)本身仍然需要依賴關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù),但由于兩者結(jié)構(gòu)差異大,數(shù)據(jù)交換時(shí)容易導(dǎo)致訪問出錯(cuò),因此在搭建云存儲(chǔ)引擎的過程中,使用步驟1 構(gòu)建的數(shù)據(jù)訪問方式來分別訪問數(shù)據(jù)庫(kù)。以此減少由于數(shù)據(jù)庫(kù)的差異帶來的影響。
步驟41 關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎的構(gòu)造過程包括如下步驟
a.將數(shù)據(jù)的刪除、更新及插入操作混合,這樣使得數(shù)據(jù)操作對(duì)數(shù)據(jù)的尺寸產(chǎn)生更少的存儲(chǔ)碎片;通過合并相鄰被刪除的存儲(chǔ)塊,以及若一個(gè)存儲(chǔ)塊被刪除,就擴(kuò)展到下一存儲(chǔ)塊的方式可以提高存儲(chǔ)的效率。
b.設(shè)定每個(gè)表的最大索引數(shù)。設(shè)定每個(gè)索引最大的列數(shù)是64個(gè)。最大的鍵長(zhǎng)度是IOM字節(jié)。對(duì)于鍵長(zhǎng)度超過250字節(jié)的情況,使用一個(gè)超過IOM字節(jié)的的鍵塊。
c.如果數(shù)據(jù)表中間的表沒有合適大小的塊,則新增一張表來輔助存儲(chǔ)。
d.索引文件里設(shè)定一個(gè)標(biāo)志,它表明表是否被正確關(guān)閉。
e.建立鎖機(jī)制。在訪問數(shù)據(jù)時(shí)加鎖,檢測(cè)死鎖的進(jìn)程在系統(tǒng)中產(chǎn)生死鎖之后的很短時(shí)間內(nèi)就檢測(cè)到死鎖的存在。一旦檢測(cè)到系統(tǒng)中產(chǎn)生了死鎖,就通過判斷申請(qǐng)數(shù)據(jù)的時(shí)間來選擇產(chǎn)生死鎖的兩個(gè)操作,讓先申請(qǐng)的操作先執(zhí)行。若申請(qǐng)的時(shí)間相同,則使用超時(shí)機(jī)制釋放鎖,兩個(gè)操作都不執(zhí)行。
步驟42 非關(guān)系型數(shù)據(jù)庫(kù)構(gòu)造存儲(chǔ)引擎構(gòu)造過程包括如下步驟
a.選擇可用的鍵值數(shù)據(jù)結(jié)構(gòu)
Lists (列表),
Sets (集合),
Sorted Sets (有序集合),
Hashes (哈希表),
鍵值的數(shù)據(jù)類型決定了該鍵值支持的操作,如列表、集合或有序集合的交集、并集、查集等高級(jí)原子操作。
b.將數(shù)據(jù)鍵先存儲(chǔ)高字節(jié),以允許一個(gè)更高地址的索引壓縮,當(dāng)記錄以排好序的順序插入,索引樹被重構(gòu),以便高字節(jié)僅包含一個(gè)鍵。以改善鍵值數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)效率。
c.將數(shù)據(jù)值先存儲(chǔ)低字節(jié),再存儲(chǔ)高字節(jié),以降低數(shù)據(jù)值和數(shù)據(jù)值所運(yùn)行的數(shù)據(jù)庫(kù)環(huán)境的依賴性,運(yùn)行數(shù)據(jù)庫(kù)的服務(wù)器使用補(bǔ)碼和浮點(diǎn)格式來表示數(shù)據(jù)值,數(shù)據(jù)行中的字節(jié)一般是未聯(lián)合的,從一個(gè)方向讀未聯(lián)合的字節(jié),這樣可以使得服務(wù)器在獲取列值時(shí)有更高的效率。
d.主從同步非關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)介質(zhì)會(huì)部署在異構(gòu)的系統(tǒng)中,所以存儲(chǔ)在異構(gòu)系統(tǒng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要同步,以保證數(shù)據(jù)的一致性。
異構(gòu)的系統(tǒng)通過網(wǎng)絡(luò)連接起來,在網(wǎng)絡(luò)中,每個(gè)異構(gòu)系統(tǒng)就是一個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù)需要同步,需就要一個(gè)全局定時(shí)方式,使得網(wǎng)絡(luò)中的存儲(chǔ)節(jié)點(diǎn)在一定的時(shí)間內(nèi)進(jìn)行數(shù)據(jù)同步,同步方式可以有主存儲(chǔ)節(jié)點(diǎn)定時(shí)和從存儲(chǔ)節(jié)點(diǎn)定時(shí)兩種。主定時(shí)工作方式是以本節(jié)點(diǎn)時(shí)鐘源作為定時(shí)的工作方式。從定時(shí)工作方式是以某一參考基準(zhǔn)時(shí)間為標(biāo)準(zhǔn),對(duì)本節(jié)點(diǎn)時(shí)鐘源進(jìn)行鎖定后再定時(shí)的工作方式。
完成上述步驟1到步驟4后,切面操作完成,使用SOAP協(xié)議將處理過后的切面數(shù)據(jù)轉(zhuǎn)化為XML格式,并根據(jù)請(qǐng)求的需要返回給應(yīng)用接口層相應(yīng)的數(shù)據(jù)。
下面結(jié)合一個(gè)實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的描述假設(shè)某大學(xué)需要組建一支籃球隊(duì),需要從身高、體重、年齡、興趣、健康情況三個(gè)方面選擇適合的同學(xué)參加篩選。現(xiàn)在使用面向切面編程的云存儲(chǔ)引擎來處理篩選請(qǐng)求。
步驟1 構(gòu)建數(shù)據(jù)訪問層。由于所有的同學(xué)不在同一個(gè)學(xué)院,每個(gè)學(xué)院的學(xué)生資料都存儲(chǔ)在不同的服務(wù)器上,且學(xué)院服務(wù)器上只存儲(chǔ)了身高、體重、年齡、興趣的資料,而健康情況存儲(chǔ)在校醫(yī)院的服務(wù)器上,且服務(wù)器上使用的數(shù)據(jù)庫(kù)是不同廠商的數(shù)據(jù)庫(kù)軟件,所以要針對(duì)這種異構(gòu)數(shù)據(jù)存儲(chǔ),需要對(duì)所有的不同數(shù)據(jù)庫(kù)建立一套訪問數(shù)據(jù)的機(jī)制。
步驟2 對(duì)數(shù)據(jù)進(jìn)行切面。在建立好訪問各個(gè)學(xué)院的數(shù)據(jù)庫(kù)數(shù)據(jù)和校醫(yī)院數(shù)據(jù)庫(kù)的機(jī)制后,將所有學(xué)生的信息進(jìn)行切面處理將不同數(shù)據(jù)庫(kù)中的基本數(shù)據(jù)從表中讀取,將身高、體重、年齡、興趣、健康情況等學(xué)生所有的屬性單獨(dú)抽取建表,并用學(xué)號(hào)關(guān)聯(lián)。身高、體重、年齡、興趣、健康情況表中的數(shù)據(jù)即為切面數(shù)據(jù),切面數(shù)據(jù)就是目標(biāo)對(duì)象。
步驟3 對(duì)數(shù)據(jù)操作進(jìn)行切面。對(duì)可能的操作進(jìn)行切面,雖然現(xiàn)在只有篩選一種功能,但是篩選后,可能還有記錄、通知、排序等數(shù)據(jù)操作等,所以對(duì)涉及到的操作進(jìn)行切面, 篩選本身就是一個(gè)切面,而發(fā)出篩選等操作請(qǐng)求的程序就是接入點(diǎn),接收篩選并判斷篩選是否有效的程序就是切點(diǎn),切點(diǎn)在獲取到有效的篩選請(qǐng)求后,將請(qǐng)求分發(fā)到不同的處理程序中,這些處理程序就是通知,通知存有不同學(xué)院和醫(yī)院數(shù)據(jù)庫(kù)訪問的方式,通知會(huì)對(duì)篩選請(qǐng)求查詢切面數(shù)據(jù),凡是符合條件的切面數(shù)據(jù),就會(huì)返回。如果切面數(shù)據(jù)本身不包含請(qǐng)求數(shù)據(jù),如請(qǐng)求年齡時(shí),只有出生日期信息,那么改變出生日期,年齡就會(huì)相應(yīng)的改變,則出生日期是一個(gè)代理對(duì)象。通知處理代理對(duì)象的過程就是織入。
步驟4:將所有需要的數(shù)據(jù)按照篩選條件獲取完后,將分散的切面數(shù)據(jù)重新組成關(guān)聯(lián)的獨(dú)立信息,呈現(xiàn)在篩選請(qǐng)求者的面前的,是組合完整的學(xué)生數(shù)據(jù)。
本領(lǐng)域的普通技術(shù)人員將會(huì)意識(shí)到,這里所述的實(shí)施例是為了幫助讀者理解本發(fā)明的原理,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實(shí)施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實(shí)質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,包括如下步驟步驟1 設(shè)計(jì)人員根據(jù)所采用的數(shù)據(jù)庫(kù)類型構(gòu)建數(shù)據(jù)訪問層;步驟2 設(shè)計(jì)人員對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行切面;步驟3 設(shè)計(jì)人員分析業(yè)務(wù)請(qǐng)求,對(duì)數(shù)據(jù)操作切面得到切面數(shù)據(jù);步驟4 設(shè)計(jì)人員在步驟3中構(gòu)建好的切面數(shù)據(jù)的基礎(chǔ)上,構(gòu)建云存儲(chǔ)引擎。
2.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,所述步驟1中構(gòu)建數(shù)據(jù)訪問層的具體過程如下確定使用數(shù)據(jù)存儲(chǔ)方式為關(guān)系型數(shù)據(jù)庫(kù)或非關(guān)系型數(shù)據(jù)庫(kù),分別對(duì)關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)建立數(shù)據(jù)訪問層。
3.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,所述步驟2中對(duì)關(guān)系型數(shù)據(jù)庫(kù)切面的過程包括如下步驟遍歷數(shù)據(jù)庫(kù)所有的原始數(shù)據(jù)表,對(duì)每張表進(jìn)行編號(hào),保證編號(hào)不重復(fù);將上一步中的表編號(hào)單獨(dú)存儲(chǔ)在另一張表中;對(duì)原始數(shù)據(jù)表的數(shù)據(jù),逐列(一列一屬性)提取,將提取的數(shù)據(jù)單獨(dú)存放在新的數(shù)據(jù)表中,再將新的數(shù)據(jù)表中的數(shù)據(jù)編號(hào),所有從原始數(shù)據(jù)表逐列提取的數(shù)據(jù),在所有的新的數(shù)據(jù)表中對(duì)應(yīng)的編號(hào)一致,這個(gè)編號(hào)可以是原始數(shù)據(jù)表中的主鍵,也可以用其他方式生成,但要保證新的數(shù)據(jù)表中的所有數(shù)據(jù)編號(hào)不重復(fù)。
4.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,所述步驟2中對(duì)非關(guān)系數(shù)據(jù)庫(kù)切面的過程包括如下步驟非關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)是用鍵值對(duì)的形式存儲(chǔ)的,每一條數(shù)據(jù)都會(huì)有數(shù)據(jù)鍵和對(duì)應(yīng)的數(shù)據(jù)值,所以在對(duì)非關(guān)系型數(shù)據(jù)庫(kù)切面的時(shí)候,只需要將數(shù)據(jù)的數(shù)據(jù)鍵存儲(chǔ)在一張表中,數(shù)據(jù)鍵對(duì)應(yīng)的數(shù)據(jù)值存儲(chǔ)在另一張表中,得到兩個(gè)新的數(shù)據(jù)表。
5.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,所述步驟3中對(duì)數(shù)據(jù)操作切面的具體過程包括如下步驟在數(shù)據(jù)庫(kù)系統(tǒng)中,設(shè)計(jì)人員首先提取數(shù)據(jù)操作的切面,這種數(shù)據(jù)操作對(duì)應(yīng)具體的數(shù)據(jù)庫(kù)操作步驟,具體的數(shù)據(jù)庫(kù)操作步驟又需要具體的數(shù)據(jù)庫(kù)訪問方式,設(shè)計(jì)人員將具體的數(shù)據(jù)庫(kù)訪問方式封裝成一個(gè)程序,這個(gè)程序可以訪問關(guān)系型數(shù)據(jù)庫(kù),也可訪問非關(guān)系型數(shù)據(jù)庫(kù),這個(gè)程序作為通知;應(yīng)用接口層會(huì)向服務(wù)器發(fā)出請(qǐng)求,發(fā)出請(qǐng)求的程序是接入點(diǎn),請(qǐng)求從接入點(diǎn)發(fā)出后,切面操作截獲服務(wù)請(qǐng)求,捕獲接入點(diǎn)的程序作為切點(diǎn),通過切點(diǎn)捕獲到的請(qǐng)求,將由切點(diǎn)判斷請(qǐng)求的有效性,如果為無(wú)效請(qǐng)求則攔截,如果是有效請(qǐng)求就將請(qǐng)求交給通知進(jìn)行處理,通知針對(duì)具體的請(qǐng)求會(huì)轉(zhuǎn)向具體的數(shù)據(jù)庫(kù)對(duì)象;具體的數(shù)據(jù)庫(kù)對(duì)象已經(jīng)通過第一步變?yōu)榍忻鏀?shù)據(jù),這時(shí),切面數(shù)據(jù)就是目標(biāo)對(duì)象,如果目標(biāo)對(duì)象本身是對(duì)數(shù)據(jù)的封裝,這些封裝只是包含了對(duì)真實(shí)數(shù)據(jù)的操作,則把包含了對(duì)真實(shí)數(shù)據(jù)操作的數(shù)據(jù)對(duì)象稱為代理對(duì)象,當(dāng)切面操作要處理切面數(shù)據(jù)時(shí),就會(huì)先處理代理對(duì)象,然后通過代理對(duì)象,實(shí)現(xiàn)對(duì)切面數(shù)據(jù)的操作。
6.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,步驟4中關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎的構(gòu)造過程包括如下步驟a.將數(shù)據(jù)的刪除、更新及插入操作混合,這樣使得數(shù)據(jù)操作對(duì)數(shù)據(jù)的尺寸產(chǎn)生更少的存儲(chǔ)碎片;通過合并相鄰被刪除的存儲(chǔ)塊,以及若一個(gè)存儲(chǔ)塊被刪除,就擴(kuò)展到下一存儲(chǔ)塊的方式可以提高存儲(chǔ)的效率;b.設(shè)定每個(gè)表的最大索引數(shù);c.如果數(shù)據(jù)表中間的表沒有合適大小的塊,則新增一張表來輔助存儲(chǔ);d.索引文件里設(shè)定一個(gè)標(biāo)志,它表明表是否被正確關(guān)閉;e.建立鎖機(jī)制。
7.根據(jù)權(quán)利要求1所述的一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,其特征在于,步驟4中非關(guān)系型數(shù)據(jù)庫(kù)構(gòu)造存儲(chǔ)引擎的構(gòu)造過程包括如下步驟a.選擇可用的鍵值數(shù)據(jù)結(jié)構(gòu) Lists (列表),Sets (集合),Sorted Sets (有序集合),Hashes (哈希表),鍵值的數(shù)據(jù)類型決定了該鍵值支持的操作,如列表、集合或有序集合的交集、并集、查集等高級(jí)原子操作;b.將數(shù)據(jù)鍵先存儲(chǔ)高字節(jié),以允許一個(gè)更高地址的索引壓縮,當(dāng)記錄以排好序的順序插入,索引樹被重構(gòu),以便高字節(jié)僅包含一個(gè)鍵,以改善鍵值數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)效率;c.將數(shù)據(jù)值先存儲(chǔ)低字節(jié),再存儲(chǔ)高字節(jié),以降低數(shù)據(jù)值和數(shù)據(jù)值所運(yùn)行的數(shù)據(jù)庫(kù)環(huán)境的依賴性,運(yùn)行數(shù)據(jù)庫(kù)的服務(wù)器使用補(bǔ)碼和浮點(diǎn)格式來表示數(shù)據(jù)值,數(shù)據(jù)行中的字節(jié)一般是未聯(lián)合的,從一個(gè)方向讀未聯(lián)合的字節(jié),這樣可以使得服務(wù)器在獲取列值時(shí)有更高的效率;d.主從同步非關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)介質(zhì)會(huì)部署在異構(gòu)的系統(tǒng)中,所以存儲(chǔ)在異構(gòu)系統(tǒng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要同步,以保證數(shù)據(jù)的一致性。
全文摘要
本發(fā)明涉及一種面向切面的云存儲(chǔ)引擎構(gòu)造方法,包括步驟步驟1設(shè)計(jì)人員根據(jù)所采用的數(shù)據(jù)庫(kù)類型構(gòu)建數(shù)據(jù)訪問層;步驟2設(shè)計(jì)人員對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行切面;步驟3設(shè)計(jì)人員分析業(yè)務(wù)請(qǐng)求,對(duì)數(shù)據(jù)操作切面得到切面數(shù)據(jù);步驟4設(shè)計(jì)人員在步驟3中構(gòu)建好的切面數(shù)據(jù)的基礎(chǔ)上,構(gòu)建云存儲(chǔ)引擎。本發(fā)明的有益效果是本發(fā)明與傳統(tǒng)技術(shù)相比較,在現(xiàn)有的云存儲(chǔ)架構(gòu)中,新加入數(shù)據(jù)訪問層的概念,該數(shù)據(jù)訪問層使用面向切面編程的思想將數(shù)據(jù)切面處理,大幅提高了數(shù)據(jù)檢索和數(shù)據(jù)管理的效率,簡(jiǎn)化了關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù)處理過程中數(shù)據(jù)異構(gòu)的復(fù)雜性問題。
文檔編號(hào)G06F17/30GK102495853SQ20111036719
公開日2012年6月13日 申請(qǐng)日期2011年11月17日 優(yōu)先權(quán)日2011年11月17日
發(fā)明者唐雪飛, 汪海良, 石礫 申請(qǐng)人:成都康賽電子科大信息技術(shù)有限責(zé)任公司