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 消息。
SQL Anywhere 的 blob_threshold 选项使您可以进一步控制长值的复制。任何长度超过 blob_threshold 选项的值都会像 BLOB 值那样进行复制。请参见blob_threshold 选项 [SQL Remote]。
Verify_threshold 数据库选项可防止验证长值(在复制的 UPDATE 语句的 VERIFY 子句中)。该选项的缺省值为 1000。如果列的数据类型比该阈值长,则当复制 UPDATE 语句时将不会验证列的旧值。这样可以减小 SQL Remote 消息的大小,但弊端是检测不到冲突的长值更新。
在将 verify_threshold 用于减小消息大小时,可使用以下方法检测冲突。
配置您的数据库,以便在更新 BLOB 时,也会更新同一表中的 last_modified 列。
配置您的发布,以便 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 的消息)。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |