【问题标题】:How to use batching with custom change tracking in Sync Framework 2.1?如何在 Sync Framework 2.1 中使用批处理和自定义更改跟踪?
【发布时间】:2011-02-05 04:44:46
【问题描述】:

在 Sync Framework 2.1 中,批处理似乎得到了内置支持,因此在某些提供程序中,我们可以只提及批处理大小和假脱机文件位置(以及一些其他属性),并且批处理将得到处理.开发人员不必编写自己的批处理逻辑。

但是,这仅适用于少数提供程序,例如 SqlSyncProvider 或 DbSyncProvider,它们似乎迎合了 SQL 服务器更改跟踪。较早的提供程序,如 ClientSyncProvider 和 DBServerSyncProvider,允许自定义更改跟踪,似乎没有太多增强。知道如何使用新的批处理功能并仍然保留我们的自定义更改跟踪逻辑吗?

我们无法切换到内置的更改跟踪,因为我们的自定义逻辑处理非对称数据库(其中服务器数据库是多租户的,每个客户端数据库都是单租户的)。

【问题讨论】:

    标签: sync microsoft-sync-framework


    【解决方案1】:

    我们最终决定实现我们自己的自定义批处理解决方案 - 在循环中运行同步方法,将 last_sync_anchor 和 new_sync_anchor 之间的差距限制在 500 左右。

    虽然远非理想(与使用字节大小作为限制因素的 MS 实现相比),但它对我们有用,并允许我们坚持我们自定义的更改跟踪和同步实现。

    【讨论】:

    • 嗨 Shenoy 你能解释一下你实现自定义批处理的方式吗?
    • 我们使用增量 sps 的参数来处理它 - 使用批量大小。每次,我们设置一个上限为 100 行,而不是返回上次同步锚点和当前时间之间的所有行 - 在 100 行之后 sp 返回,并且该表的同步锚点设置为最新行的时间戳取回。然后再次为下一批调用同步。这样,整个同步发生在一个循环中,每个循环只选择最大数量的行。如果同步由于某种原因(主要是网络)在两者之间停止,则只有正在进行的最后一批丢失。
    【解决方案2】:

    批处理仅由 SqlSyncProvider 内置支持。您可以通过设置 MemoryDataCacheSize 属性在一定程度上控制 DbSyncProvider 中的批处理。但是坏消息是,如果您使用的是早期版本,您将没有太多选择...

    【讨论】:

    • 我们有自定义逻辑,具有多个单租户数据库到单个多租户数据库同步。这不能通过使用 SqlSyncprovider 来处理 - 我们将不得不使用我们现有的逻辑。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2013-03-08
    相关资源
    最近更新 更多