0

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

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

客户端在需要同步时执行存储过程。存储的过程然后命中主服务器并告诉它同步正在开始。主服务器使用代理服务来促进同步。

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

最后,主服务器将所有新数据下推到客户端,在此过程中重新加密所有内容。由于客户端和主服务器都使用身份列,我们重新设置密钥以使它们保持同步。

那里还有一些步骤,以及一些额外的服务器,我们在其中进行更多的数据变异。客户端基本上会触发存储的过程,然后进入“同步...”状态。我们希望将有意义的信息反馈给客户,以便他们知道同步期间的位置。最初,我们打算在 Broker Services 运行时将更新记录从主服务器插入到客户端。然后,客户端每秒会查询该表一次或两次。

然后我发现了查询通知事件通知,我不确定在这种情况下使用哪个最有意义。我已经看到如何使用 C# 接收通知(客户端是用什么编写的),但还没有看到如何使用事件通知来做到这一点。

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

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

4

1 回答 1

0

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

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

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

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

于 2015-06-17T18:29:19.950 回答