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