两种与SQL Server数据库交换数据的方法
Microsoft SQL Server 2005 Mobile Edition 3.0 (SQL Server Mobile) 支持两种与 SQL Server 数据库交换数据的方法:
◆合并复制,提供一种强大且功能齐全的解决方案,该解决方案允许移动应用程序对复制的数据自行更改,然后再将这些更改与 Microsoft SQL Server 数据库进行合并,并在必要时解决冲突。
◆远程数据访问 (RDA),使移动应用程序能够方便地将远程 Microsoft SQL Server 数据库表中的数据读取(拉)到本地 SQL Server Mobile 数据库表中,或者将本地 SQL Server Mobile 数据库表中的数据发送(推)到远程 Microsoft SQL Server 数据库表中。RDA 还可用于在运行 SQL Server 的服务器上发出 SQL 命令。
将 SQL Server Mobile 连接到 SQL Server
使用 RDA 或复制功能时,SQL Server Mobile 将通过 Microsoft Internet Information Services (IIS) 服务器连接到 SQL Server。由于与 SQL Server 的连接由 IIS 处理,因此您的设备只需能够使用 HTTP 或 HTTPS 协议连接到 IIS Web 服务器即可。这样一来,您就可以通过支持 HTTP 的任何类型的网络连接执行 RDA 和复制操作了,包括:局域网 (LAN)、广域网 (WAN) 和 Microsoft ActiveSync? 连接。
RDA 和复制功能都非常适合无线传输。它们采用压缩来减小传输数据的大小,并采用加密在传输期间保护敏感的用户数据。
在连接到 SQL Server 时,RDA 和复制功能都支持集成 Windows 身份验证和 SQL Server 身份验证。
合并复制简介
SQL Server Mobile 复制基于 Microsoft SQL Server 合并复制。可以使用 Microsoft SQL Server 2000 数据库或 Microsoft SQL Server 2005 数据库来实现合并复制。
合并复制非常适合移动应用程序,因为它允许分别在便携式设备和服务器上自行更新数据。之后可以对该设备和服务器上的数据进行同步,以将客户端的更改发送到服务器,或从服务器接收新的更改。
尽管与 RDA 相比,合并复制需要在服务器上进行更多的配置和维护,但是使用合并复制却有许多优点,包括:
◆复制提供了内置和自定义的冲突解决功能。
◆通过复制可以同时对多个表中的数据进行同步。
◆复制提供了丰富的数据复制选项,包括:
·选择文章类型并进行筛选以提高性能
·标识范围管理
◆Microsoft SQL Server 包括大量工具,可用于:
·创建和同步 SQL Server Mobile 订阅
·监视订阅者的每次发布活动
有关合并复制功能工作原理的一般信息,请参阅 SQL Server Books Online 中的“How Merge Replication Works”。有关 SQL Server Mobile 订阅者的相关复制信息,请参阅 SQL Server Mobile Books Online 中的“How Replication Works”和“Replication Architecture”。
远程数据访问 (RDA) 简介
远程数据访问 (RDA) 使移动应用程序能够访问远程 SQL Server 数据库表中的数据,并将这些数据存储在本地 SQL Server Mobile 数据库表中。随后,该应用程序就可以读取和更新本地 SQL Server Mobile 数据库表。SQL Server Mobile 可以选择跟踪对本地表所做的所有更改。之后,应用程序可以将本地表中更改过的记录更新回 SQL Server 表。
在 SQL Server Mobile 中,将数据从 SQL Server 表传播至本地 SQL Server Mobile 表的过程称为“拉”数据。将本地 SQL Server Mobile 表中所做的更改传播回 SQL Server 表的过程称为“推”数据。
在不需要使用 SQL Server Mobile 合并复制的全部功能(包括冲突解决)时,适合使用 RDA。
决定在 SQL Mobile 应用程序中使用远程数据访问 (RDA) 功能还是复制功能,取决于移动应用程序的用途、功能、规模和要求。每种连接数据解决方案都有各自的优缺点。这些优缺点将在随后各节中加以讨论。
功能对比
本节简要介绍对复制与远程数据访问 (RDA) 之间的可对比功能支持的差异。本节的主要目的并不是介绍复制或 RDA 的每项可用功能,而只是提供可对比的那些功能的对比。例如,有许多复制功能没有相应的 RDA 功能,因此这些就不是本文所探讨的内容。
服务器侵害
SQL Server Mobile 的大量合并复制功能来自于 SQL Server 的合并复制功能。SQL Server Mobile 通过订阅 SQL Server 发布产品来利用这些功能。通过在服务器上创建发布,可以将大量的系统表添加到即将发布的数据库中,并将“唯一标识符”系统列添加到即将发布的每个用户表中。这些系统对象将被添加到服务器数据库中,用于对复制进行管理。RDA 不需要对服务器上的数据库进行任何更改。由于 RDA 对服务器上的架构没有侵害性,因此 RDA 的功能有一定限制,不像复制那样功能齐备,但是该功能可用于在 SQL Server 与 SQL Server Mobile 之间传输数据,而无需任何服务器端配置工作。在有些情况下,您可能无权变更后端系统中的架构。如果是这种情况,RDA 是潜在的连接选择,可用于在 SQL Server 与 SQL Server Mobile 之间传输数据更改。如果需要强大的复制功能而且无法变更后端数据库架构,则可以考虑的另一个选择是使用中间层 SQL Server 作为复制服务器,然后使用其他无侵害技术 [如数据转换服务 (DTS) 和 Web 服务] 将数据传输到后端系统。
简而言之,复制功能需要对服务器数据库的架构进行一些细微的更改,但通过这些更改可获得一组非常强大的功能,而 RDA 不需要对服务器数据库进行任何更改,但它不是功能齐备的连接解决方案。
数据和架构定义
如上文所述,您需要通过在服务器上创建发布来进行复制准备。要复制到订阅者的数据和架构将在服务器上创建发布时指定。首次创建订阅时,将在客户端自动定义架构。发布定义了要复制到订阅者的表(文章),包括行筛选(使用 WHERE 子句限制数据流)和列筛选(限制表中要复制的列)。发布可以包含一个或多个表。在 SQL Server Mobile 数据库中,整个发布定义(包括正在复制的表的数据和架构)是使用一种同步方法创建的。
使用 RDA 时,客户端控制从服务器中传输哪些数据,包括数据定义(包括行筛选)和架构定义(包括列筛选)。RDA 在每个 RDA 拉进程中只能对一个表进行同步,这与复制有所不同,后者可以在一次同步操作中处理多个表。
简而言之,最初在 SQL Server Mobile 数据库中创建的数据和架构在服务器上是使用复制功能进行定义的,而在客户端上是使用 RDA 进行定义的。复制发布可以包含多个表,而 RDA 每次下载(RDA 拉进程)只能处理一个表。
架构更改
使用复制功能时,在最初创建订阅后可以将架构更改(如添加或删除列,添加或删除约束,以及更改列定义)复制到订阅者。当需要将挂起的架构更改复制到订阅者时,将首先复制架构更改,然后在发布者与订阅者之间交换所导致的增量更改。服务器架构更改(例如,添加列或删除应用程序中未在使用的列)不一定会要求对应用程序进行更改和重新编译。允许对订阅数据库的架构进行细微的更改。有关详细信息,请参阅 SQL Server Mobile Books Online 中的“Replication Limitations”。
使用 RDA 时,不支持在服务器上进行架构更改。如果进行了架构更改,从客户端到服务器的推操作可能会失败。如果更改了服务器架构,则客户端必须先删除表,然后再次从服务器拉出所有数据。更改服务器架构可能会要求对应用程序进行更改并重新编译。允许对客户端的架构进行细微的更改。有关详细信息,请参阅 SQL Server Mobile Books Online 中的“Remote Data Access (RDA) Limitations”。
简而言之,使用复制功能时,支持服务器架构更改,而且服务器架构更改不会导致订阅者上的数据丢失。但是,使用 RDA 时,不支持服务器架构更改,而且服务器架构更改可能会导致客户端的数据丢失。复制和 RDA 功能均允许对 SQL Server Mobile 连接表进行细微的架构更改。
标识列
在许多应用程序中,您可能需要使用递增的编号来管理在客户端数据库中插入的记录。例如,如果用户正在表中输入新订单,则您可能需要为每个订单分配自动递增的编号。使用这类系统时,必须确保这些编号在客户端之间不会引起冲突。对于发布和订阅,复制功能支持 integer 和 bigint 列的自动标识范围管理。使用自动标识范围管理,可以确保无论有多少客户端,都不会发生行冲突。有关使用此复制功能的详细信息,请参阅 SQL Server Books Online 中的“Replicating Identity Columns”。
使用 RDA 时,不支持标识列的自动管理。要使用此数据类型属性,必须在整个系统中手动管理值。
约束和索引
由于复制功能支持在发布定义中使用多个表,因此引用完整性约束和索引会自动从服务器复制到订阅数据库。
而由于 RDA 每次只能拉一个表,因此不会传输引用完整性约束,但是可以传输索引。其他架构定义必须在客户端进行定义。
交换跟踪数据更改
使用复制功能时,将分别在发布数据库和 SQL Mobile 数据库中创建系统对象,前者是在创建发布时建立,而后者则是在创建订阅时建立的。这些对象允许在 SQL Server 与 SQL Server Mobile 之间使用非常强大的数据交换模型。复制功能可用于跟踪发布和订阅数据库中的更改。发布者与订阅者之间的数据流控制有两种跟踪级别:
◆表的行级别跟踪会导致在同步期间传输整个行。这种跟踪级别对依赖于连接速度的数据传输而言可能代价较高,但需要在发布者和订阅者上存储的跟踪信息较少。
◆列级别跟踪不仅跟踪行中的更改,而且还跟踪列级别上的更改,因此可以只将更改的列数据从订阅者传输到发布者,从而减少了传输的数据量。发布者始终会将整个更改的行发送到预定者,原因是它不能确定该行在订阅者中是否实际存在。
有关跟踪级别的详细信息,请参阅 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 数据库中的系统对象来跟踪对数据所做的更改。获得此信息后,RDA 仅将这些更改(特别是更改的行)从 SQL Server Mobile 推到 SQL Server。但如果 SQL Server Mobile 要从 SQL Server 检索数据更改,则需要完全刷新客户端数据。
简而言之,复制功能支持增量更改的双向数据交换,因为数据更改是在发布者和订阅者中同时进行跟踪的。而 RDA 仅支持从 SQL Server Mobile 到 SQL Server 的增量更改数据交换,并且需要对数据进行完全刷新才能将 SQL Server 中的更改更新到 SQL Server Mobile,因为数据更改仅在 SQL Mobile 数据库中进行跟踪。
可以传播的表类型
将表添加到复制发布中时,可以设置表的属性来控制数据流。除了控制发布者与订阅者之间的数据流以外,这些表属性还可用于增强同步的性能。有关详细信息,请参阅 SQL Server Books Online 中的“Parameterized Row Filters”和“Optimizing Merge Replication Synchronization Performance with Download-Only Articles”。
RDA 不支持任何用于控制数据流或增强性能的表属性。拉到客户端的数据仅由该客户端上的应用程序代码控制。
冲突
使用复制作为连接解决方案时,潜在的冲突包括由不同用户更改的数据以及由于错误而无法应用的行。复制完全支持服务器上的冲突解决和管理,包括内置和自定义的冲突解决程序。有关详细信息,请参阅 SQL Server Mobile Books Online 中的“Replication Conflict Detection and Resolution”和 SQL Server Books Online 中的“Merge Replication Conflict Detection and Resolution”。
使用 RDA 时,冲突仅包括由于错误而无法应用的行。RDA 不会检测是否有不同的用户对数据进行了更改。因此,RDA 在将数据推入服务器时始终采用“最后一个写入者获胜”的方式。不会对冲突进行管理,但是可以在客户端的错误表中报告冲突。由于没有去解决冲突,因此也就不支持任何冲突解决程序。
工具 (UI)
SQL Server Management Studio 包含大量用于创建和管理订阅的工具集,包括用于管理多个订阅及监测性能和同步次数的监视工具。
RDA 只能通过编写代码来使用;SQL Server 和 SQL Server Mobile 中都没有可用于推/拉更改或监视客户端的工具。
结论
在本文中,您已经了解了合并复制与 RDA 之间主要功能的关键差别。了解这些信息后,您就可以根据 SQL Server Mobile 应用程序的需要成功地选择相应的连接解决方案。例如,应用程序可能会从 RDA 的简单性或合并复制的强大功能中受益。在有些情况下,如果服务器上的数据不会发生冲突,您可以选择在一个解决方案中结合使用 RDA 和合并复制的功能。