WEB开发网
开发学院数据库Sybase SQL Anywhere Studio MobiLink之三 阅读

SQL Anywhere Studio MobiLink之三

 2010-06-10 15:11:59 来源:WEB开发网   
核心提示:分布式数据挑战彼此没有固定联系的分布式数据库无法提供任何全系统锁定的机制,特别是没有任何机制可阻止您插入在两个不同远程数据库中具有相同主键的两行,SQL Anywhere Studio MobiLink之三,从而在将这些行上传到统一数据库时造成主键冲突,解决方案之一是使用由一个普通自动增量列加上数据库标识符组成的复合主

分布式数据挑战

彼此没有固定联系的分布式数据库无法提供任何全系统锁定的机制。特别是没有任何机制可阻止您插入在两个不同远程数据库中具有相同主键的两行,从而在将这些行上传到统一数据库时造成主键冲突。

解决方案之一是使用由一个普通自动增量列加上数据库标识符组成的复合主键来解决不同数据库的自动增量值重叠问题。多列主键使外键定义过于复杂,令应用程序开发人员非常头疼,因此全局惟一标识符(GUID)有时被视为单列替代方案。GUID是具有形如“6F9619FF-8B86-D011-B42D-00C04FC964FF”的128位整型;具有惟一性,但会导致繁冗的数据库索引,同时这些值在调试时很难处理。而另一个解决方案是使用键池,中心服务器在键池处生成和下载唯一键值组,供单个远程数据库随后使用。键池确实是一种可行方案,但合理地实现和管理都非常困难,特别在多级层次结构上更是如此。另外,它们还会造成额外的网络流量。

ASA为全局惟一主键问题提供了一种更好的解决方案:通过GLOBAL AUTOINCREMENT列默认值提供的分区自动增量工具。为各数据库分配以唯一的数据库标识符:1﹑2﹑3等等,并且自动使用该值确定值的哪个分区或范围用于分配数据库的主键值。

这对 Mobile Inspector 应用程序非常重要,因为每个远程数据库的许多表都要频繁插入新行,而且它们都有自动分配或人工分配的主键。如下实例展示了用于在BLOB列中保存手绘草图的 BRI_SKTCH表。分区尺寸设定为2,000,000,也就是说每位检查员都能创建很多草图直至分区用尽。32位的有符号整型主键最大可达2,147,483,647;2,147,483,647除以2,000,000等于1,073,1,073是应用此机制而不产生主键冲突的数据库最大数量。32位的由符号整型用于Mobile Inspector程序;对于其他更大的应用程序,可使用64位无符号整型。

CREATE TABLE BRI_SKTCH (
SKTCH_ID INTEGER NOT NULL DEFAULT
GLOBAL AUTOINCREMENT ( 2000000 ),
STRCTR_ID INTEGER NOT NULL,
SKTCH_TTL VARCHAR ( 45 ) NOT NULL,
SKTCH_DES VARCHAR ( 130 ) NULL,
FILE_NM VARCHAR ( 32 ) NULL,
DEL_FLG_IND BIT NOT NULL DEFAULT 0,
LST_MDFD_TS TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
SKTCH_LOB LONG BINARY NULL,
SKTCH_NBR INTEGER NOT NULL,
SKTCH_SZ_AMT INTEGER NULL,
PRIMARY KEY ( SKTCH_ID ) );

分布式数据的另一挑战就是降低同步过程所需的网络流量。专业同步软件出现前,必须编写应用程序代码来确定需要来回传送的数据。有时这些代码会传输过多数据以确保不遗漏任何数据。其他时候,传输时间刚好和它搜索需要调整的差别一样长。

MobiLink客户端读取远程数据库事务日志来确定必须上传的数据,从而降低了网络流量。只有在上次同步之后插入﹑更新或删除的行才会被发送。另外,假如在两次同步之间,行进行过多次修改,则仅上传最终版本。

当建立下载流时,MobiLink服务器不具备相同的优势。因为它与不同的数据库协同工作,比如Oracle﹑SQL Server和DB2,MobiLink不能访问事务日志。假如您不想每次都下载完整的表,您必须在download_cursor 脚本中编写适当的WHERE子句。

此时即可利用另外一项ASA的特性:用特殊的DEFAULT TIMESTAMP属性定义的时间戳列将在每次更新及插入行时自动更新。先前的CREATE TABLE展示了如何使每个表拥有LST_MDFD_TS 列,该列能保持最新而无需编写触发器。之前的SELECT语句包含 LST_MDFD_TS >= ?谓词,该谓词使下载结果集限于自上次同步后发生变化的那些行。MobiLink 服务器自动将占位符“?”替换为上次同步时间戳的值,因此不必编写任何自定义代码来跟踪各远程数据库同步的时间。

结束语

离开北卡罗莱纳州后,我开始注意路边的工作人员,好奇他们是否正在做检查工作。也许将来的某一天,我能通过他们是否使用移动电脑找到答案。最后一批平板电脑已抵达NC DOT,这是成本关注领域真正的成功标志。假如像Mobile Inspector 这样的应用程序适用于这个领域,则适用于一切环境。

在Mobile Inspector 应用程序方面的工作经历巩固了我近年来学到的两个经验:首先,很容易低估同步设置的复杂性,特别是当它是大型业务应用程序的主要部分时更是如此。其次,关系型数据库数据级的同步简化了设置,因为它把同步逻辑和应用程序代码分开处理,把复杂的数据结构还原到简单的行与列,并利用了像事务提交和列默认值等数据库基本特性。

Tags:SQL Anywhere Studio

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接