一種數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫系統(tǒng)訪問方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機通信領域,尤其涉及一種數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫系統(tǒng)訪問方法及
>J-U ρ?α裝直。
【背景技術】
[0002]隨著大數(shù)據(jù)時代的到來,海量的用戶信息需要被系統(tǒng)快速的限時處理。系統(tǒng)的用戶飛速的增長,同時用戶信息的細化程度也在飛速增長,這些飛速增長的海量數(shù)據(jù)往往需要系統(tǒng)在日益增長的用戶并發(fā)數(shù)需求下限時完成數(shù)據(jù)的增添、刪除、修改和查詢操作。但對于這種大規(guī)模系統(tǒng)無論應用層負載均衡后承載能力有多高,往往受限于有A(Atomicity,原子性)、C (Consistency, 一致性)、I (Isolat1n,隔離性)、D (Durability,持久性)需求的數(shù)據(jù)庫系統(tǒng)。目前通常采用的解決方案主要有數(shù)據(jù)庫分片技術。
[0003]數(shù)據(jù)庫分片技術通過將不同的數(shù)據(jù)分布到不同的服務器上來提供更高的數(shù)據(jù)負載能力。優(yōu)勢在于將數(shù)據(jù)庫分隔以后數(shù)據(jù)庫的CRUD (增、查、改、刪)操作自然分隔,從而展現(xiàn)集群性能優(yōu)勢。缺點是因為需要由幾臺主服務器負責對數(shù)據(jù)操作請求的分拆操作,主服務器掌控整個數(shù)據(jù)庫系統(tǒng)的狀態(tài),因此這些主服務器往往就會成為系統(tǒng)的瓶頸所在,容易成為故障點,足以引發(fā)一定范圍的數(shù)據(jù)庫異常。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫系統(tǒng)訪問方法及裝置,以解決現(xiàn)有技術中,在處理海量數(shù)據(jù)信息時,由主服務器負責分拆操作,主服務器掌控整個數(shù)據(jù)庫系統(tǒng)的狀態(tài),成為系統(tǒng)的瓶頸所在,容易成為故障點,足以引發(fā)一定范圍的數(shù)據(jù)庫異常的問題。
[0005]為了實現(xiàn)上述目的,本發(fā)明的實施例提供的技術方案如下:
[0006]一方面,本發(fā)明提供一種數(shù)據(jù)庫系統(tǒng),包括:數(shù)據(jù)服務器組,由多臺數(shù)據(jù)服務器組成,所述數(shù)據(jù)服務器用于存儲數(shù)據(jù),并接收客戶端發(fā)送的數(shù)據(jù)操作請求來對存儲的數(shù)據(jù)執(zhí)行相應的操作;主服務器,用于設置所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),并將所述數(shù)據(jù)分布狀態(tài)發(fā)送給所述客戶端以供所述客戶端根據(jù)所述數(shù)據(jù)分布狀態(tài)將所述數(shù)據(jù)操作請求發(fā)送給對應的所述數(shù)據(jù)服務器,所述數(shù)據(jù)分布狀態(tài)包括所述數(shù)據(jù)服務器組中的每一數(shù)據(jù)服務器所存儲的數(shù)據(jù)范圍。
[0007]進一步地,所述主服務器采用封閉式環(huán)形分布方式設置所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),使得當添加/刪除數(shù)據(jù)服務器時,只需要對在所述封閉式環(huán)形分布的數(shù)據(jù)服務器組中位于所述添加/刪除的數(shù)據(jù)服務器的前一個/后一個數(shù)據(jù)服務器中的數(shù)據(jù)進行重新分布。
[0008]進一步地,所述主服務器包括多臺服務器,其中一臺服務器為主用服務器,其他服務器為備用服務器。
[0009]進一步地,數(shù)據(jù)在所述多臺數(shù)據(jù)服務器中冗余存儲,其中冗余存儲是指在所述多臺數(shù)據(jù)服務器的不同區(qū)域存儲有同一數(shù)據(jù)的多份副本。
[0010]進一步地,所述數(shù)據(jù)服務器組包括:讀數(shù)據(jù)服務器組,包括多臺讀數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的查詢數(shù)據(jù)操作請求來執(zhí)行相應的操作;寫數(shù)據(jù)服務器組,包括多臺寫數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的除查詢數(shù)據(jù)操作請求以外的數(shù)據(jù)操作請求來執(zhí)行相應的操作;所述每臺寫數(shù)據(jù)服務器均對應多臺所述讀數(shù)據(jù)服務器,所述寫數(shù)據(jù)服務器存儲的數(shù)據(jù)與對應的所述多臺讀數(shù)據(jù)服務器存儲的數(shù)據(jù)相同。
[0011]另一方面,本發(fā)明還提供了一種數(shù)據(jù)庫系統(tǒng)訪問方法,用于訪問如上所述數(shù)據(jù)庫系統(tǒng),所述方法包括:根據(jù)存儲的數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),確定接收待處理的數(shù)據(jù)操作請求的目標數(shù)據(jù)服務器;將所述待處理的數(shù)據(jù)操作請求發(fā)送到所述目標數(shù)據(jù)服務器,以使得所述目標數(shù)據(jù)服務器根據(jù)所述待處理的數(shù)據(jù)操作請求進行相應的操作;接收所述目標數(shù)據(jù)服務器發(fā)送的與所述待處理的數(shù)據(jù)操作請求對應的操作結果。
[0012]進一步地,所述根據(jù)存儲的數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),確定接收待處理的數(shù)據(jù)操作請求的目標數(shù)據(jù)服務器之前,還包括:向主服務器發(fā)送所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài)是否更新的詢問;當接收到所述主服務器發(fā)送的所述數(shù)據(jù)分布狀態(tài)已發(fā)生更新的消息時,向所述主服務器發(fā)送獲取所述數(shù)據(jù)分布狀態(tài)的請求;接收并存儲所述主服務器發(fā)送的所述數(shù)據(jù)分布狀態(tài)。
[0013]進一步地,所述根據(jù)存儲的數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),確定接收待處理的數(shù)據(jù)操作請求的目標數(shù)據(jù)服務器,包括:確定所述待處理的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)范圍;根據(jù)所述待處理的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)范圍及所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài)確定目標數(shù)據(jù)服務器范圍;根據(jù)所述目標數(shù)據(jù)服務器范圍的數(shù)據(jù)分布狀態(tài)拆分所述待處理的數(shù)據(jù)操作請求,所述每條拆分后的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)在一臺數(shù)據(jù)服務器存儲的數(shù)據(jù)范圍內(nèi);為所述每條拆分后的數(shù)據(jù)操作請求確定目標數(shù)據(jù)服務器。
[0014]進一步地,所述數(shù)據(jù)服務器組包括:讀數(shù)據(jù)服務器組,包括多臺讀數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的查詢數(shù)據(jù)操作請求來執(zhí)行相應的操作;寫數(shù)據(jù)服務器組,包括多臺寫數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的除查詢數(shù)據(jù)操作請求以外的數(shù)據(jù)操作請求來執(zhí)行相應的操作;所述每臺寫數(shù)據(jù)服務器均對應多臺所述讀數(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ù)服務器中確定一臺讀服務器為目標數(shù)據(jù)服務器。
[0015]進一步地,所述從所述每條拆分后的數(shù)據(jù)操作請求對應的所述數(shù)據(jù)服務器中確定一臺讀數(shù)據(jù)服務器為目標數(shù)據(jù)服務器,具體為:根據(jù)負載均衡算法從所述每條拆分后的數(shù)據(jù)操作請求對應的所述數(shù)據(jù)服務器中確定一臺讀數(shù)據(jù)服務器為目標數(shù)據(jù)服務器。
[0016]本發(fā)明還提供了一種數(shù)據(jù)庫系統(tǒng)訪問裝置,用于訪問如上所述數(shù)據(jù)庫系統(tǒng),包括:確定模塊,用于根據(jù)存儲的數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài),確定接收待處理的數(shù)據(jù)操作請求的目標數(shù)據(jù)服務器;第一發(fā)送模塊,用于將所述待處理的數(shù)據(jù)操作請求發(fā)送到所述目標數(shù)據(jù)服務器,以使得所述目標數(shù)據(jù)服務器根據(jù)所述待處理的數(shù)據(jù)操作請求進行相應的操作;第一接收模塊,用于接收所述目標數(shù)據(jù)服務器發(fā)送的與所述待處理的數(shù)據(jù)操作請求對應的操作結果。
[0017]進一步地,所述裝置還包括:第二發(fā)送模塊,用于向主服務器發(fā)送所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài)是否更新的詢問;第三發(fā)送模塊,用于當接收到所述主服務器發(fā)送的所述數(shù)據(jù)分布狀態(tài)已發(fā)生更新的消息時,向所述主服務器發(fā)送獲取所述數(shù)據(jù)分布狀態(tài)的請求;第二接收模塊,用于接收并存儲所述主服務器發(fā)送的所述數(shù)據(jù)分布狀態(tài)。
[0018]進一步地,所述確定模塊,包括:第一確定單元,用于確定所述待處理的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)范圍;第二確定單元,用于根據(jù)所述待處理的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)范圍及所述數(shù)據(jù)服務器組中的數(shù)據(jù)服務器的數(shù)據(jù)分布狀態(tài)確定目標數(shù)據(jù)服務器范圍;拆分單元,用于根據(jù)所述目標數(shù)據(jù)服務器范圍的數(shù)據(jù)分布狀態(tài)拆分所述待處理的數(shù)據(jù)操作請求,所述每條拆分后的數(shù)據(jù)操作請求所涉及的數(shù)據(jù)在一臺數(shù)據(jù)服務器存儲的數(shù)據(jù)范圍內(nèi);第三確定單元,用于為所述每條拆分后的數(shù)據(jù)操作請求確定目標數(shù)據(jù)服務器。
[0019]進一步地,所述數(shù)據(jù)服務器組包括:讀數(shù)據(jù)服務器組,包括多臺讀數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的查詢數(shù)據(jù)操作請求來執(zhí)行相應的操作;寫數(shù)據(jù)服務器組,包括多臺寫數(shù)據(jù)服務器,用于存儲數(shù)據(jù),并接收客戶端發(fā)送的除查詢數(shù)據(jù)操作請求以外的數(shù)據(jù)操作請求來執(zhí)行相應的操作;所述每臺寫數(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ù)服務器;第三確定子單