Sqldependency vs CDC 用于将数据复制器从 sql 服务器写入 mongodb

Sqldependency vs CDC for writing a data replicator from sql server to mongodb

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

  1. 除了以下选项我还有什么选择:

    a) 更改数据捕获

    b) SqlDependency

  2. 每个选项对 sql-server 数据库性能的影响是什么?
  3. 如果我在 table 上有 50 writes/min,哪个选项更合适,为什么?
  4. 如果出现问题并 machine/server 重新启动,哪个选项更适合恢复?

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

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

出于几个不同的原因,我喜欢 CDC 进行此类操作

  1. 您可以将其配置为捕获净变化。如果您不关心给定行在您的捕获间隔内更新了 10 次,这就是解决方法。
  2. 它会告诉您 发生了什么变化。您可以看到在哪个操作中更改了哪些列。
  3. 您不需要跟踪所有列。如果有一个列不需要传播到下游数据存储(在您的情况下,MongoDB),则不要将其包含在跟踪中。
  4. 它是异步的。 CDC 使用日志 reader 来确定事后发生的变化,因此您无需降低 CDC 的主要应用程序速度。

完成之前的回答:

  • CDC 在 SQL 服务器标准版
  • 中不可用
  • 一种选择是使用 table 触发器 + Servier Broker(在标准版中可用)。
  • 另一种选择是使用更改跟踪 (CT) 来监视 table 更改(在标准版中可用)并使用自定义监视应用程序将更改传播到 MongoDb。我在生产环境中使用 CT 实现了一个自制的复制系统,它工作得很好。根据 MS,维持 CT 指数的资源超支类似于 non-clusterd 指数。

希望对您有所帮助