客户端从间接级别后面的数据库接收通知

时间:2015-06-16 06:05:40

标签: c# sql-server-2012 service-broker data-synchronization sql-server-2014-express

我在客户端上运行了一个本地SQL Server 2014 Express实例(实际上有几百个)。客户端将数据同步到运行SQL Server 2012 Enterprise的服务器。基础设施就是这样的:

Client ---> Master Server-->Server A && Server B

客户端在需要同步时执行存储过程。然后存储的proc命中主服务器并告诉它正在启动同步。主服务器使用Broker Services来促进同步。

当同步开始时,主服务器从客户端提取所有已更改的记录,并将它们存储在服务器上的相应表中。然后,它会获取该数据的一部分,将其转换并将其推送到服务器A.然后,它会在服务器A上提取任何新数据,将其转换并插入主服务器。使用从主服务器到服务器B的不同数据子集重复此过程。

最后,主服务器将所有新数据下推到客户端,重新键入流程中的所有内容。由于客户端和主服务器都使用标识列,因此我们重新键入以使它们保持同步。

还有一些步骤,以及一些我们进行更多数据突变的额外服务器。客户端基本上触发存储过程,然后进入同步..."州。我们希望向客户提供有意义的信息,以便他们知道在同步过程中它们的位置。最初,我们只是在Broker Services运行时将更新记录从主服务器插入到客户端。然后,客户端将每秒查询该表一次或两次。

然后我发现Query NotificationsEvent Notifications我不确定在这种情况下使用哪个最有意义。我已经了解了如何使用C#(客户端编写的内容)接收通知,但还没有看到如何使用事件通知执行此操作。

但是,客户端应用程序在本地数据库中执行存储过程。然后该数据库ping主服务器。如果客户端使用SqlDependency指向本地数据库,我仍然可以使用这些解决方案之一(听起来像查询通知是要走的路)吗?我可以通过本地数据库将通知从主服务器传送到客户端吗?

我是否会偏离我想要尝试的方向?

1 个答案:

答案 0 :(得分:0)

事件通知主要用于DDL更改。您可以在修改表,添加新过程,更改服务器配置等等时获取通知。我怀疑是你想要的那种通知。

查询通知用于缓存失效。客户端可以使用它来了解何时刷新显示,因为表已更新。

虽然事件通知和查询通知都可以远程传递通知,但我认为不需要您的方案。在我看来,您可以使用查询通知来避免现在的1-2秒。你已经走在正确的轨道上,SqlDependency是正确的方法。

您还可以在查询通知无效的缓存层中检查包含Linq(和实体框架)调用的https://github.com/rusanu/linqtocache