0

我想编写一个简单的复制器,将数据从 sql server 数据库复制到 mongodb 数据库。

  1. 除了:

    a) 变更数据捕获

    b) SqlDependency

  2. 每个选项对 sql-server db 性能有什么影响?
  3. 如果我在一张表上有 50 次写入/分钟,那么哪个选项会更好,为什么?
  4. 如果出现问题并且机器/服务器重新启动,哪个选项更适合恢复?
4

3 回答 3

1

CDC(+Change Tracking)和SqlDependency解决不同的问题,解决不同的场景。SqlDependency 是一种应用程序的缓存失效机制。它不适合跟踪更改。CDC 明确针对需要跟踪更改的应用程序。它几乎是唯一可行的跟踪变化的机制。使用跟踪的更改取决于您的应用程序,例如将它们写入/dev/null或 modngodb(实际上是一样的)。

请先阅读 MSDN 相关主题,从Track Data Changes开始。

于 2015-12-18T20:01:58.303 回答
1

我喜欢 CDC 进行这种类型的操作有几个不同的原因

  1. 您可以对其进行配置以捕获净变化。如果您不在乎给定的行在您的捕获间隔内更新了 10 次,那么这就是要走的路。
  2. 它告诉你发生了什么变化。您可以查看在哪个操作中更改了哪些列。
  3. 您不需要跟踪所有列。如果有一列您不需要传播到下游数据存储(在您的情况下为 MongoDB),则不要将其包含在跟踪中。
  4. 它是异步的。CDC 使用日志阅读器来确定事后发生的更改,因此您无需减慢 CDC 的主要应用程序。
于 2015-12-19T22:37:28.537 回答
0

要完成以前的答案:

  • CDC 在 SQL Server 标准版中不可用
  • 一种选择是使用表触发器 + Servier Broker(在标准版中可用)。
  • 另一个选项可以是使用更改跟踪 (CT) 来监视表更改(在标准版中可用)和自定义监视应用程序将更改传播到 MongoDb。我在生产环境中使用CT实现了一个自制的复制系统,效果很好。根据 MS,维护 CT 索引的资源成本过高类似于非聚集索引。

希望能帮助到你

于 2016-01-14T21:26:00.970 回答