我正在尝试在我的组织中为一个备受争议的数据库重新创建linkedin的databus架构。我最初的想法是使用SQL服务器的变更数据捕获(CDC)功能来捕获所有事件,并以与LI“bootstrap”相同的方式将它们发布到外部数据存储区。如果我编写一个服务来不断地汇集cdc表,我可以将它们写入我的bootstrap db然后用一些pub / sub系统发布事件。
我的问题是,是否有人尝试过这样的事情,如果我的上述方法看起来是一种好方法,或者是否有更好的方法来捕获这些事件并发布它们?
感谢。
修改:[添加详细信息]
我还没有完全决定辅助数据存储区。至少在短期内,它可能是另一台服务器上的另一个SQL Server 2008实例。此辅助存储的主要目的之一是从主服务器上卸载负载。我们的主数据库已经变得非常大(> 2.5TB)并且增加了额外的负载将是不受欢迎的。如果我可以实现这种架构,那么额外的收益就是基本上管理复制,从主服务器中承担大部分复制责任。
理想情况下,我甚至不想使用CDC。我觉得这是一项很棒的技术,但它确实在本地存储了这些变化,而且从我读到的内容来看,它会导致服务器受到性能损失。但是,目前看来这似乎是我最好的选择。
编辑2:[进一步处理详情]
我试图实现的确与复制非常相似。在这个辅助服务器上,我要做的是从基础数据库的副本和一组用于跟踪更改的表开始。然后,我将有一个服务来监视CDC表并将这些事件移动到新数据库,从源清除它们,并将更改应用于第二个服务器基本副本。
下一个组件将是一个发布/订阅服务,它将发布所有已发布的更改事件,并且任何消费者都可以选择订阅以获取这些更改事件。完整的数据库副本将用于“引导”新用户,因为他们可以在开始获取更改事件之前获得完整的最新数据库。跟踪表还将用于在消费者离线并错过事件时获取增量。
客户可以根据需要应用规则来翻译数据。第一个应用程序将纯粹创建原始数据库的只读副本。未来的计划包括对数据进行去标准化并转换为其他格式,例如MongoDb集合。
如果可以在远程服务器上维护CDC表,那么第一部分可能最简单。但是,我认为没有办法做到这一点。
我知道这听起来很复杂,但它会解决一个真正的问题,而这种问题显然不是很常见的问题,而这些问题在目前并非罕见。
希望这有帮助。