【问题标题】:Real-time unidirectional synchronization from sql-server to another data repository从 sql-server 到另一个数据存储库的实时单向同步
【发布时间】:2011-09-18 11:34:32
【问题描述】:

在此门户上的previous question 中,我询问了有关在 SQL Server 和基于键值的数据存储库之间同步数据的一些见解。

代替相同的问题(从 SQL 到 HBase 或任何其他数据库的单向实时同步),我需要注意一些性能和延迟考虑,但没有找到一种非常简单的方法来做到这一点。

  1. 我们有多个 SQL 2008 数据分片,其中数据从各种来源更新并由多个进程同时处理(并且 UI 从相同分片读取)。

  2. 目标是在任何时间点获取选定表中的所有更新,并以几乎实时的方式将它们传输到其他数据源。

  3. SQL 分片的更改量将保持在 100-500 MB 范围内(如果我们保持 1 分钟的频率)。我们不想对 SQL 服务器进行重大更改,因为我们会在迁移完整系统后丢弃它。

  4. 不幸的是,我们的数据访问层在各个层都搞砸了。否则,这将是从两个方向分叉更新的最佳方式。

  5. 触发器会减慢分片并使其处于无响应状态。

  6. 不确定 SQL Server 2008 是否有类似于 SQL Server 2005 的通知服务以及效果如何。

任何其他创新解决方案都会大有帮助。

这里我的问题不是将数据从关系转换为键值形式(这很容易),而是如何实时获取 SQL Server 更新(可以承受1-2 分钟)而不影响用户体验。

【问题讨论】:

    标签: sql-server-2008 ssis sqlbulkcopy data-synchronization


    【解决方案1】:

    【讨论】:

    • 更改跟踪似乎是一个不错的解决方案。不过,还没有找到任何关于高流量服务器性能开销的统计数据。
    • 另一个您可能想要查看的是 Sql Server Change Data Capture。
    【解决方案2】:

    从下到上有数据层:存储、文件系统、db和app。

    最有效的方法是使用存储复制。它对性能几乎没有影响,可以配置为同步或异步,而且不是免费的。您可以通过 google SRDF 或 MirrorView 了解它的概念。

    然后你可以看看文件系统复制。它类似于存储复制,但发生在操作系统/文件系统层,消耗主机系统的资源(CPU、IO、内存)。您可以 google 赛门铁克存储基金会了解更多信息。

    在数据库级别,您可以进行数据库复制/日志传送来复制数据。 SQL server 有这样的功能。

    “最便宜”的解决方案是修改您的应用程序,例如您的 4),但我建议您使用消息队列来复制数据,以尽量减少对性能的影响。

    【讨论】:

      【解决方案3】:

      您可能想要研究的一个选项是SQL Server Integrated Change Tracking(SQL2008 或更高版本的一部分)。这是查找 SQL Server 数据库中发生的更改(包括删除)的一种非常有效的方法,对 SQLDB 的影响很小,不需要触发器,并提供了一种允许您将数据更改移动到的好方法Hadoop。

      完全披露,我在 Cotega 工作,这个 data sync 是我们非常关注的事情。如果这是您感兴趣的方向,我很乐意提供更多帮助。

      【讨论】:

        猜你喜欢
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 2012-02-09
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多