0

在我之前关于此门户的问题中,我询问了有关在 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 分钟的延迟) .

4

3 回答 3

1

你看过 SQL Service Broker 吗?这是一个包含一些信息的链接:http: //blogs.msdn.com/b/sql_service_broker/archive/2008/07/09/real-time-data-integration-with-service-broker-and-other-sql -技术.aspx

于 2011-06-20T07:51:25.427 回答
0

从下到上有数据层:存储、文件系统、数据库和应用程序。

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

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

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

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

于 2011-06-20T08:35:58.107 回答
0

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

完全披露,我在 Cotega 工作,这种数据同步是我们非常关注的事情。如果这是您有兴趣采取的方向,我很乐意提供更多帮助。

于 2014-11-08T16:01:54.417 回答