Collection Contents 上一页 下一页 PDF

MobiLink 管理指南

同步技术

快照同步


基于时间戳的同步适合于大多数同步。不过,有时候可能需要更新数据快照。

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

您可以使用快照同步下载表中的所有行,或者将此方法与在远程数据库之间对行进行分区中描述的行分区方法结合使用。

何时使用快照同步 

快照同步最适合用于同时具有以下两种特征的表。

保存了一个外汇汇率列表的表将非常适合采用这种方法,因为货币的币种相对较少,而大多数汇率的变动是非常频繁的。根据公司业务的特点,包含价格、利率列表或最新新闻条目的表都适合采用这种方法。

实现基于快照的同步:

  1. 除非远程用户更新值,否则不要定义上载脚本。

  2. 如果表中可能有要删除的行,请编写 download_delete_cursor 脚本,删除远程表中的所有行,或至少删除不再需要的所有行。不要从统一数据库中删除行;而应将其标记为待删除。而且在从远程数据库中删除行时,必须清楚了解该行中的值。

    有关详细信息,请参见编写 download_delete_cursor 脚本

  3. 编写 download_cursor 脚本,选择要包括在远程表中的所有行。

删除行 

最好不要删除统一数据库中的行,但可以将其标记为待删除。而且在从远程数据库中删除行时,必须清楚了解该行中的值。在 download_cursor 脚本中仅选择未标记的行,在 download_delete_cursor 脚本中仅选择已标记的行。

download_delete_cursor 脚本在 download_cursor 脚本之前执行。如果将要在下载流中包含一行,则在删除列表中不能包含与此行主键值相同的行。在远程数据库接收到下载行时,该下载行将代替具有相同主键值的一个预先存在的行。

有关详细信息,请参见编写用于下载行的脚本

其它可用的删除技术 

您可以允许远程应用程序删除行,而不是使用 download_cursor 脚本从远程数据库中删除行。例如,您可以使用应用程序在同步完成后立即执行 SQL 语句以删除不需要的行。

该应用程序删除的行通常将在下一次同步时上载到 MobiLink 同步服务器,但您可以使用 STOP SYNCHRONIZATION DELETE 语句阻止此上载操作。例如,

STOP SYNCHRONIZATION DELETE;
DELETE FROM table-name
   WHERE expiry_date < CURRENT TIMESTAMP;
COMMIT;
START SYNCHRONIZATION DELETE;

有关删除行的详细信息,请参见编写 download_delete_cursor 脚本

快照示例 

将使用快照同步对示例应用程序中的 ULProduct 表进行维护。此表中的行数较少,因此使用快照同步的开销也较小。

  1. 没有上载脚本。这也反映了不能在远程数据库添加产品的业务决策。

  2. 没有 download_delete_cursor 脚本,反映了未从列表中删除产品这一假设。

  3. download_cursor 脚本选择当前每种产品的产品标识符、价格和名称。如果产品已经存在,则远程表中的价格将被更新。如果产品是新的,则在远程数据表中插入一行。

    SELECT prod_id, price, prod_name
    FROM ULProduct

有关对行很少的表进行快照同步的其它示例,请参见同步 Contact 示例中的销售代表


Collection Contents 上一页 下一页 PDF