代码之家  ›  专栏  ›  技术社区  ›  0x49D1

如何在同步框架中分割同步过程

  •  0
  • 0x49D1  · 技术社区  · 15 年前

    我正在使用同步框架将移动设备上的SQL Server 2008数据库与SQLCE同步。除了一些问题外,一切都很好。其中之一是:
    如果我想同步1000行或更多行,我会在移动设备上得到内存不足异常(同步完成得很好,因为在同步完成之后,我会检查一些行的数据,它看起来是同步的)。我认为移动设备和服务器之间的XML可能太大了(对于100行,Evrth工作得很好),这就是为什么我问如何分割发送的数据。但也许我错了。我没有找到任何关于这个的资源,所以我不知道什么可以消耗这么多的内存,只需向紧凑型数据库添加60KB。

    1 回复  |  直到 14 年前
        1
  •  1
  •   nj.    15 年前

    您需要实现某种类型的批处理。

    这里展示了一个相当幼稚的版本: http://msdn.microsoft.com/en-us/library/bb902828.aspx .

    我看到你对一些丝线很感兴趣。如果这将过滤掉一些行,或者说大量行,我建议您编写自己的批处理逻辑。我们当前使用的那个将@sync_new_received_锚定设置为要同步的@sync_batch_size:th行的锚定。

    在相当简单的方式下,逻辑看起来如下:

    SELECT @sync_new_received_anchor = MAX(ThisBatch.ChangeVersion) 
        FROM (SELECT TOP (@sync_batch_size) CT.SYS_CHANGE_VERSION AS ChangeVersion 
            FROM TabletoSync
                 INNER JOIN CHANGETABLE(CHANGES [TabletoSync],
                                    @sync_last_received_anchor) AS CT 
                ON TabletoSync. TabletoSyncID = CT. TabletoSyncID 
                WHERE TabletoSync.FilterColumn = @ToClient
                ORDER BY CT.SYS_CHANGE_VERSION ASC) AS ThisBatch