一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法。
【背景技術(shù)】
[0002]隨著企業(yè)信息化的深入,業(yè)務(wù)數(shù)據(jù)不斷積累、日益龐大,集中式數(shù)據(jù)存儲(chǔ)進(jìn)入瓶頸時(shí)期,表現(xiàn)在系統(tǒng)的響應(yīng)緩慢、用戶體驗(yàn)較差、數(shù)據(jù)空間擴(kuò)展困難、多用戶并發(fā)時(shí)系統(tǒng)性能下降等問(wèn)題。目前,多采用分布式數(shù)據(jù)庫(kù)系統(tǒng),來(lái)實(shí)現(xiàn)高效的數(shù)據(jù)存儲(chǔ)、管理和使用,提高系統(tǒng)性能和運(yùn)行穩(wěn)定性。然而,基于oracle的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方式,大部分只做到局部數(shù)據(jù)庫(kù)透明性,該透明性是最低層次的透明性,只提供數(shù)據(jù)到局部數(shù)據(jù)庫(kù)的映像,而不提供分片和位置透明性,則應(yīng)用程序在對(duì)數(shù)據(jù)處理時(shí)不僅需要指出數(shù)據(jù)在哪個(gè)片段,而且還要指出存放該片段的站點(diǎn)。這樣的操作會(huì)增加開(kāi)發(fā)者對(duì)分布式數(shù)據(jù)庫(kù)處理難度,開(kāi)發(fā)效率不高,容易出錯(cuò)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明所要解決的是現(xiàn)有分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方式只能做到數(shù)據(jù)的局部透明性的問(wèn)題,提供一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法。
[0004]為解決上述問(wèn)題,本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0005]—種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法,包括數(shù)據(jù)存儲(chǔ)的過(guò)程,數(shù)據(jù)查詢的過(guò)程和數(shù)據(jù)更新的過(guò)程;即預(yù)先將用戶所需存儲(chǔ)數(shù)據(jù)分布式存儲(chǔ)到分布式數(shù)據(jù)庫(kù)中,當(dāng)用戶需要訪問(wèn)分布式數(shù)據(jù)庫(kù)時(shí),分布式數(shù)據(jù)庫(kù)對(duì)用戶發(fā)送的數(shù)據(jù)庫(kù)操作語(yǔ)句進(jìn)行類型判斷:當(dāng)判斷為查詢語(yǔ)句時(shí),則進(jìn)行數(shù)據(jù)查詢;當(dāng)判斷為更新語(yǔ)句時(shí),則進(jìn)行數(shù)據(jù)更新。
[0006]上述數(shù)據(jù)存儲(chǔ)的過(guò)程具體為:
[0007]步驟1.1,獲取業(yè)務(wù)系統(tǒng)的全局表,根據(jù)預(yù)先設(shè)定的分片規(guī)則,將全局表切割成多個(gè)分片,并且把分片記錄登記到分片映像表;
[0008]步驟1.2,獲取站點(diǎn)信息,根據(jù)預(yù)先設(shè)定的分配規(guī)則,把步驟1.1所得的分片分配到站點(diǎn)上,并且把分配記錄登記到分配映像表;
[0009]步驟1.3,根據(jù)分片映像表和分配映像表的記錄,將用戶所需存儲(chǔ)數(shù)據(jù)切割成各分片,再把分片進(jìn)行分布式存儲(chǔ)到各站點(diǎn)上;
[0010]上述數(shù)據(jù)查詢的過(guò)程具體為:
[0011]步驟2.1,接收用戶發(fā)送的查詢語(yǔ)句,分析查詢語(yǔ)句的查詢屬性、查詢條件和全局表;
[0012]步驟2.2,查詢分片映像表,得出所需查詢的數(shù)據(jù)所存儲(chǔ)的分片;
[0013]步驟2.3,查詢分配映像表,得出分片所存儲(chǔ)的站點(diǎn);
[0014]步驟2.4,對(duì)分片進(jìn)行判斷;當(dāng)判斷分片為單副本時(shí),則直接進(jìn)入相應(yīng)站點(diǎn)的本地?cái)?shù)據(jù)庫(kù)去查詢分片;當(dāng)判斷分片為多副本時(shí),則選擇負(fù)載最輕的站點(diǎn),進(jìn)入此站點(diǎn)的本地?cái)?shù)據(jù)庫(kù)去查詢分片;
[0015]步驟2.5,對(duì)站點(diǎn)進(jìn)行判斷;當(dāng)在單個(gè)站點(diǎn)的本地?cái)?shù)據(jù)庫(kù)對(duì)分片進(jìn)行查詢,則直接將得到的查詢結(jié)果返回給用戶;若在多個(gè)站點(diǎn)的本地?cái)?shù)據(jù)庫(kù)對(duì)各分片進(jìn)行查詢,則把所有查詢結(jié)果進(jìn)行合并,然后返回給用戶;
[0016]上述數(shù)據(jù)更新的過(guò)程具體為:
[0017]步驟3.1,接收用戶發(fā)送的更新語(yǔ)句,分析更新語(yǔ)句的更新屬性、更新條件和全局表;
[0018]步驟3.2,查詢分片映像表,得出所需更新的數(shù)據(jù)所存儲(chǔ)的各個(gè)分片;
[0019]步驟3.3,查詢分配映像表,得出各個(gè)分片所存儲(chǔ)的站點(diǎn);
[0020]步驟3.4,對(duì)分片進(jìn)行判斷;當(dāng)判斷分片為單副本時(shí),則直接進(jìn)入相應(yīng)站點(diǎn)的本地?cái)?shù)據(jù)庫(kù)更新分片,得到更新結(jié)果,并將結(jié)果返回給用戶;當(dāng)判斷分片為多副本時(shí),則需要對(duì)各個(gè)副本進(jìn)行同步更新。
[0021 ]上述步驟2.2還進(jìn)一步包括,若有多個(gè)分片都包含所要查詢的數(shù)據(jù),則選擇數(shù)據(jù)量最小的分片。
[0022]上述步驟3.4之后還一步包括如下步驟:步驟3.5,啟動(dòng)一個(gè)數(shù)據(jù)庫(kù)事務(wù),將各個(gè)站點(diǎn)的更新操作打包在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中進(jìn)行處理;若有一個(gè)站點(diǎn)的副本更新操作失敗,則數(shù)據(jù)庫(kù)事務(wù)回滾,并將分布式數(shù)據(jù)庫(kù)恢復(fù)到更新操作前的狀態(tài),并且生成一個(gè)錯(cuò)誤信息返回給用戶;若全部站點(diǎn)的副本更新成功,則提交該數(shù)據(jù)庫(kù)事務(wù),更新組件返回更新成功信息給用戶。
[0023]與現(xiàn)有技術(shù)相比,本發(fā)明能實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)數(shù)據(jù)全透明處理,用戶不必關(guān)心數(shù)據(jù)是如何分片的,它們對(duì)數(shù)據(jù)的操作在全局關(guān)系上進(jìn)行,即如何分片對(duì)用戶是透明的,因此,當(dāng)分片改變時(shí)應(yīng)用程序可以不變。數(shù)據(jù)如何分布,如何存儲(chǔ)等細(xì)節(jié)不必關(guān)心,其應(yīng)用程序的編寫與集中式數(shù)據(jù)庫(kù)相同。應(yīng)用程序只需要在數(shù)據(jù)庫(kù)語(yǔ)句中提供全局表名稱,由發(fā)明所設(shè)計(jì)的方法,生成數(shù)據(jù)庫(kù)所識(shí)別的語(yǔ)句進(jìn)行執(zhí)行。本發(fā)明在oracle基礎(chǔ)上,實(shí)現(xiàn)了全局透明性,只需在sql語(yǔ)句中指出全局表名稱,不需要指出分片和站點(diǎn),減輕了開(kāi)發(fā)者的工作量,避免了開(kāi)發(fā)者的人工錯(cuò)誤,并提高了數(shù)據(jù)分布式操作的效率。
【附圖說(shuō)明】
[0024]圖1為一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法的原理圖。
[0025]圖2為一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法的數(shù)據(jù)存儲(chǔ)過(guò)程原理圖。
[0026]圖3為一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法的數(shù)據(jù)查詢過(guò)程原理圖。
[0027]圖4為一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法的數(shù)據(jù)更新過(guò)程原理圖。
【具體實(shí)施方式】
[0028]一種全透明的分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法,如圖1所示,包括分布式數(shù)據(jù)庫(kù)的存儲(chǔ)組件對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)的過(guò)程,分布式數(shù)據(jù)庫(kù)的查詢組件對(duì)數(shù)據(jù)進(jìn)行查詢的過(guò)程和分布式數(shù)據(jù)庫(kù)的更新組件對(duì)數(shù)據(jù)進(jìn)行更新的過(guò)程。用戶需要將數(shù)據(jù)進(jìn)行分布式存儲(chǔ),調(diào)用存儲(chǔ)組件進(jìn)行數(shù)據(jù)存儲(chǔ)。當(dāng)數(shù)據(jù)存儲(chǔ)成功后,應(yīng)用程序需要對(duì)數(shù)據(jù)訪問(wèn)時(shí),訪問(wèn)接口接收應(yīng)用程序發(fā)送的數(shù)據(jù)庫(kù)操作語(yǔ)句,接口對(duì)語(yǔ)句進(jìn)行類型判斷;當(dāng)接口判斷為查詢語(yǔ)句時(shí),則調(diào)用查詢組件進(jìn)行數(shù)據(jù)查詢;當(dāng)接口判斷為更新語(yǔ)句時(shí),則調(diào)用更新組件進(jìn)行數(shù)據(jù)更新。
[0029]上述分布式數(shù)據(jù)庫(kù)的存儲(chǔ)組件對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)的過(guò)程,如圖2所示,用戶通過(guò)業(yè)務(wù)系統(tǒng)注冊(cè)功能,將提供的應(yīng)用系統(tǒng)名稱和數(shù)據(jù)源,導(dǎo)入業(yè)務(wù)系統(tǒng)的數(shù)據(jù)表名、表屬性名等信息,將業(yè)務(wù)系統(tǒng)及其中的數(shù)據(jù)表和字段自動(dòng)注冊(cè)登記到系統(tǒng)中。通過(guò)站點(diǎn)信息登記,將底層站點(diǎn)的信息(如站點(diǎn)名,服務(wù)名、username、password等)登記到系統(tǒng)中。接著通過(guò)分片策略配置和分配策略配置,生成分片映像和分配映像。最后,根據(jù)分片映像和分配影像,將數(shù)據(jù)分布式存儲(chǔ)到各站點(diǎn)上。數(shù)據(jù)存儲(chǔ)的具體步驟如下:
[0030]1.1系統(tǒng)獲取業(yè)務(wù)系統(tǒng)的全局表,根據(jù)設(shè)定的分片規(guī)則,系統(tǒng)將全局表切割成多個(gè)分片,并且把分片記錄登記到分片映像表。
[0031]1.2系統(tǒng)獲取站點(diǎn)信息,根據(jù)設(shè)定的分配規(guī)則,系統(tǒng)把分片分配到站點(diǎn)上,并且把分配記錄登記到分配映像表。
[0032]1.3系統(tǒng)根據(jù)分片映像表和分配映像表的記錄,將數(shù)據(jù)切割成各分片,再把分片進(jìn)行分布式存儲(chǔ)到各站點(diǎn)上。
[0033]存儲(chǔ)過(guò)程舉例:業(yè)務(wù)系統(tǒng)中一個(gè)全局表,如表I,表I中有個(gè)屬性為時(shí)間,分片規(guī)則是在表I中時(shí)間大于或等于2015年的數(shù)據(jù)分割成分片I,在表I中時(shí)間小于2015年的數(shù)據(jù)分害械分片2.假設(shè)有3個(gè)站點(diǎn),分別是站點(diǎn)1、站點(diǎn)2,站點(diǎn)3,分配規(guī)則是把分片I分配給站點(diǎn)I,分片2分配給站點(diǎn)2,分片I和分片2都分配給站點(diǎn)3.分配分為單副本分配和多副本分配,但多采用多副本分配;上述分配是多副本分配,即一個(gè)分片分配到多個(gè)站點(diǎn)。
[0034]分布式存儲(chǔ)平臺(tái):完成數(shù)據(jù)的分片與分配策略配置以及分布式存儲(chǔ)的執(zhí)行操作。包括:數(shù)據(jù)的分片與分配策略配置,對(duì)數(shù)據(jù)進(jìn)行分片和分配處理,執(zhí)行數(shù)據(jù)分布式存儲(chǔ)的物理部署,將數(shù)據(jù)存儲(chǔ)于分布式環(huán)境中。支持用戶選擇應(yīng)用系統(tǒng)、指定數(shù)據(jù)表、指定分片規(guī)則和分配規(guī)則,生成各分片并完成部署。分布式數(shù)據(jù)存儲(chǔ)組件,只需了解全局關(guān)系,根據(jù)數(shù)據(jù)分片和分配策略的配置,對(duì)數(shù)據(jù)進(jìn)行分片和分配處理,將數(shù)據(jù)存儲(chǔ)于分布式環(huán)境中,生成數(shù)據(jù)的分片和分配映像,執(zhí)行分布式數(shù)據(jù)的物理部署。分片映像表和分配映像表為用戶自定義,分片映像表是根據(jù)分片策略生成的全局表與分片的關(guān)系,分配映像表是根據(jù)分配策略生成的站點(diǎn)對(duì)應(yīng)分片的關(guān)系。根據(jù)全局表,查詢分片映像表和分配映像表,即可找出對(duì)應(yīng)的分片和站點(diǎn),生成oracle所識(shí)別的數(shù)據(jù)庫(kù)語(yǔ)句進(jìn)行執(zhí)行,實(shí)現(xiàn)全透明操作。
[0035]應(yīng)用程序調(diào)用查詢與更新操作組件的分布式訪問(wèn)接口,并且傳入數(shù)據(jù)庫(kù)語(yǔ)句。然后判斷數(shù)據(jù)庫(kù)語(yǔ)句類型,如果是查詢語(yǔ)句,則調(diào)用查詢操作組件,并且傳入數(shù)據(jù)庫(kù)語(yǔ)句。如果是更新語(yǔ)句,則調(diào)用更新操作組件,并且傳入數(shù)據(jù)庫(kù)語(yǔ)句。對(duì)數(shù)據(jù)庫(kù)語(yǔ)句進(jìn)一步解析,查找分片映像和分配映像,調(diào)用分片分配調(diào)度組件進(jìn)行相應(yīng)操作,并返回結(jié)果給應(yīng)用程序。
[0036]上述分布式數(shù)據(jù)庫(kù)的查詢組件對(duì)數(shù)據(jù)進(jìn)行查詢的過(guò)程,如圖3所示,首先進(jìn)行查詢分析和優(yōu)化,弄清該查詢需要哪些數(shù)據(jù),這些數(shù)據(jù)都存儲(chǔ)在哪里,若有多個(gè)副本,選用哪個(gè)或哪些副本能使查詢代價(jià)最小,即需要數(shù)據(jù)定位,通過(guò)查詢分片映像表和分配映像表,確定將哪個(gè)版本(正本或某個(gè)副本)的數(shù)據(jù)提供給該查詢使用,并指出該數(shù)據(jù)版本的存放站點(diǎn),完成數(shù)據(jù)定位功能。一旦確定了查詢處理的策略,調(diào)度模塊調(diào)度局部處理和數(shù)據(jù)傳輸,向有關(guān)站點(diǎn)發(fā)布