兩種與SQL Server數(shù)據(jù)庫(kù)交換數(shù)據(jù)的方法
引言
Microsoft SQL Server 2005 Mobile Edition 3.0 (SQL Server Mobile) 支持兩種與 SQL Server 數(shù)據(jù)庫(kù)交換數(shù)據(jù)的方法:
◆合并復(fù)制,提供一種強(qiáng)大且功能齊全的解決方案,該解決方案允許移動(dòng)應(yīng)用程序?qū)?fù)制的數(shù)據(jù)自行更改,然后再將這些更改與 Microsoft SQL Server 數(shù)據(jù)庫(kù)進(jìn)行合并,并在必要時(shí)解決沖突。
◆遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA),使移動(dòng)應(yīng)用程序能夠方便地將遠(yuǎn)程 Microsoft SQL Server 數(shù)據(jù)庫(kù)表中的數(shù)據(jù)讀取(拉)到本地 SQL Server Mobile 數(shù)據(jù)庫(kù)表中,或者將本地 SQL Server Mobile 數(shù)據(jù)庫(kù)表中的數(shù)據(jù)發(fā)送(推)到遠(yuǎn)程 Microsoft SQL Server 數(shù)據(jù)庫(kù)表中。RDA 還可用于在運(yùn)行 SQL Server 的服務(wù)器上發(fā)出 SQL 命令。
將 SQL Server Mobile 連接到 SQL Server
使用 RDA 或復(fù)制功能時(shí),SQL Server Mobile 將通過(guò) Microsoft Internet Information Services (IIS) 服務(wù)器連接到 SQL Server。由于與 SQL Server 的連接由 IIS 處理,因此您的設(shè)備只需能夠使用 HTTP 或 HTTPS 協(xié)議連接到 IIS Web 服務(wù)器即可。這樣一來(lái),您就可以通過(guò)支持 HTTP 的任何類型的網(wǎng)絡(luò)連接執(zhí)行 RDA 和復(fù)制操作了,包括:局域網(wǎng) (LAN)、廣域網(wǎng) (WAN) 和 Microsoft ActiveSync® 連接。
RDA 和復(fù)制功能都非常適合無(wú)線傳輸。它們采用壓縮來(lái)減小傳輸數(shù)據(jù)的大小,并采用加密在傳輸期間保護(hù)敏感的用戶數(shù)據(jù)。
在連接到 SQL Server 時(shí),RDA 和復(fù)制功能都支持集成 Windows 身份驗(yàn)證和 SQL Server 身份驗(yàn)證。
合并復(fù)制簡(jiǎn)介
SQL Server Mobile 復(fù)制基于 Microsoft SQL Server 合并復(fù)制。可以使用 Microsoft SQL Server 2000 數(shù)據(jù)庫(kù)或 Microsoft SQL Server 2005 數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)合并復(fù)制。
合并復(fù)制非常適合移動(dòng)應(yīng)用程序,因?yàn)樗试S分別在便攜式設(shè)備和服務(wù)器上自行更新數(shù)據(jù)。之后可以對(duì)該設(shè)備和服務(wù)器上的數(shù)據(jù)進(jìn)行同步,以將客戶端的更改發(fā)送到服務(wù)器,或從服務(wù)器接收新的更改。
盡管與 RDA 相比,合并復(fù)制需要在服務(wù)器上進(jìn)行更多的配置和維護(hù),但是使用合并復(fù)制卻有許多優(yōu)點(diǎn),包括:
◆復(fù)制提供了內(nèi)置和自定義的沖突解決功能。
◆通過(guò)復(fù)制可以同時(shí)對(duì)多個(gè)表中的數(shù)據(jù)進(jìn)行同步。
◆復(fù)制提供了豐富的數(shù)據(jù)復(fù)制選項(xiàng),包括:
·選擇文章類型并進(jìn)行篩選以提高性能
·標(biāo)識(shí)范圍管理
◆Microsoft SQL Server 包括大量工具,可用于:
·創(chuàng)建和同步 SQL Server Mobile 訂閱
·監(jiān)視訂閱者的每次發(fā)布活動(dòng)
有關(guān)合并復(fù)制功能工作原理的一般信息,請(qǐng)參閱 SQL Server Books Online 中的“How Merge Replication Works”。有關(guān) SQL Server Mobile 訂閱者的相關(guān)復(fù)制信息,請(qǐng)參閱 SQL Server Mobile Books Online 中的“How Replication Works”和“Replication Architecture”。
遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA) 簡(jiǎn)介
遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA) 使移動(dòng)應(yīng)用程序能夠訪問(wèn)遠(yuǎn)程 SQL Server 數(shù)據(jù)庫(kù)表中的數(shù)據(jù),并將這些數(shù)據(jù)存儲(chǔ)在本地 SQL Server Mobile 數(shù)據(jù)庫(kù)表中。隨后,該應(yīng)用程序就可以讀取和更新本地 SQL Server Mobile 數(shù)據(jù)庫(kù)表。SQL Server Mobile 可以選擇跟蹤對(duì)本地表所做的所有更改。之后,應(yīng)用程序可以將本地表中更改過(guò)的記錄更新回 SQL Server 表。
在 SQL Server Mobile 中,將數(shù)據(jù)從 SQL Server 表傳播至本地 SQL Server Mobile 表的過(guò)程稱為“拉”數(shù)據(jù)。將本地 SQL Server Mobile 表中所做的更改傳播回 SQL Server 表的過(guò)程稱為“推”數(shù)據(jù)。
在不需要使用 SQL Server Mobile 合并復(fù)制的全部功能(包括沖突解決)時(shí),適合使用 RDA。
決定在 SQL Mobile 應(yīng)用程序中使用遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA) 功能還是復(fù)制功能,取決于移動(dòng)應(yīng)用程序的用途、功能、規(guī)模和要求。每種連接數(shù)據(jù)解決方案都有各自的優(yōu)缺點(diǎn)。這些優(yōu)缺點(diǎn)將在隨后各節(jié)中加以討論。
功能對(duì)比
本節(jié)簡(jiǎn)要介紹對(duì)復(fù)制與遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA) 之間的可對(duì)比功能支持的差異。本節(jié)的主要目的并不是介紹復(fù)制或 RDA 的每項(xiàng)可用功能,而只是提供可對(duì)比的那些功能的對(duì)比。例如,有許多復(fù)制功能沒(méi)有相應(yīng)的 RDA 功能,因此這些就不是本文所探討的內(nèi)容。
服務(wù)器侵害
SQL Server Mobile 的大量合并復(fù)制功能來(lái)自于 SQL Server 的合并復(fù)制功能。SQL Server Mobile 通過(guò)訂閱 SQL Server 發(fā)布產(chǎn)品來(lái)利用這些功能。通過(guò)在服務(wù)器上創(chuàng)建發(fā)布,可以將大量的系統(tǒng)表添加到即將發(fā)布的數(shù)據(jù)庫(kù)中,并將“唯一標(biāo)識(shí)符”系統(tǒng)列添加到即將發(fā)布的每個(gè)用戶表中。這些系統(tǒng)對(duì)象將被添加到服務(wù)器數(shù)據(jù)庫(kù)中,用于對(duì)復(fù)制進(jìn)行管理。RDA 不需要對(duì)服務(wù)器上的數(shù)據(jù)庫(kù)進(jìn)行任何更改。由于 RDA 對(duì)服務(wù)器上的架構(gòu)沒(méi)有侵害性,因此 RDA 的功能有一定限制,不像復(fù)制那樣功能齊備,但是該功能可用于在 SQL Server 與 SQL Server Mobile 之間傳輸數(shù)據(jù),而無(wú)需任何服務(wù)器端配置工作。在有些情況下,您可能無(wú)權(quán)變更后端系統(tǒng)中的架構(gòu)。如果是這種情況,RDA 是潛在的連接選擇,可用于在 SQL Server 與 SQL Server Mobile 之間傳輸數(shù)據(jù)更改。如果需要強(qiáng)大的復(fù)制功能而且無(wú)法變更后端數(shù)據(jù)庫(kù)架構(gòu),則可以考慮的另一個(gè)選擇是使用中間層 SQL Server 作為復(fù)制服務(wù)器,然后使用其他無(wú)侵害技術(shù) [如數(shù)據(jù)轉(zhuǎn)換服務(wù) (DTS) 和 Web 服務(wù)] 將數(shù)據(jù)傳輸?shù)胶蠖讼到y(tǒng)。
簡(jiǎn)而言之,復(fù)制功能需要對(duì)服務(wù)器數(shù)據(jù)庫(kù)的架構(gòu)進(jìn)行一些細(xì)微的更改,但通過(guò)這些更改可獲得一組非常強(qiáng)大的功能,而 RDA 不需要對(duì)服務(wù)器數(shù)據(jù)庫(kù)進(jìn)行任何更改,但它不是功能齊備的連接解決方案。
數(shù)據(jù)和架構(gòu)定義
如上文所述,您需要通過(guò)在服務(wù)器上創(chuàng)建發(fā)布來(lái)進(jìn)行復(fù)制準(zhǔn)備。要復(fù)制到訂閱者的數(shù)據(jù)和架構(gòu)將在服務(wù)器上創(chuàng)建發(fā)布時(shí)指定。首次創(chuàng)建訂閱時(shí),將在客戶端自動(dòng)定義架構(gòu)。發(fā)布定義了要復(fù)制到訂閱者的表(文章),包括行篩選(使用 WHERE 子句限制數(shù)據(jù)流)和列篩選(限制表中要復(fù)制的列)。發(fā)布可以包含一個(gè)或多個(gè)表。在 SQL Server Mobile 數(shù)據(jù)庫(kù)中,整個(gè)發(fā)布定義(包括正在復(fù)制的表的數(shù)據(jù)和架構(gòu))是使用一種同步方法創(chuàng)建的。
使用 RDA 時(shí),客戶端控制從服務(wù)器中傳輸哪些數(shù)據(jù),包括數(shù)據(jù)定義(包括行篩選)和架構(gòu)定義(包括列篩選)。RDA 在每個(gè) RDA 拉進(jìn)程中只能對(duì)一個(gè)表進(jìn)行同步,這與復(fù)制有所不同,后者可以在一次同步操作中處理多個(gè)表。
簡(jiǎn)而言之,最初在 SQL Server Mobile 數(shù)據(jù)庫(kù)中創(chuàng)建的數(shù)據(jù)和架構(gòu)在服務(wù)器上是使用復(fù)制功能進(jìn)行定義的,而在客戶端上是使用 RDA 進(jìn)行定義的。復(fù)制發(fā)布可以包含多個(gè)表,而 RDA 每次下載(RDA 拉進(jìn)程)只能處理一個(gè)表。
架構(gòu)更改
使用復(fù)制功能時(shí),在最初創(chuàng)建訂閱后可以將架構(gòu)更改(如添加或刪除列,添加或刪除約束,以及更改列定義)復(fù)制到訂閱者。當(dāng)需要將掛起的架構(gòu)更改復(fù)制到訂閱者時(shí),將首先復(fù)制架構(gòu)更改,然后在發(fā)布者與訂閱者之間交換所導(dǎo)致的增量更改。服務(wù)器架構(gòu)更改(例如,添加列或刪除應(yīng)用程序中未在使用的列)不一定會(huì)要求對(duì)應(yīng)用程序進(jìn)行更改和重新編譯。允許對(duì)訂閱數(shù)據(jù)庫(kù)的架構(gòu)進(jìn)行細(xì)微的更改。有關(guān)詳細(xì)信息,請(qǐng)參閱 SQL Server Mobile Books Online 中的“Replication Limitations”。
使用 RDA 時(shí),不支持在服務(wù)器上進(jìn)行架構(gòu)更改。如果進(jìn)行了架構(gòu)更改,從客戶端到服務(wù)器的推操作可能會(huì)失敗。如果更改了服務(wù)器架構(gòu),則客戶端必須先刪除表,然后再次從服務(wù)器拉出所有數(shù)據(jù)。更改服務(wù)器架構(gòu)可能會(huì)要求對(duì)應(yīng)用程序進(jìn)行更改并重新編譯。允許對(duì)客戶端的架構(gòu)進(jìn)行細(xì)微的更改。有關(guān)詳細(xì)信息,請(qǐng)參閱 SQL Server Mobile Books Online 中的“Remote Data Access (RDA) Limitations”。
簡(jiǎn)而言之,使用復(fù)制功能時(shí),支持服務(wù)器架構(gòu)更改,而且服務(wù)器架構(gòu)更改不會(huì)導(dǎo)致訂閱者上的數(shù)據(jù)丟失。但是,使用 RDA 時(shí),不支持服務(wù)器架構(gòu)更改,而且服務(wù)器架構(gòu)更改可能會(huì)導(dǎo)致客戶端的數(shù)據(jù)丟失。復(fù)制和 RDA 功能均允許對(duì) SQL Server Mobile 連接表進(jìn)行細(xì)微的架構(gòu)更改。
標(biāo)識(shí)列
在許多應(yīng)用程序中,您可能需要使用遞增的編號(hào)來(lái)管理在客戶端數(shù)據(jù)庫(kù)中插入的記錄。例如,如果用戶正在表中輸入新訂單,則您可能需要為每個(gè)訂單分配自動(dòng)遞增的編號(hào)。使用這類系統(tǒng)時(shí),必須確保這些編號(hào)在客戶端之間不會(huì)引起沖突。對(duì)于發(fā)布和訂閱,復(fù)制功能支持 integer 和 bigint 列的自動(dòng)標(biāo)識(shí)范圍管理。使用自動(dòng)標(biāo)識(shí)范圍管理,可以確保無(wú)論有多少客戶端,都不會(huì)發(fā)生行沖突。有關(guān)使用此復(fù)制功能的詳細(xì)信息,請(qǐng)參閱 SQL Server Books Online 中的“Replicating Identity Columns”。
使用 RDA 時(shí),不支持標(biāo)識(shí)列的自動(dòng)管理。要使用此數(shù)據(jù)類型屬性,必須在整個(gè)系統(tǒng)中手動(dòng)管理值。
約束和索引
由于復(fù)制功能支持在發(fā)布定義中使用多個(gè)表,因此引用完整性約束和索引會(huì)自動(dòng)從服務(wù)器復(fù)制到訂閱數(shù)據(jù)庫(kù)。
而由于 RDA 每次只能拉一個(gè)表,因此不會(huì)傳輸引用完整性約束,但是可以傳輸索引。其他架構(gòu)定義必須在客戶端進(jìn)行定義。
交換跟蹤數(shù)據(jù)更改
使用復(fù)制功能時(shí),將分別在發(fā)布數(shù)據(jù)庫(kù)和 SQL Mobile 數(shù)據(jù)庫(kù)中創(chuàng)建系統(tǒng)對(duì)象,前者是在創(chuàng)建發(fā)布時(shí)建立,而后者則是在創(chuàng)建訂閱時(shí)建立的。這些對(duì)象允許在 SQL Server 與 SQL Server Mobile 之間使用非常強(qiáng)大的數(shù)據(jù)交換模型。復(fù)制功能可用于跟蹤發(fā)布和訂閱數(shù)據(jù)庫(kù)中的更改。發(fā)布者與訂閱者之間的數(shù)據(jù)流控制有兩種跟蹤級(jí)別:
◆表的行級(jí)別跟蹤會(huì)導(dǎo)致在同步期間傳輸整個(gè)行。這種跟蹤級(jí)別對(duì)依賴于連接速度的數(shù)據(jù)傳輸而言可能代價(jià)較高,但需要在發(fā)布者和訂閱者上存儲(chǔ)的跟蹤信息較少。
◆列級(jí)別跟蹤不僅跟蹤行中的更改,而且還跟蹤列級(jí)別上的更改,因此可以只將更改的列數(shù)據(jù)從訂閱者傳輸?shù)桨l(fā)布者,從而減少了傳輸?shù)臄?shù)據(jù)量。發(fā)布者始終會(huì)將整個(gè)更改的行發(fā)送到預(yù)定者,原因是它不能確定該行在訂閱者中是否實(shí)際存在。
有關(guān)跟蹤級(jí)別的詳細(xì)信息,請(qǐng)參閱 SQL Server Mobile Books Online 中的“Using Row-Level and Column-Level Tracking”和 SQL Server Books Online 中的“Row-Level Tracking and Column-Level Tracking”。
RDA 使用 SQL Server Mobile 數(shù)據(jù)庫(kù)中的系統(tǒng)對(duì)象來(lái)跟蹤對(duì)數(shù)據(jù)所做的更改。獲得此信息后,RDA 僅將這些更改(特別是更改的行)從 SQL Server Mobile 推到 SQL Server。但如果 SQL Server Mobile 要從 SQL Server 檢索數(shù)據(jù)更改,則需要完全刷新客戶端數(shù)據(jù)。
簡(jiǎn)而言之,復(fù)制功能支持增量更改的雙向數(shù)據(jù)交換,因?yàn)閿?shù)據(jù)更改是在發(fā)布者和訂閱者中同時(shí)進(jìn)行跟蹤的。而 RDA 僅支持從 SQL Server Mobile 到 SQL Server 的增量更改數(shù)據(jù)交換,并且需要對(duì)數(shù)據(jù)進(jìn)行完全刷新才能將 SQL Server 中的更改更新到 SQL Server Mobile,因?yàn)閿?shù)據(jù)更改僅在 SQL Mobile 數(shù)據(jù)庫(kù)中進(jìn)行跟蹤。
可以傳播的表類型
將表添加到復(fù)制發(fā)布中時(shí),可以設(shè)置表的屬性來(lái)控制數(shù)據(jù)流。除了控制發(fā)布者與訂閱者之間的數(shù)據(jù)流以外,這些表屬性還可用于增強(qiáng)同步的性能。有關(guān)詳細(xì)信息,請(qǐng)參閱 SQL Server Books Online 中的“Parameterized Row Filters”和“Optimizing Merge Replication Synchronization Performance with Download-Only Articles”。
RDA 不支持任何用于控制數(shù)據(jù)流或增強(qiáng)性能的表屬性。拉到客戶端的數(shù)據(jù)僅由該客戶端上的應(yīng)用程序代碼控制。
沖突
使用復(fù)制作為連接解決方案時(shí),潛在的沖突包括由不同用戶更改的數(shù)據(jù)以及由于錯(cuò)誤而無(wú)法應(yīng)用的行。復(fù)制完全支持服務(wù)器上的沖突解決和管理,包括內(nèi)置和自定義的沖突解決程序。有關(guān)詳細(xì)信息,請(qǐng)參閱 SQL Server Mobile Books Online 中的“Replication Conflict Detection and Resolution”和 SQL Server Books Online 中的“Merge Replication Conflict Detection and Resolution”。
使用 RDA 時(shí),沖突僅包括由于錯(cuò)誤而無(wú)法應(yīng)用的行。RDA 不會(huì)檢測(cè)是否有不同的用戶對(duì)數(shù)據(jù)進(jìn)行了更改。因此,RDA 在將數(shù)據(jù)推入服務(wù)器時(shí)始終采用“最后一個(gè)寫入者獲勝”的方式。不會(huì)對(duì)沖突進(jìn)行管理,但是可以在客戶端的錯(cuò)誤表中報(bào)告沖突。由于沒(méi)有去解決沖突,因此也就不支持任何沖突解決程序。
工具 (UI)
SQL Server Management Studio 包含大量用于創(chuàng)建和管理訂閱的工具集,包括用于管理多個(gè)訂閱及監(jiān)測(cè)性能和同步次數(shù)的監(jiān)視工具。
RDA 只能通過(guò)編寫代碼來(lái)使用;SQL Server 和 SQL Server Mobile 中都沒(méi)有可用于推/拉更改或監(jiān)視客戶端的工具。
結(jié)論
在本文中,您已經(jīng)了解了合并復(fù)制與 RDA 之間主要功能的關(guān)鍵差別。了解這些信息后,您就可以根據(jù) SQL Server Mobile 應(yīng)用程序的需要成功地選擇相應(yīng)的連接解決方案。例如,應(yīng)用程序可能會(huì)從 RDA 的簡(jiǎn)單性或合并復(fù)制的強(qiáng)大功能中受益。在有些情況下,如果服務(wù)器上的數(shù)據(jù)不會(huì)發(fā)生沖突,您可以選擇在一個(gè)解決方案中結(jié)合使用 RDA 和合并復(fù)制的功能。
