Rob Tiffany's 曾经在 MEDC 2007 Las Vegas 和 Tech Ed 2007 Orlando 演示了拥有800个订阅的4层合并复制架构。之后他开始编写一本叫《Windows Mobile Data Synchronization with SQL Server 2005 and SQL Server Compact 3.1》的书,将构建高性能、可伸缩性的合并复制架构的宝贵经验整理到书中,由于国内关于这方面的详细资料太少了,于是萌发将其翻译出来的念头。好了,闲话不多说了开始翻译:
前言:
设备中拥有一个数据库,服务器中拥有一个数据库,让设备中的数据能够跟服务器的数据同步已成为行业移动解决方案两个重要的因素。服务器的数据库存储着所有的数据,而它必须将 mobile中的应用程序所需要的数据推送到mobile中的数据库中去,同样地,mobile中修改的数据也需返回到服务器中去。微软的SQLSERVER提供了一种技术叫做合并复制,通过区域的网络,设备中已订阅的数据库将能通过复制的形式从服务器发布的数据库中下载数据,并能通过合并的方式将设备中对数据库的更新,修改,插入提交回服务器发布的数据库当中去.
这里,合并复制有个很好的功能就是,它只捕获修改设备中修改过的数据并将其更新到数据库当中去,并且它在协调多个设备发回来的数据有着很好的性能.
早在SQL SERVER CE1.0在2001年出来的时候,合并复制就成为一个很好的数据同步技术,并且它支持winodws mobile设备.随着互联网标准的公布,SQL SERVER 开发团队让移动设备的数据与服务器的数据同步不仅仅只能通过局域网,还可以通过无线网络,透过Http,wap等传输协议与服务器的数据进行同步.随着SQL Server CE支持合并复制,Windows Mobile 逐渐成为企业应用的一个平台,并且它支持Embedded Visual Basic,Embedded C++等开发工具和.NET Compact Framework框架,从2001到现在SQLSERVER也从2001升级至2005,马上2008又要出来了,SQL SERVER CE也从1.0升级至3.1版本,随着每一次的更新升级,数据同步技术变得更快,并且能更好地处理丢失的数据.现在,合并复制代表着一种最高级的技术,在这竞争日趋激烈的网络中,没有其他的数据同步解决方案能有像合并复制这样的深度和性能.
既然这样,那我们在使用SQL Server CE数据同步的时候有其他选择么?答案是肯定的.
(1)在.NET Compact Framework下,我们可以使用ADO.NET直接与SQL SERVER 进行连接,在局域网中,这或许是一种最佳的解决方案,但你能让你的移动设备时时刻刻都连接在局域网中吗?
(2)第二种方法是RDA,它像是合并复制的弟弟一样,它在SQL SERVER端几乎不用做任何配置,你只需写代码让它用pull方法从数据库中pull数据,然后用push方法将数据push回去,但是它不根据服务器端数据的变化,因此每次你都得将全部数据pull过来,全部数据push回去.
(3)第三种方法是使用webservice,你可以建立一个自定义的xml文件,将webservice中传输的数据序列化到DataSet当中,然后将DataSet的数据写入到XML文件当中去,这种解决方案能够解决前面两种只针对SQL SERVER数据库的,这种方法你还可以连接到其他类型的数据库比如Orcacle or DB2,不过你所要做的工作是编写数千行代码来实现这个,并且XML在处理大数据量时的效率并不尽如人意.
情景:
当你意识到合并复制在你的SQL SERVER 数据与SQL SERVER CE同步的重要性时,下面的这几个案例或许能够阐明这项技术能给你解决方案带来的价值.
(案例主要讲解windows mobile在各个领域的应用,以及合并复制在mobile的数据与服务器的数据同步时所起的作用,因为案例较多,由于时间的关系这边就不一一翻译了,个人认为这些案例对我们的用处不大)