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

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置 » 了解基于事务日志的复制 » 数据类型

 

BLOB

BLOB 包括 LONG VARCHAR、LONG BINARY、TEXT 和 IMAGE 数据类型。

当 SQL Remote 复制 INSERT 或 UPDATE 语句时,它使用变量来替代 BLOB 值。也就是说,将 BLOB 分成若干片段,并按块复制。在接收者数据库中,这些片段将进行重组(通过使用 SQL 变量)和连接。变量的值由以下形式的一系列语句构成:

SET vble = vble || 'more_stuff';

该变量可使涉及长值的 SQL 语句长度变短,从而使它们能够容纳于单条消息内。

SET 语句是单独的 SQL 语句,因而可将 BLOB 有效地拆分成几个 SQL Remote 消息。

控制 BLOB 的复制

SQL Anywhere 的 blob_threshold 选项使您可以进一步控制长值的复制。任何长度超过 blob_threshold 选项的值都会像 BLOB 值那样进行复制。请参见blob_threshold 选项 [SQL Remote]

使用 verify_threshold 选项最大程度地减小消息大小

Verify_threshold 数据库选项可防止验证长值(在复制的 UPDATE 语句的 VERIFY 子句中)。该选项的缺省值为 1000。如果列的数据类型比该阈值长,则当复制 UPDATE 语句时将不会验证列的旧值。这样可以减小 SQL Remote 消息的大小,但弊端是检测不到冲突的长值更新。

在将 verify_threshold 用于减小消息大小时,可使用以下方法检测冲突。

♦  设置 verify_threshold 时检测 BLOB 值的冲突
  1. 配置您的数据库,以便在更新 BLOB 时,也会更新同一表中的 last_modified 列。

  2. 配置您的发布,以便 last_modified 列能与 BLOB 列一起复制。

    复制 BLOB 列和 last_modified 列时,可对 last_modified 列中的值进行验证。如果与 last_modified 列有冲突,则与 BLOB 列同样有冲突。

请参见verify_threshold 选项 [SQL Remote]

使用工作表避免冗余更新

对 BLOB 的重复更新应在工作表中进行,并将最终版本指派给被复制的表。例如,如果正在进展中的某文档在整天内更新了 20 次并且 SQL Remote 在这一天结束时运行了一次,则将复制所有的 20 次更新。如果该文档的长度为 200 KB,则将发送 4 MB 的消息。

建议使用 document_in_progress 表。当用户修订完文档时,应用程序会将其从 document_in_progress 表移动到复制的表中。由此得到单个更新(200 KB 的消息)。

另请参见