首页 > 范文大全 > 正文

MobiLink的数据同步技术研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇MobiLink的数据同步技术研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:论文主要研究了基于mobilink数据同步技术及其应用,在基于MobiLink技术的基础上,运用Java语言学习编写比较通用的同步逻辑脚本,并将同步技术应用于UltraLite数据库来开发应用程序。

关键词:同步;脚本;MobiLink;UltraLite;Java

中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)04-0804-03

Research on Data Synchronization Technology Based on MobiLink

ZHU Wei

(School of Software Engineering, Tongji University, Shanghai 201804, China)

Abstract: The focus of this thesis is to study the technique and application of, with reference to MobiLink, Data Synchronization, based on MobiLink technique, this thesis is to learn to create a commonly used synchronized logical script by implementing Java Language, and at the same time refer to several applications of implementation of synchronization technique on development of UltraLite Database.

Key words: synchronize; script; MobiLink; UltraLite; Java

目前,人们逐渐意识到了融合移动计算技术的电子商务将具有更大的潜力,移动电子商务的市场前景普遍被业内人士看好。因此,对于多数企业来说实现移动电子商务已是必然趋势。SQL Anywhere Studio正是为此目的而推出的。它包括一套完整的技术――用以在企业系统和远程设备之间进行可伸缩的、双向的电子商务信息的同步。经优化的SQL Anywhere同步技术既可用于偶尔连接的环境中也可用于近乎实时的环境中。这些技术为远程和移动用户在同步、异步、无线、拨号和Internet协议上的安全信息通信提供了强有力的保证。SQL Anywhere Studio中包括了一个MobiLink服务器。MobiLink是基于会话的同步系统,它允许在称作统一数据库的主数据库和多个远程数据库之间进行双向同步。

1 同步技术基础

1.1 同步概述

数据同步,就是在物理上完全不同的数据库之间共享数据。当应用程序在任一数据库中修改共享数据时,就会将所做的更改传播到同步系统中的其它数据库。同步结束的时候,数据库之间含有相同的数据。

数据同步的一大优点是,可以在本地访问数据,而不用通过与单个统一数据库之间的连接来获取数据。这样,在远程网络连接中断,或总部数据无效时,仍然可以访问数据。

同步的第二个优点在于可以缩短数据请求的响应时间。一是检索速度更快,无需访问广域网。另外,本地处理减轻了统一数据库服务器的负载,进而缓解了对处理器时间的争用。

1.2 统一数据库和远程数据库

统一数据库是包含所有数据的数据库,通常称为企业级数据库。它包含了要同步的所有数据它的物理位置一般都是固定的。

远程数据库是与统一数据库交换同步消息的数据库,目前对于MobiLink服务器来说受支持的产品主要是Adaptive Server Anywhere和UltraLite数据库。远程数据库可能会共享统一数据库中的全部或部分数据。

2 MobiLink同步与设计

2.1 基于时间戳的同步

时间戳方法是可以进行高效的同步的最实用的通用技术。此项技术涉及跟踪每个用户上次进行同步的时间,并使用此信息控制下载到每个远程数据库的行。MobiLink保留了一个用以说明每个MobiLink用户上一次下载数据的时间的时间戳值。

2.2 快照同步

表的快照同步是指完全下载表中的所有相关行,而不考虑这些行以前是否已经下载。这是最简单的同步方法,但会引起大量的不必要的数据集交换,从而导致性能下降。

2.3 维护唯一主键

2.3.1 使用通用唯一ID(UUID)

通过使用newid( )函数为主键创建通用唯一值,可以确保Adaptive Server Anywhere数据库中的主键是唯一的。

2.3.2 使用全局自动增量

在Adaptive Server Anywhere和UltraLite数据库中,您可以将缺省列值设置为GLOBAL AUTOINCREMENT。您可以在需要使用唯一值的任何列中使用此缺省值。

2.3.3 用键池维护

解决此问题的一个有效方法是为数据库的每个用户指派一个主键值池,以便在需要时进行指派。具体实现方法是:① 在统一数据库和每个远程数据库中添加一个新表来保存新的主键池。② 编写存储过程以确保为每个用户都指派了足够多的新标识值。③ 编写download_cursor脚本。④ 修改将使用远程数据库的应用程序,以便在用户插入新行时应用程序从相应的池中选择使用的值。⑤ 编写upload_cursor脚本。⑥编写end_upload脚本以调用用于维护值池的存储过程。

2.4 冲突处理

冲突处理是应用程序应该包含的一部分,而且冲突允许并发,甚至在无锁定的状态下仍然如此。每当在远程数据库中更新行时,系统将保留最近一次同步时该行包含的值的副本。在进行下一次同步时,远程数据库中将不仅包含现在的值,而且还包含上次同步时相应值的记录。在客户端向MobiLink同步服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值,而且还将包含原值的副本。

2.5 处理删除

从统一数据库中删除行时,需要对该行进行记录,以便可以从任何包含该行的远程数据库中删除该行。有一项技术是不删除该行。可以更改该行中的状态列,将不需要的数据标记为非活动。在同步完成时对标记为非活动的数据进行删除。另一种技术是用一个影子表来存储被删除的行的主键值。删除一行后,触发器将填充影子表。

2.6 处理失败的下载

必须在下载事务中维护有关下载了哪些内容的簿记信息。该信息将随应用于远程数据库的下载一起自动更新。

2.7 远程数据库中的模式更改

在远程数据库的模式发生更改时,您需要重新生成UltraLite数据库,并创建新的应用程序。最常见的模式更改包括向现有表中添加新列或向数据库中添加新表。

对于向远程数据库中添加新表,唯一的变化是ml_table中将出现一个新行,并且有一组与新表相对应的脚本。

3 使用Java语言编写同步脚本

3.1 设置Java同步逻辑

在安装SQL Anywhere Studio时,安装程序将自动设置MobiLink Java API类的位置。在启动MobiLink同步服务器时,服务器将自动将这些类包含在类路径中。MobiLink使用SANYSH*环境变量确定共享组件路径。

通过以下步骤来实现Java同步逻辑脚本:

1) 创建自己的脚本类。为每个所需的同步脚本编写方法。每个包含非静态方法的类都应该包含构造函数。在第一次调用每个类中的方法时,MobiLink同步服务器将自动创建该类的一个实例。

2) 在统一数据库中,为每个脚本调用的程序包、类和方法指定名称。每个脚本版本中只允许存在一个类。此信息存储在MobiLink系统表中。

3) 设置使用Java同步逻辑中至关重要的部分是建立类路径以告知虚拟机到哪里寻找Java类。

3.2 编写Java同步逻辑

在编写具体的Java脚本时注意以下三个方面:

3.2.1 类实例

MobiLink同步服务器在连接级别实例化类。当到达某个已经为其编写了非静态Java方法的事件时,如果在现有的连接上没有构造类,则MobiLink同步服务器将自动进行构造。对于每个数据库连接,一旦类经过实例化,该类将持续存在直到连接关闭。

3.2.2 事务

有关事务的一般规则可以应用于Java方法。数据库事务的启动和运行时间对同步进程来说至关重要。事务必须由MobiLink同步服务器启动和结束。在Java方法中的同步连接中显式提交或回退事务将破坏同步进程的完整性且可能导致错误。这些规则只应用于由MobiLink同步服务器创建的数据库连接,特别是由方法返回的SQL语句。

3.2.3 方法

可以为每个同步事件实现一种方法。这些方法必须是公共的。方法名要与在统一数据库中ml_script表中指定的名称匹配。另外,MobiLink同步脚本不允许重载方法。

4 UltraLite数据库设计

4.1 UltraLite的MobiLink同步

采用SQL Anywhere Studio中提供的UltraLite技术构建的应用程序,只要含有对适当的MobiLink同步函数的调用,就自动支持MobiLink。SQL Anywhere Studio中包含的UltraLite开发工具在您创建UltraLite应用程序时,将自动包含同步逻辑。UltraLite应用程序和库将在应用程序端处理同步操作。因此在编写UltraLite应用程序的时候几乎不用考虑编写同步逻辑脚本。

UltraLite运行时库自动跟踪与统一数据库每次同步时对UltraLite数据库所做的更改。在同步UltraLite数据库时,自上次同步以来所做的所有更改都被上载进行同步。

4.2 UltraLite开发过程

开发过程的基本功能对所有开发模型是通用的。下面的步骤说明结合图示总结了关键功能。

1) 创建参考数据库,它含有将包括在应用程序中的表的超集。它可能还包含应用程序的代表数据。该参考数据库仅在开发过程中是必需的,最终应用程序并不需要它。

2) 参考数据库的特定表中添加SQL语句。完成这一步的方法取决于选择的开发模型:如果使用的是C++ API或Java,则使用Sybase Central或存储过程将这些语句添加到数据库中;如果使用的是嵌入式SQL,则SQL预处理器将这些语句添加到参考数据库中。

3) 运行UltraLite生成器,它产生源文件,这些文件中包括执行SQL语句所需的代码和定义UltraLite应用程序的数据库模式所需的代码。该生成的代码包括UltraLite运行时库中的函数调用。

4) 创建应用程序源文件。如果使用的是嵌入式SQL,则SQL预处理器将读取.sqc文件,并将SQL语句插入到参考数据库中。在应用程序源文件中要含有对适当的MobiLink同步函数的调用,以实现同步。

5) 将应用程序源文件和生成的源文件一起编译,生成UltraLite应用程序。

4.3 使用Java设计UltraLite应用程序

使用Java开发UltraLite应用程序需要使用JDBC来访问数据库。开发过程和上面介绍的通用开发过程是一样的。这小节主要讨论在编写应用程序中的关键步骤。

1) 首先需要导入所需的程序包以及必要的Java类和UltraLite提供的JDBC扩展类和接口。同时还需要导入UltraLite运行时类和包含SQL语句字符串的生成接口。

2) 应用程序中使用的SQL语句作为接口存储在单独的文件中。类必须声明它实现该接口才能使用项目的这些SQL语句。该类名基于向数据库添加这些语句时所提供的语句名。

3) 在对数据库访问前,先要通过JDBC函数DriverManager.getConnection连接到数据库,该连接是使用数据库类的实例建立的。数据库的名称必须和生成的Java类的名称相匹配。

4) 在生产应用程序中,通常不应插入示例数据,而应通过同步从统一数据库中获得数据的初始副本。在开发的早期阶段,直接插入数据可简化您的工作。

5) 执行对数据库中的数据访问时,主要通过执行SQL语句进行。Statement对象用于执行不带任何参数的简单SQL命令, PreparedStatement对象用于执行带有参数的SQL命令。对于有多个结果的结果集往往实现一个循环,通过调用next()方法按顺序获取查询结果。

6) 同步函数时,应先设置好同步参数:用户名、口令、脚本版本、同步流、主机名等。

7) 同步时可以使用进度查看器来显示同步进度。UltraLite运行时库包括两个进度查看器类,它们提供了同步监控的实现以及最终用户取消同步的能力。进度查看器类如下:

ianywhere.ultralite.ui.SynchProgressViewer:重型AWT版本。

ianywhere.ultralite.ui.SynchProgressViewer:与Swing线程模型有关的Swing版本的查看器。

这两个类的使用方法相同。查看器将显示一个有模式对话框或无模式对话框,在对话框中显示一系列消息和一个进度条。在同步过程中,消息和进度条都将得到更新。查看器还提供一个" 取消" 按钮。如果用户单击" 取消" 按钮,同步将停止,并抛出SQL例外SQLE_INTERRUPTED。

8) 程序结束时,需要关闭连接。

5 结束语

本文提出的基于MobiLink的数据同步技术能利用本地数据存储,使用户可以以离线方式访问信息,并在方便的时候或接通网络的情况下实施数据同步,以适应不同情况。基于Java编写的通用同步逻辑脚本,具有开发速度快、运作效率高等优点,在移动数据库系统中具有非常重要的现实意义。研究的下一步可以将数据同步技术与多个数据库实现无缝对接,进而提高其易用性和通用性。

参考文献:

[1] 吴晓东.Java程序设计基础[M].北京:清华大学出版社,2002,5.

[2] 辛运帏,饶一梅,张钧.Java程序设计[M]北京:清华大学出版社,2001,9.

[3] 张洪斌.Jbuilder 9集成开发实例解析[M]北京:机械工业出版社,2004,2.

[4] 赵杰,李涛.SQL Server数据库管理.设计与实现教程[M].北京:清华大学出版社,2004,3.

[5] 温得尔,罗伯茨.Java软件开发[M].2版.北京:人民邮电出版社,2004,2.

[6] 朱福喜,唐晓军.Java程序设计技巧与开发实例[M].人民邮电出版社,2004,2.