【问题标题】:Sqldependency vs CDC for writing a data replicator from sql server to mongodbSqldependency vs CDC 用于将数据复制器从 sql server 写入 mongodb
【发布时间】:2015-12-18 19:54:50
【问题描述】:
我想编写一个简单的复制器,将数据从 sql server 数据库复制到 mongodb 数据库。
-
除了:
a) 变更数据捕获
b) SqlDependency
- 每个选项对 sql-server db 性能有何影响?
- 如果我在一个表上的写入次数为 50 次/分钟,那么哪个选项会更好,为什么?
- 如果出现问题并且机器/服务器重新启动,哪个选项更适合恢复?
【问题讨论】:
标签:
sql-server
mongodb
sqldependency
change-data-capture
【解决方案1】:
CDC(+Change Tracking)和SqlDependency解决不同的问题,解决不同的场景。 SqlDependency 是一种应用程序的缓存失效机制。它不适合跟踪更改。 CDC 明确针对需要跟踪更改的应用程序。这几乎是唯一可行的跟踪更改的机制。使用跟踪的更改取决于您的应用程序,例如将它们写入/dev/null 或 modngodb(实际上是一样的)。
请先阅读MSDN相关主题,从Track Data Changes开始。
【解决方案2】:
我喜欢 CDC 进行这种类型的操作有几个不同的原因
- 您可以将其配置为捕获网络更改。如果您不在乎给定行在您的捕获间隔内更新了 10 次,那么这就是您要走的路。
- 它会告诉您发生了什么变化。您可以查看在哪个操作中更改了哪些列。
- 您不需要跟踪所有列。如果您不需要将某个列传播到下游数据存储(在您的情况下为 MongoDB),则不要将其包含在跟踪中。
- 它是异步的。 CDC 使用日志阅读器来确定事后发生的变化,因此您无需减慢 CDC 的主要应用程序。
【解决方案3】:
完成之前的答案:
- CDC 在 SQL Server 标准版中不可用
- 一个选项可以是使用表触发器 + Servier Broker(在标准版中可用)。
- 另一个选项可以是使用更改跟踪 (CT) 来监视表更改(在标准版中可用)和自定义监视应用程序将更改传播到 MongoDb。我在生产环境中使用CT实现了一个自制的复制系统,效果很好。根据 MS 的说法,维护 CT 索引的资源成本过高类似于非聚集索引。
希望对你有帮助