一步步教你配置SQLSERVER合并復(fù)制(一)概念介紹

字號(hào):

Rob Tiffany's 曾經(jīng)在 MEDC 2007 Las Vegas 和 Tech Ed 2007 Orlando 演示了擁有800個(gè)訂閱的4層合并復(fù)制架構(gòu)。之后他開始編寫一本叫《Windows Mobile Data Synchronization with SQL Server 2005 and SQL Server Compact 3.1》的書,將構(gòu)建高性能、可伸縮性的合并復(fù)制架構(gòu)的寶貴經(jīng)驗(yàn)整理到書中,由于國內(nèi)關(guān)于這方面的詳細(xì)資料太少了,于是萌發(fā)將其翻譯出來的念頭。好了,閑話不多說了開始翻譯:
    前言:
    設(shè)備中擁有一個(gè)數(shù)據(jù)庫,服務(wù)器中擁有一個(gè)數(shù)據(jù)庫,讓設(shè)備中的數(shù)據(jù)能夠跟服務(wù)器的數(shù)據(jù)同步已成為行業(yè)移動(dòng)解決方案兩個(gè)重要的因素。服務(wù)器的數(shù)據(jù)庫存儲(chǔ)著所有的數(shù)據(jù),而它必須將 mobile中的應(yīng)用程序所需要的數(shù)據(jù)推送到mobile中的數(shù)據(jù)庫中去,同樣地,mobile中修改的數(shù)據(jù)也需返回到服務(wù)器中去。微軟的SQLSERVER提供了一種技術(shù)叫做合并復(fù)制,通過區(qū)域的網(wǎng)絡(luò),設(shè)備中已訂閱的數(shù)據(jù)庫將能通過復(fù)制的形式從服務(wù)器發(fā)布的數(shù)據(jù)庫中下載數(shù)據(jù),并能通過合并的方式將設(shè)備中對(duì)數(shù)據(jù)庫的更新,修改,插入提交回服務(wù)器發(fā)布的數(shù)據(jù)庫當(dāng)中去.
    這里,合并復(fù)制有個(gè)很好的功能就是,它只捕獲修改設(shè)備中修改過的數(shù)據(jù)并將其更新到數(shù)據(jù)庫當(dāng)中去,并且它在協(xié)調(diào)多個(gè)設(shè)備發(fā)回來的數(shù)據(jù)有著很好的性能.
    早在SQL SERVER CE1.0在2001年出來的時(shí)候,合并復(fù)制就成為一個(gè)很好的數(shù)據(jù)同步技術(shù),并且它支持winodws mobile設(shè)備.隨著互聯(lián)網(wǎng)標(biāo)準(zhǔn)的公布,SQL SERVER 開發(fā)團(tuán)隊(duì)讓移動(dòng)設(shè)備的數(shù)據(jù)與服務(wù)器的數(shù)據(jù)同步不僅僅只能通過局域網(wǎng),還可以通過無線網(wǎng)絡(luò),透過Http,wap等傳輸協(xié)議與服務(wù)器的數(shù)據(jù)進(jìn)行同步.隨著SQL Server CE支持合并復(fù)制,Windows Mobile 逐漸成為企業(yè)應(yīng)用的一個(gè)平臺(tái),并且它支持Embedded Visual Basic,Embedded C++等開發(fā)工具和.NET Compact Framework框架,從2001到現(xiàn)在SQLSERVER也從2001升級(jí)至2005,馬上2008又要出來了,SQL SERVER CE也從1.0升級(jí)至3.1版本,隨著每一次的更新升級(jí),數(shù)據(jù)同步技術(shù)變得更快,并且能更好地處理丟失的數(shù)據(jù).現(xiàn)在,合并復(fù)制代表著一種級(jí)的技術(shù),在這競(jìng)爭(zhēng)日趨激烈的網(wǎng)絡(luò)中,沒有其他的數(shù)據(jù)同步解決方案能有像合并復(fù)制這樣的深度和性能.
    既然這樣,那我們?cè)谑褂肧QL Server CE數(shù)據(jù)同步的時(shí)候有其他選擇么?答案是肯定的.
    (1)在.NET Compact Framework下,我們可以使用ADO.NET直接與SQL SERVER 進(jìn)行連接,在局域網(wǎng)中,這或許是一種的解決方案,但你能讓你的移動(dòng)設(shè)備時(shí)時(shí)刻刻都連接在局域網(wǎng)中嗎?
    (2)第二種方法是RDA,它像是合并復(fù)制的弟弟一樣,它在SQL SERVER端幾乎不用做任何配置,你只需寫代碼讓它用pull方法從數(shù)據(jù)庫中pull數(shù)據(jù),然后用push方法將數(shù)據(jù)push回去,但是它不根據(jù)服務(wù)器端數(shù)據(jù)的變化,因此每次你都得將全部數(shù)據(jù)pull過來,全部數(shù)據(jù)push回去.
    (3)第三種方法是使用webservice,你可以建立一個(gè)自定義的xml文件,將webservice中傳輸?shù)臄?shù)據(jù)序列化到DataSet當(dāng)中,然后將DataSet的數(shù)據(jù)寫入到XML文件當(dāng)中去,這種解決方案能夠解決前面兩種只針對(duì)SQL SERVER數(shù)據(jù)庫的,這種方法你還可以連接到其他類型的數(shù)據(jù)庫比如Orcacle or DB2,不過你所要做的工作是編寫數(shù)千行代碼來實(shí)現(xiàn)這個(gè),并且XML在處理大數(shù)據(jù)量時(shí)的效率并不盡如人意.
    情景:
    當(dāng)你意識(shí)到合并復(fù)制在你的SQL SERVER 數(shù)據(jù)與SQL SERVER CE同步的重要性時(shí),下面的這幾個(gè)案例或許能夠闡明這項(xiàng)技術(shù)能給你解決方案帶來的價(jià)值.
    (案例主要講解windows mobile在各個(gè)領(lǐng)域的應(yīng)用,以及合并復(fù)制在mobile的數(shù)據(jù)與服務(wù)器的數(shù)據(jù)同步時(shí)所起的作用,因?yàn)榘咐^多,由于時(shí)間的關(guān)系這邊就不一一翻譯了,個(gè)人認(rèn)為這些案例對(duì)我們的用處不大)
    了解這些概念:
    • Publisher:在SQL SERVER中通過Replication發(fā)布的數(shù)據(jù)庫
    • Article:Replication發(fā)布的數(shù)據(jù)表或子集
    • Publication:Article的集合
    • Distributor:指的是包含通過Replication發(fā)布的數(shù)據(jù)庫的服務(wù)器.
    • Subsciber:指的是運(yùn)行在windows mobile上的接受訂閱數(shù)據(jù)庫并將結(jié)果改變提交給publisher的數(shù)據(jù)庫
    • Subscription:指的是從Subscriber從服務(wù)器請(qǐng)求需要復(fù)制的數(shù)據(jù),這些復(fù)制的結(jié)果包括表及其集合將被下載并在SQL Mobile中創(chuàng)建,你可以獲取這些表的主鍵,關(guān)聯(lián),以及數(shù)據(jù)。第一次從Distributor下載的數(shù)據(jù)稱為快照,只需很少的內(nèi)存消耗就可以下載大量的數(shù)據(jù)到Windows Mobile模擬器上。
    • IIS:SQL MOBILE SERVER Agent,一個(gè)ISAPI、SQL Mobile Replication Provider以及SQL SERVER Reconciler集合在一起就是人們眾所周知的SQL MOBILE SERVER TOOLS,它集合在IIS上在設(shè)備和SQL SERVER提供一個(gè)Internet/Intranet通道.在下面的這張圖中,你就會(huì)發(fā)現(xiàn)Publisher,Distributor,IIS 和Subscriber是怎樣很好地結(jié)合在一起。