1. 程式人生 > >分散式資料庫教程(2)--原創

分散式資料庫教程(2)--原創

三、傳統的資料庫於分散式資料庫的區別<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

傳統的資料庫應用程式經常採用客戶機/伺服器結構(即C/S結構,如圖2),這種結構在技術上已經很成熟了並且應用也很廣泛,但這種結構的應用系統有其不足之處。比如當客戶數量很多,資料量又都很大的情況下,伺服器的負載就會很重,而且重複性工作很多,因為很多客戶發出的查詢可能完全相同,而查詢結果無法共享,即使兩個客戶發出的請求完全相同也要在伺服器上執行兩次查詢;在客戶端儲存了具有商業價值的查詢演算法;資料庫伺服器負擔過重導致效率低下等。

 

而當在伺服器和客戶機之間再加一個伺服器,專門用於儲存查詢演算法和臨時查詢結果,則問題就得到了很好的解決:一方面不同的客戶可以共用臨時的查詢結果而無須再訪問資料庫伺服器,減輕了伺服器的負擔;同時在客戶端也看不到作為商業機密的查詢演算法。這也就是分散式系統的工作原理。

分散式系統的出現源於傳統的C/S結構的若干弊病,如效率低,安全性差等,結合到資料庫方面來說,全球的DNS(域名解析系統Domain Name System)系統是一個很典型的例子,試想如果把全世界所有的域名都集中到一臺伺服器中來進行管理,那伺服器肯定會因負載過重而無法正常工作,整個網際網路也就癱瘓了。(可以畫一個定址DNS伺服器的圖)

 

與傳統式資料庫中避免資料冗餘不同,資料冗餘在分散式系統中被看作是所需要的特性,其原因在於:

首先,如果在需要的節點複製資料,則可以提高區域性的應用性。

其次,當某節點發生故障時,可以操作其它節點上的複製資料,因此這可以增加系統的有效性。

但在分散式系統中對最佳冗餘度的評價是很複雜的。

四、分散式資料庫技術設計

資料庫設計的原則

從全域性應用的角度出發,將這些資料庫自下而上構成分散式資料庫系統,實現全域性資料的完整性和一致性,各場地仍然存放本場地的資料,通過網路對共享池進行操作,對資料進行完整性和一致性的檢查,這種做法雖然有一定的資料冗餘,但在不同場地儲存同一資料的多個副本,能提高系統的可靠性和可用性,也提高了區域性應用的效率,減少了通訊代價。該分散式資料庫系統可以在對當前機構影響最小的情況下進行擴充,增加新的場地時只需增加一個節點就可以了,同時也使得各處理機之間的相互干擾降到最低。

資料儲存

在分散式資料庫中,資料儲存通過以下三種途徑實現:

複製:系統維護關係的幾個完全相同的副本,這些副本儲存在不同的結點上。

分片:關係被劃分為幾個片段,各個片段儲存在不同的結點上。

複製+分片:關係被劃分為幾個片段,系統為每個片段維護幾個副本。

因為各資料庫之間存在一定的資料冗餘,又存在著差異,我們使用了複製+分片的方式進行資料儲存。

資料分片

在分散式資料庫系統中,將關係分片,有利於按使用者需求組織資料的分佈,目前的分片方式有水平分片、垂直分片、匯出分片、混合分片等四種。我們可以根據不同的資料關係採用了不同的分片方式。

資料同步

資料同步方式則根據系統需求使用事務複製(transaction replication合併複製(merge replication)兩種,由於場地只存放本場地的資料,資料管理和分析功能是由網路共享池的資料庫伺服器來實現的,各場地只需將更新的資料儲存到共享池的資料庫即可,我們使用事務複製進行業務資料的同步,把場地的資料庫作為出版者和分發者,共享池的資料庫作為訂閱者,對各場地的資料建立快照代理,並在分發資料庫中記錄同步狀態的資訊。每一個使用事務複製的場地資料庫均有自己的日誌讀取代理,執行在分發者上並連接出版者。分發代理的任務是將分發資料庫中保持的事務任務直接推動到訂閱者。當推訂閱被建立時,每個為立即同步而建立的事務出版物通過自己的分佈代理執行在分發者上並與訂閱者相連。

事務複製可以支援兩種型別的物件複製:表和儲存過程。在出版者中定義資料庫中的部分或全部的資料,選擇多個儲存過程作為複製。當場地的資料發生更新時,日誌讀取代理將即時的把更新資訊推到共享池的資料庫中。基於儲存過程的複製使應用具有更好的效能,可以大大減少網路的通訊量。事務性日誌使用事務日誌來監視文章中的資料改變。

合併複製作為一種從出版者向訂購者分發資料方法允許出版者和訂購者對出版資料進行修改,而不管訂購者與出版者是相互連線或是斷開,然後當所有(或部分)節點相連時便合併發生在各個節點的變化。在合併複製中,每個節點都獨立完成屬於自己的任務,不像事務複製和快照複製那樣訂購者與出版者之間要相互連線,完全不必要連線到其他節點,也不必使用MS DTC來實現兩階段提交就可以在多個節點進行修改,只是在某一時刻才將該節點與其他節點相連(此時的其他節點並不一定指所有其他節點)。

然後將所發生的資料變化複製到這些相連線節點的資料庫中。

以下即為該系統的設計框圖:

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />圖 4

分散式事務處理利用分散式技術實現事務處理和查詢

分散式資料庫系統中資料的分佈導致事務具有了分佈性。一個全域性事務的執行被劃分為在許多場地上子事務的執行。

分散式事務要能夠在多個伺服器上執行,我們使用MS DTC作為事務管理器來協調各個伺服器對事務的處理操作,為了減少網路故障對分散式事務處理的影響,避免分散式事務造成不同伺服器間資料的不一致,X/Open XA規範將分散式事務的處理過程規定為兩個階段,即準備階段和提交階段,就是常說的兩階段提交。

在進行分散式事務處理時,我們首先在伺服器端用Transact SQL指令碼程式BEGIN DISTRIBUTED TRANSACTION語句啟動一個分散式事務,將該伺服器作為分散式事務管理伺服器,然後指令碼程式對連線伺服器執行分散式查詢或遠端伺服器上的儲存過程,分散式事務管理伺服器會自動呼叫MS DTC,使遠端伺服器參加分散式事務處理。當指令碼程式執行COMMIT TRANSACTIONCOMMIT WORKROLLBACK TRANSACTIONROLLBACK WORK語句時,分散式事務管理伺服器將再次呼叫MS DTC,用它來管理兩階段提交程序,使連線伺服器和遠端伺服器提交或回滾事務。例如在保險業務系統中,如果總公司資料庫管理系統發現該客戶是交叉投保,則需將該保單插入拒保記錄表中,同時在對應的營業分支機構的資料庫中將該保單的狀態設為無效。我們在營業分支機構的資料庫(DBServer1)中建立儲存過程update_policy更新保單狀態,在總公司資料庫伺服器(DBServer)上執行以下指令碼程式,啟動一個分散式事務insert_reject
USE business
GO
BEGIN DISTRIBUTED TRANSACTION
INSERT reject
VALUES(policy_id, insurance_no,business_date,customer_id,customer_name…)
EXECUTE DBServer1.business.dbo.update_policy
COMMIT TRANSACTION
GO
  系統執行insert_reject事務向DBServer中的reject表插入一條記錄,同時更新對應的分支機構資料庫中的保單表status欄位,該事務使系統資料的完整性得到了保證。

分散式查詢

分散式資料庫系統中資料的分佈導致查詢也具有了分佈性,分散式查詢可能針對異類的OLE DB ODBC 資料來源。SQL Server 支援分散式查詢,即包括來自兩個或更多伺服器資料的查詢,支援伺服器間的檢索、更新和遊標,並使用 Microsoft Distributed Transaction Coordinator (MS DTC) 保證節點間事務語義,維護伺服器間的安全。

在系統設計的過程中,為了減少網路通訊量,我們根據應用的功能已將資料關係進行分片存放在各資料庫中,因此大部分的應用是面向區域性資料庫的操作,但全域性性的查詢仍需要多個數據庫的資料支援。在業務人員的管理模組中,由於各分支機構對其業務人員進行直接管理,且管理制度都有差異,我們將業務人員資訊存放在分支機構的資料庫中,通過聯合分散式查詢對公司所屬的所有業務員進行登記;在客戶管理模組中,我們根據來源將客戶資訊分別存放在業務資料庫伺服器的傳統客戶表和Web資料庫伺服器的網路客戶表中,通過聯合分散式查詢才能對公司所屬的所有業務員和客戶進行登記,下面以年度的業務員查詢為例介紹聯合分散式查詢的方法:

SELECT emp.emp_name, emp.emp_idemp.emp_gender…
FROM
DBServer1.business.dbo.employee AS emp
WHERE
date between '01/01/2000' and '12/31/2000'
UNION
SELECT
emp.emp_name, emp.emp_idemp.emp_gender…
FROM
DBServer2.business.dbo.employee AS emp
WHERE
date between '01/01/2000' and '12/31/2000'

相關推薦

分散式資料庫教程2--原創

三、傳統的資料庫於分散式資料庫的區別<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 傳統的資料庫應用程式經常採用客戶機/伺服器結構(即C/S結構,如圖2),這

分散式資料庫教案3-原創

五、分散式資料庫開發例項(參考上海交通大學CIM所開發的SIPM系統資料)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> SIPM是一個面向工藝設計師和工藝過

linux學習入門標準教程2

linux標準教程Linux系統篇2.1 Linux系統管理經過前兩章的學習,咱們現已可以獨立裝置Linux體系,現已把握了Linux學習的竅門,那接下來,咱們將體系的來了解Linux體系各目錄、權限及常用命令的運用。2.1. 1 Linux目錄初識通過前面的學習,我們已經能夠獨立安裝完一個linux

百度地圖3.2教程2公交查詢

track error alt 3.1 內容 說了 ase 放大 gets 上一篇地址 百度地圖3.1教程—檢索功能演示 還記得兩天前 我在找公交接口,非常不幸。接口有些查不到,幾年的前的數據,哎 。算了唄,突然想起來了百度地圖有這個功能,結果去看了API,尼瑪這

一步一步跟我學習hadoop(5)----hadoop Map/Reduce教程2

submit calc run submitjob des conf sam ner 打開 Map/Reduce用戶界面 本節為用戶採用框架要面對的各個環節提供了具體的描寫敘述,旨在與幫助用戶對實現、配置和調優進行具體的設置。然而,開發時候還是要相應著API進行

Nhibernate學習教程2-- 第一個NHibernate程序

collect 單元測試框架 文件映射 deb color rtu etc erb session管理 NHibernate之旅(2):第一個NHibernate程序 本節內容 開始使用NHibernate 1.獲取NHibernate 2.建立數據庫表 3.創建C#類庫

痞子衡嵌入式:極精簡的Git命令教程2- 連接(remote/clone)

我們 pair ssh key 技術 彈出 change 能夠 sha2 permanent   今天是Git系列課程第二課,上一課我們已經學會在本地創建一個空repo,痞子衡今天要講的是如何將本地倉庫與遠程建立聯系。 1.將本地倉庫掛上遠程git remote   本地

Mysql資料庫學習2DDL

今天學習了資料庫中DDL和DQL語句的使用,總的來說還是學到很多以前沒學到的東西。以前太依賴網上的那種視覺化的建表工具,不用寫語句,但是這幾天寫了很多的sql語句,對於一些操作真的長進很多。其實在視覺化的建表過程那是不規範的,每次多了欄位都要去修改,但是Mysql實際上是擁有修改相關欄位的語句的。針

Spring Cloud Config(分散式配置中心)2

佔位符配置URL {application},{profile},{label}這些佔位符除了用於標識配置檔案的規則外,還可以用於Config Server中對Git倉庫地址的URI配置。 {application}代表了應用名,Config Server會根據客戶端的spring.ap

資料庫基礎2選擇,投影,連線,除法運算

關係資料庫中的選擇,投影,連線,除法都是很重要的運算 選擇 定義:在關係中選擇在指定屬性上有確定值的關係的子集。表示為: 選擇運算是選擇關係中行的子集,即選擇滿足條件的元組 例: 1.查詢資訊系(IS系)全體學生 σ Sdept=‘IS’(Student) 2.查詢年齡小於

.NetCore實踐篇:使用zipkin4net推送資料到分散式監控zipkin2

前言《牧神記》有一句話說的好,破心中神。當不再對分散式,微服務,CLR畏懼迷茫的時候,你就破了心中神。zipkin複習zipkin作用全鏈路追蹤工具(根據依賴關係)檢視每個介面、每個service的執行速度(定位問題發生點或者尋找效能瓶頸)zipkin工作原理創造一些追蹤識別符號(tracingId,span

pyspider 爬蟲教程2:AJAX 和 HTTP

AJAX AJAX 是 Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)的縮寫。AJAX 通過使用原有的 web 標準組件,實現了在不重新載入整個頁面的情況下,與伺服器進行資料互動。例如在新浪微博中,你可以展開一條

jMetal使用教程2

上一節介紹了jMetal的大致框架結構,本節貼一個完整的例子。 優化問題 假定我們需要對這樣的問題進行優化: 也就是多目標優化測試集ZDT1函式。 這個優化問題有30個決策變數,2個優化目標函式(最小化)。決策變數的定義域相同,都是[0,1]的實數。目標函式也

ArcGIS Engine10.0輕鬆入門級教程2——建立一個ArcGIS Engine桌面應用程式 ArcGIS Engine10.0輕鬆入門級教程3——ArcEngine10.0查詢分析功能 ArcGIS Engine— 學習圖層符號化

ArcGIS Engine10.0輕鬆入門級教程(1)——必備基礎知識 ArcGIS Engine10.0輕鬆入門級教程(2)——建立一個ArcGIS Engine桌面應用程式 ArcGIS Engine10.0輕鬆入門級教程(3)——ArcEngine

51微控制器入門教程2——實現流水燈

一、搭建流水燈電路 在Proteus中搭建流水燈電路如圖 二、流水燈程式 我們可以把流水燈看作依次點亮若干個燈。 程式如下: #include <reg52.h> sbit led1 = P2^0; sbit led2 = P2^1; sbit

Linux下Mariadb下載安裝示例資料庫教程

Mysql官方提供的示例資料庫可以在我們學習Mysql的過程中方便我們實踐 我的linux是centos7.3版本的,Ubuntu的操作可能會有些不同。 下載示例資料庫 1.Documentation ->More ->Example  Databa

BigData_A_A_01-hdfs分散式檔案系統2高可用

楔子 Hadoop 3 高可用搭建記錄 1 zookeeper叢集 zoo.cfg 檔案配置資料檔案位置等資訊 #其他使用預設 dataDir=/opt/data/zk server.1=had2:2888:3888 server.2=had3:2888:3

Nginx 教程2:效能

大家好,分享即關愛,我們很樂意和你分享一些新的知識,我們準備了一個 Nginx 的教程,分為三個系列,如果你對 Nginx 有所耳聞,或者想增進 Nginx 方面的經驗和理解,那麼恭喜你來對地方了。 我們會告訴你 Nginx 如何工作及其背後的理念,還有如何優化以

Spring Security教程2----SpringSecurity簡單測試

前面講到了SpringSecurity的簡單配置,今天做一個簡單的測試,先看配置檔案 <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org

Docker教程2Linux上安裝Docker(非常簡單的安裝方法)

前提條件 目前,CentOS 僅發行版本中的核心支援 Docker。 Docker 執行在 CentOS 7 上,要求系統為64位、系統核心版本為 3.10 以上。 使用 yum 安裝 Docker 要求 CentOS 系統的核心版本高於 3.10