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

本文关键字:数据库 通知 别后 客户端 | 更新日期: 2023-09-27 17:56:40

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

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

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

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

最后,主服务器将所有新数据推送到客户端,并在此过程中重新生成所有内容。由于客户端和主服务器都使用标识列,因此我们会重新生成密钥以使它们保持同步。

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

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

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

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

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

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

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

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

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