Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器管理 » 使用 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 示例中的销售代表