SQL Server05 M 3.0 中復(fù)制和遠(yuǎn)程數(shù)據(jù)訪問(wèn)功能的技術(shù)對(duì)比
摘要:對(duì)比兩種 Microsoft SQL Server 2005 Mobile Edition 3.0 (SQL Server Mobile) 連接解決方案 [合并復(fù)制和遠(yuǎn)程數(shù)據(jù)訪問(wèn) (RDA)] 的功能集,并了解哪種連接解決方案對(duì)項(xiàng)目更有利。(本文包含一些指向英文站點(diǎn)的鏈接。)
引言Microsoft SQL Server 2005 Mobile Edition 3.0 (SQL Server Mobile) 支持兩種與 SQL Server 數(shù)據(jù)庫(kù)交換數(shù)據(jù)的方法:
1.合并復(fù)制,提供一種強(qiáng)大且功能齊全的解決方案,該解決方案允許移動(dòng)應(yīng)用程序?qū)?fù)制的數(shù)據(jù)自行更改,然后再將這些更改與 Microsoft SQL Server 數(shù)據(jù)庫(kù)進(jìn)行合并,并在必要時(shí)解決沖突。
2.遠(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í)別:
1.表的行級(jí)別跟蹤會(huì)導(dǎo)致在同步期間傳輸整個(gè)行。這種跟蹤級(jí)別對(duì)依賴于連接速度的數(shù)據(jù)傳輸而言可能代價(jià)較高,但需要在發(fā)布者和訂閱者上存儲(chǔ)的跟蹤信息較少。
2.列級(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ù)制的功能。
