【问题标题】: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 数据库。

  1. 除了:

    a) 变更数据捕获

    b) SqlDependency

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

【问题讨论】:

    标签: sql-server mongodb sqldependency change-data-capture


    【解决方案1】:

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

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

    【讨论】:

    • LOL /dev/null = mongodb
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      完成之前的答案:

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-28
        • 1970-01-01
        • 2017-11-18
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 2021-03-02
        相关资源
        最近更新 更多