陳瀟
摘? 要:隨著企業(yè)對(duì)信息系統(tǒng)的依賴性日益增加,數(shù)據(jù)庫(kù)作為信息系統(tǒng)的核心承擔(dān)著重要作用。為了緩解服務(wù)器訪問壓力,提升讀寫效率,很多數(shù)據(jù)庫(kù)管理員選擇搭建服務(wù)器集群。通過數(shù)據(jù)主從復(fù)制技術(shù)可以實(shí)現(xiàn)集群內(nèi)部服務(wù)器之間數(shù)據(jù)的同步,實(shí)現(xiàn)負(fù)載均衡。本文對(duì)SQL Server數(shù)據(jù)庫(kù)發(fā)布/訂閱模式下的三種同步方案進(jìn)行研究,并通過事務(wù)發(fā)布方式實(shí)現(xiàn)數(shù)據(jù)的同步。
關(guān)鍵詞:SQL Server;數(shù)據(jù)同步;主從復(fù)制
中圖分類號(hào):TP392? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Research and Application of Data Synchronization Scheme Based on SQL Server
CHEN Xiao
(Xuzhou Finance and Economics Branch,Jiangsu Union Technical Institute,Xuzhou 221008,China)
Abstract:With the increasing reliance on information systems in the enterprises,database,as the core of information systems,is undertaking the extremely vital role.To alleviate the pressure of read and write access and enhance the effect of application responses,many database administrators tend to build server clusters to accomplish data synchronization between the servers and load balancing by using the technology of data master-slave replication.This paper studies three replication schemes of SQL Server database publish/subscribe model,and accomplishes data synchronization through publish/subscribe model.
Keywords:SQL Server;data synchronization;master-slave replication
1? ?引言(Introduction)
隨著企業(yè)對(duì)信息系統(tǒng)的依賴性日益增加,數(shù)據(jù)庫(kù)作為信息系統(tǒng)的核心承擔(dān)著重要作用。為了保證系統(tǒng)的高可用性和穩(wěn)定性,很多企業(yè)擴(kuò)展單臺(tái)SQL Server服務(wù)器,構(gòu)建服務(wù)器集群。服務(wù)器之間數(shù)據(jù)同步是保證集群數(shù)據(jù)一致性的基礎(chǔ),各服務(wù)器間通過相應(yīng)的策略同步數(shù)據(jù)[1]。在業(yè)務(wù)復(fù)雜的系統(tǒng)中,主數(shù)據(jù)庫(kù)主要負(fù)責(zé)寫數(shù)據(jù),從數(shù)據(jù)庫(kù)主要負(fù)責(zé)讀數(shù)據(jù),這樣能有效地減輕單臺(tái)服務(wù)器讀寫壓力。數(shù)據(jù)同步還應(yīng)用于以下場(chǎng)合:
(1)數(shù)據(jù)匯總。如某個(gè)公司在不同地區(qū)設(shè)置銷售分公司,利用數(shù)據(jù)同步可以將各地區(qū)銷售分表進(jìn)行匯總,形成公司銷售總表。另一種情況是對(duì)水平切分(如按順序切分、Hash散列切分)的表進(jìn)行數(shù)據(jù)統(tǒng)一,切分后可以利用數(shù)據(jù)同步進(jìn)行匯總。
(2)業(yè)務(wù)拆分。根據(jù)不同的業(yè)務(wù)進(jìn)行劃分。如企業(yè)可以劃分為供內(nèi)網(wǎng)辦公用服務(wù)器,外網(wǎng)客戶訪問服務(wù)器,備份服務(wù)器等。利用同步方案可以保證各服務(wù)器的數(shù)據(jù)一致性。
(3)故障轉(zhuǎn)移。建立數(shù)據(jù)同步機(jī)制后,如果主服務(wù)器出現(xiàn)故障則可以隨時(shí)切換其他服務(wù)器保證業(yè)務(wù)正常運(yùn)行。
2? ?發(fā)布/訂閱模式(Publish/subscribe model)
SQL Server提供的多種數(shù)據(jù)同步的模式包括:鏡像方式、log shipping、發(fā)布/訂閱和故障集群轉(zhuǎn)移等。本文主要介紹通過發(fā)布/訂閱方式實(shí)現(xiàn)數(shù)據(jù)庫(kù)主從同步。
發(fā)布/訂閱方式是常見的一種主從同步模式,主服務(wù)器進(jìn)行消息發(fā)布,從服務(wù)器進(jìn)行訂閱,當(dāng)主服務(wù)器中數(shù)據(jù)發(fā)生變化時(shí),就將消息發(fā)送至訂閱服務(wù)器,訂閱服務(wù)器接收消息后就開始從發(fā)布服務(wù)器向訂閱服務(wù)器進(jìn)行數(shù)據(jù)傳遞,進(jìn)而在兩者之間實(shí)現(xiàn)數(shù)據(jù)同步。SQL Server中的發(fā)布模式有:快照發(fā)布、事務(wù)發(fā)布、合并發(fā)布。
2.1? ?快照發(fā)布
快照發(fā)布是完全按照數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象出現(xiàn)時(shí)的狀態(tài)來復(fù)制和分發(fā)它們的過程[2]。首先在某一時(shí)刻將發(fā)布數(shù)據(jù)庫(kù)進(jìn)行快照后產(chǎn)生鏡像文件,然后在約定的時(shí)刻或時(shí)間間隔內(nèi)由分發(fā)代理程序?qū)⑽募?fù)制到訂閱數(shù)據(jù)庫(kù),如圖1所示。訂閱服務(wù)器復(fù)制的內(nèi)容是發(fā)布數(shù)據(jù)庫(kù)某一時(shí)刻的狀態(tài)。
快照方式不實(shí)時(shí)進(jìn)行數(shù)據(jù)同步,而是每隔一個(gè)時(shí)段或在某一個(gè)時(shí)間點(diǎn)進(jìn)行數(shù)據(jù)庫(kù)復(fù)制,同步方式為單向同步。優(yōu)點(diǎn)是數(shù)據(jù)復(fù)制方式穩(wěn)定,不必監(jiān)視對(duì)數(shù)據(jù)的更新。由于是將數(shù)據(jù)庫(kù)復(fù)制到訂閱服務(wù)器,所以在大數(shù)據(jù)量的同步場(chǎng)景下存在以下缺點(diǎn):占用網(wǎng)絡(luò)帶寬較大、數(shù)據(jù)同步周期較長(zhǎng)[3]??煺辗绞竭m用于以下場(chǎng)景:
(1)主庫(kù)數(shù)據(jù)量小、更新不頻繁。例如,學(xué)生管理系統(tǒng)中的學(xué)生表在每學(xué)期開學(xué)后都要進(jìn)行一次更新,因?yàn)楦轮芷谙鄬?duì)固定,所以可以在主庫(kù)學(xué)生表更新數(shù)據(jù)后從庫(kù)進(jìn)行快照復(fù)制。
(2)主從庫(kù)接受同步延遲??煺辗绞接捎趶?fù)制數(shù)據(jù)量大導(dǎo)致延遲較高,可以利用讀寫較少的時(shí)間(如深夜)進(jìn)行快照復(fù)制,將影響范圍縮減至最低。
2.2? ?事務(wù)發(fā)布
事務(wù)發(fā)布是將發(fā)布服務(wù)器的初始快照將復(fù)制到訂閱服務(wù)器。訂閱服務(wù)器接收到初始數(shù)據(jù)后,代理服務(wù)會(huì)連續(xù)監(jiān)測(cè)數(shù)據(jù)變化,當(dāng)發(fā)布服務(wù)器上發(fā)生數(shù)據(jù)修改時(shí),會(huì)將這些新增的事務(wù)傳遞給日志代理,然后日志代理通知訂閱服務(wù)器,訂閱服務(wù)器進(jìn)行新增事務(wù)的執(zhí)行,如圖2所示。
主從服務(wù)器之間通過新增事務(wù)復(fù)制的方式進(jìn)行主從同步,發(fā)布數(shù)據(jù)庫(kù)上增刪改等操作的事務(wù)日志會(huì)在短時(shí)間內(nèi)復(fù)制到訂閱數(shù)據(jù)庫(kù)。相對(duì)快照復(fù)制,事務(wù)復(fù)制優(yōu)點(diǎn)是復(fù)制內(nèi)容小、數(shù)據(jù)傳遞快,所以從庫(kù)更新延遲小,對(duì)大數(shù)據(jù)量的同步有可靠保證。缺點(diǎn)是如果主庫(kù)進(jìn)行讀寫操作頻繁,則同步過程中會(huì)對(duì)服務(wù)器性能造成影響。由于發(fā)布和訂閱服務(wù)之間是實(shí)時(shí)進(jìn)行事務(wù)傳遞,所以要保證兩者之間相互連接的網(wǎng)絡(luò)穩(wěn)定可靠[4]。這種同步方式適用于以下應(yīng)用場(chǎng)景:
(1)要求主從庫(kù)同步延遲小。因?yàn)閺?fù)制的內(nèi)容是數(shù)據(jù)庫(kù)更改的增量,且事務(wù)日志內(nèi)容較小,所以可以在較短的時(shí)間實(shí)現(xiàn)同步。
(2)主庫(kù)頻繁進(jìn)行DML操作(增加、刪除、修改)。如果采用快照方式同步,則同步時(shí)延過高,不能做出及時(shí)響應(yīng)。如鐵路票務(wù)系統(tǒng)數(shù)據(jù)庫(kù)中的訂票信息表頻繁進(jìn)行訂票和改簽操作(增加、修改),如同步不及時(shí)則會(huì)造成主從庫(kù)查詢余票結(jié)果不一致的情況。
(3)數(shù)據(jù)同步方式為單向。同步的方向是由發(fā)布同步至訂閱服務(wù)器,訂閱服務(wù)器上的數(shù)據(jù)庫(kù)為只讀狀態(tài)。但如果訂閱數(shù)據(jù)庫(kù)上產(chǎn)生更改,則不會(huì)將事務(wù)回傳至發(fā)布服務(wù)器。
2.3? ?合并發(fā)布
快照發(fā)布和事務(wù)發(fā)布數(shù)據(jù)同步的方式都是單向,即從庫(kù)復(fù)制主庫(kù)數(shù)據(jù)。合并發(fā)布數(shù)據(jù)同步是雙向的,訂閱數(shù)據(jù)庫(kù)復(fù)制到發(fā)布數(shù)據(jù)庫(kù)的快照后,可以各自進(jìn)行讀寫操作[5]。在各服務(wù)器上產(chǎn)生的數(shù)據(jù)更改操作會(huì)被SQL Server監(jiān)視,訂閱服務(wù)器和發(fā)布服務(wù)器連接時(shí),交換自上次發(fā)布快照以來各自發(fā)生的更改。這種復(fù)制方式的優(yōu)點(diǎn)是允許在主從服務(wù)器上分別進(jìn)行讀寫操作,從庫(kù)獨(dú)立性較高。缺點(diǎn)是在讀寫量極大的情況下數(shù)據(jù)合并更新可能會(huì)產(chǎn)生沖突。合并發(fā)布方式適用于以下場(chǎng)景:
(1)接受一定的同步延遲。集群訂閱服務(wù)之間的同步不是實(shí)時(shí)進(jìn)行,某個(gè)訂閱服務(wù)器發(fā)生更改后,會(huì)脫機(jī)進(jìn)行數(shù)據(jù)更改,并將更改同步到發(fā)布服務(wù)器和其他訂閱服務(wù)器,所以會(huì)造成一定的時(shí)間延遲。
(2)應(yīng)用程序訪問最終更改結(jié)果。例如訂單管理系統(tǒng)數(shù)據(jù)庫(kù),如果同步前訂閱數(shù)據(jù)庫(kù)中的訂單表中數(shù)據(jù)進(jìn)行了多次更改,則與發(fā)布數(shù)據(jù)庫(kù)同步時(shí)只同步最后一次的更改結(jié)果,而不會(huì)反映中間的修改過程[6]。
(3)可在主從服務(wù)器上分別進(jìn)行讀寫操作。不同于前兩種同步方式的單向性,合并發(fā)布方式中發(fā)布訂閱數(shù)據(jù)庫(kù)都可以進(jìn)行讀寫操作。例如電子商務(wù)系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)可以分布在不同服務(wù)器上,各服務(wù)器都可接受前臺(tái)應(yīng)用程序的I/O操作。
3 使用事務(wù)發(fā)布方式實(shí)現(xiàn)數(shù)據(jù)同步(Data synchronization through transaction publishing)
SQL Server中要進(jìn)行數(shù)據(jù)同步需要滿足以下條件:被同步的數(shù)據(jù)表需要有主鍵,如果沒有主鍵則會(huì)增加一個(gè)int類型的自增列id(增量為1);SQL Server代理服務(wù)必須啟動(dòng);在進(jìn)行SQL Server注冊(cè)時(shí),發(fā)布服務(wù)器和訂閱服務(wù)器必須使用計(jì)算機(jī)名稱,不能使用IP地址或別名注冊(cè)。
本文將采用事務(wù)發(fā)布模式實(shí)現(xiàn)主從服務(wù)器上對(duì)應(yīng)的數(shù)據(jù)庫(kù)E_business_DB(電子商務(wù)數(shù)據(jù)庫(kù))數(shù)據(jù)同步。
3.1? ?主庫(kù)建立發(fā)布
(1)E_business_DB是主數(shù)據(jù)庫(kù),E_business_DB_R是被同步的數(shù)據(jù)庫(kù)既從庫(kù),初始化狀態(tài)下主庫(kù)和從庫(kù)中的userInfo表(用戶信息表)數(shù)據(jù)一致。
(2)將主庫(kù)E_business_DB進(jìn)行發(fā)布,并設(shè)置發(fā)布數(shù)據(jù)庫(kù)并選擇發(fā)布類型為“事務(wù)發(fā)布”,這樣發(fā)布服務(wù)器將事務(wù)流式地傳送到訂閱服務(wù)器。
(3)根據(jù)需要選擇要發(fā)布數(shù)據(jù)庫(kù)對(duì)象,如圖3所示。
(4)在快照代理設(shè)置內(nèi)容中選擇“立即創(chuàng)建快照”,也可以在“計(jì)劃在下時(shí)間運(yùn)行快照代理”中設(shè)置運(yùn)行時(shí)間。
(5)指定運(yùn)行時(shí)的數(shù)據(jù)庫(kù)賬戶并進(jìn)行代理安全性設(shè)置后,數(shù)據(jù)庫(kù)即可發(fā)布成功。
快照發(fā)布的流程和事務(wù)發(fā)布類似,區(qū)別主要在主從數(shù)據(jù)庫(kù)同步的及時(shí)性,快照發(fā)布在規(guī)定時(shí)間或重啟代理服務(wù)時(shí)會(huì)進(jìn)行數(shù)據(jù)同步[7]。
3.2? ?從庫(kù)進(jìn)行訂閱
(1)在從庫(kù)E_business_DB_R上建立訂閱,選擇主數(shù)據(jù)庫(kù)創(chuàng)建的發(fā)布,設(shè)置在分發(fā)服務(wù)器上運(yùn)行所有代理。
(2)選擇訂閱數(shù)據(jù)庫(kù)E_business_DB后,設(shè)置運(yùn)行分發(fā)代理的計(jì)算機(jī)賬戶和連接的訂閱服務(wù)器賬戶,如圖4所示。
(3)同步計(jì)劃中選擇代理計(jì)劃選項(xiàng)為“連續(xù)運(yùn)行”;在初始化訂閱頁(yè)面中設(shè)置初始化時(shí)間,確認(rèn)訂閱信息后即可創(chuàng)建訂閱。訂閱成功后會(huì)在主庫(kù)中顯示數(shù)據(jù)庫(kù)訂閱信息。
3.3? ?主從庫(kù)數(shù)據(jù)同步
在主庫(kù)的userInfo(用戶信息)表中增加2條記錄,使記錄數(shù)為12,如圖5所示。查詢從庫(kù)中的userInfo表,發(fā)現(xiàn)表中數(shù)據(jù)行數(shù)已經(jīng)和主庫(kù)表一致,如圖6所示。說明主庫(kù)與從庫(kù)已經(jīng)完成數(shù)據(jù)同步。
4? ?結(jié)論(Conclusion)
通過主從復(fù)制技術(shù)可以實(shí)現(xiàn)集群內(nèi)服務(wù)器間的數(shù)據(jù)同步。數(shù)據(jù)庫(kù)管理員在選擇同步方案時(shí),需要綜合考慮數(shù)據(jù)量、同步延遲、網(wǎng)絡(luò)可靠性等影響因素[8]。結(jié)合具體業(yè)務(wù)的應(yīng)用場(chǎng)景選擇合適方案,從而緩解單臺(tái)服務(wù)器讀寫壓力,實(shí)現(xiàn)集群間負(fù)載均衡。
參考文獻(xiàn)(References)
[1] 夏明慧.分布式數(shù)據(jù)庫(kù)數(shù)據(jù)同步的應(yīng)用分析[J].智能城市,2016(03):82.
[2] 季剛.基于存儲(chǔ)過程的主從服務(wù)器數(shù)據(jù)庫(kù)同步的實(shí)現(xiàn)[J].計(jì)算技術(shù)與自動(dòng)化,2012,31(3):114-116.
[3] 景慎艷.分布式數(shù)據(jù)庫(kù)同步技術(shù)及其應(yīng)用[J].計(jì)算機(jī)與自動(dòng)化技術(shù),2008,34(12):48-50.
[4] 劉娟娟,劉帥.數(shù)據(jù)庫(kù)同步技術(shù)的研究與實(shí)現(xiàn)[J].軟件工程,2017,20(1):1-4.
[5] 肖剛.異構(gòu)數(shù)據(jù)庫(kù)更新同步研究與實(shí)現(xiàn)[J].數(shù)字通信世界,2017(07):47.
[6] 李偉洪.服務(wù)器負(fù)載均衡的實(shí)現(xiàn)與分析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2019(07):12-14.
[7] 李寧.一種異構(gòu)關(guān)系型數(shù)據(jù)庫(kù)間的數(shù)據(jù)同步方案[J].福建電腦,2018(10):114-117.
[8] 劉維志.數(shù)據(jù)庫(kù)應(yīng)用的高可用性及實(shí)現(xiàn)技術(shù)研究[J].信息系統(tǒng)工程,2013(4):97;119.
作者簡(jiǎn)介:
陳? 瀟(1983-),男,碩士,講師.研究領(lǐng)域:數(shù)據(jù)庫(kù)管理與應(yīng)用,管理信息系統(tǒng)開發(fā).