复制经过过滤的数据子集:合并复制还是事务复制?

Posted

技术标签:

【中文标题】复制经过过滤的数据子集:合并复制还是事务复制?【英文标题】:Replicate a filtered subset of data: Merge or Transactional replication? 【发布时间】:2015-01-15 22:32:14 【问题描述】:

首先感谢您的阅读。

我需要复制基于连接过滤器的数据子集;基于与另一个表的连接进行过滤(Microsoft:“使用连接过滤器,您可以将行过滤器从一个已发布的表扩展到另一个。”)。这是设置:

SQL Server 2012; 事务复制订阅上的复制源 复制需要是单向同步(从发布者到订阅者); 只有一个订阅者/订阅者; 事务不多的小数据集; WAN 网络。

到目前为止我所建立的:

选项 1 - 创建视图并通过事务复制将其复制到表中。

优点:没有使用触发器,

缺点:不复制键、约束等对象

选项 2 - 将合并复制与加入过滤器一起使用并设置 @subscriber_upload_options = 2(仅限下载)。

优点:本机 MS 功能,复制所有对象

缺点:合并复制使用触发器,批量加载时不会触发这些触发器。

这两种方法的结果完全相同。但是技术有所不同,例如使用的不同代理。据我了解,合并复制特别适用于服务器 - 客户端架构,这不是我的情况,但..它可以工作..

因为结果是一样的,我有点怀疑我应该遵循哪种方法。我希望您能给我一些考虑或建议我应该遵循哪种方法。

【问题讨论】:

关于 Technet,您应该在过滤的情况下使用合并复制:'需要数据过滤,以便订阅者接收不同的数据分区。' 我也一直在看,但还没来得及回复。您正在复制的网络如何?局域网、广域网、***? @BrandonWilliams 非常感谢你。网络是广域网 【参考方案1】:

对于这个问题中给出的设置,事务和合并复制类型都很好。 您需要考虑的唯一事项是:

如果将数据传输到订阅服务器的延迟应该最小,请选择事务复制。 如果您需要访问中间数据状态,请选择事务复制。 例如,如果一行更改五次,事务复制允许应用程序响应每个更改(例如触发触发器),而不仅仅是对该行的净数据更改。

但是,您为应用程序选择的复制类型取决于许多因素。

以下是 docs.microsoft.com 上相关文章的链接:

"Types of Replication" "Transactional Replication" "Merge Replication"

【讨论】:

以上是关于复制经过过滤的数据子集:合并复制还是事务复制?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过字符串的子集过滤数据框? [复制]

重新发布时合并复制未通过事务复制接收更新

将行的子集从一个表复制到另一个表,过滤两列

SQL Server 事务复制分发到订阅同步慢

在 SQL Server 2008 R2 事务复制中筛选列数据

Python:如何合并两个不同大小的数据框? [复制]