sql-server - 复制过滤后的数据子集 : Merge or Transactional replication?

标签 sql-server sql-server-2012 replication merge-replication transactional-replication

首先感谢阅读。

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

  • SQL 服务器 2012;
  • 订阅事务复制的复制源
  • 复制需要是单向同步(从发布者到订阅者);
  • 只有一个订户/订阅;
  • 小数据集,交易不多;
  • 广域网。

到目前为止我建立了什么:

选项 1 - 创建 View 并通过事务复制将它们复制到表中。

  • 优点:不使用触发器,

  • 缺点:像key这样的对象,约束没有被复制

选项 2 - 使用合并复制和连接过滤器并设置 @subscriber_upload_options = 2(仅下载)。

  • 优点:原生 MS 功能,所有对象都被复制

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

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

由于结果相同,我有点怀疑我应该采用哪种方法。我希望您能给我一些要点供我考虑或建议我应该遵循哪种方法。

最佳答案

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

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

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

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

关于sql-server - 复制过滤后的数据子集 : Merge or Transactional replication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999358/

相关文章:

sql-server - WSO2 API 管理器 - 使用 SQL Server 进行集群时设置 'CacheId'

mysql - 如何从mysql数据库获取当前时间的数据

mysql - Google Cloud SQL - MySQL 复制

mysql - mysql ndb集群数据节点不同步并且对同一查询的不同响应

PostgreSQL 同步复制一致性

c# - 单个SQL查询处理多个一对多关系,只输出一次结果

.net - TFS 连接错误 - 但服务器/数据库已启动

sql - 从同一列中的两行获取时间跨度

sql-server - 来自多个 SQL 实例/服务器的行计数

sql-server - 如何生成具有开始月份日期和结束月份日期的日历表