我有一个在客户端上运行的本地 SQL Server 2014 Express 实例(实际上是几百个)。客户端将数据同步到运行 SQL Server 2012 Enterprise 的服务器。基础设施大致如下:
Client ---> Master Server-->Server A && Server B
客户端在需要同步时执行存储过程。存储的过程然后命中主服务器并告诉它同步正在开始。主服务器使用代理服务来促进同步。
当同步开始时,主服务器从客户端提取所有更改的记录并将它们存储在服务器上的相应表中。然后,它获取该数据的一个子集,对其进行转换并将其推送到服务器 A。然后它在服务器 A 上提取任何新数据,对其进行转换并插入到主服务器中。使用从主服务器到服务器 B 的不同数据子集重复此过程。
最后,主服务器将所有新数据下推到客户端,在此过程中重新加密所有内容。由于客户端和主服务器都使用身份列,我们重新设置密钥以使它们保持同步。
那里还有一些步骤,以及一些额外的服务器,我们在其中进行更多的数据变异。客户端基本上会触发存储的过程,然后进入“同步...”状态。我们希望将有意义的信息反馈给客户,以便他们知道同步期间的位置。最初,我们打算在 Broker Services 运行时将更新记录从主服务器插入到客户端。然后,客户端每秒会查询该表一次或两次。
然后我发现了查询通知和事件通知,我不确定在这种情况下使用哪个最有意义。我已经看到如何使用 C# 接收通知(客户端是用什么编写的),但还没有看到如何使用事件通知来做到这一点。
但是,客户端应用程序在本地数据库中执行存储过程。然后该数据库 ping 主服务器。如果客户端使用指向本地数据库的SqlDependency,我是否仍可以使用其中一种解决方案(听起来像查询通知是要走的路) ?我可以通过本地数据库从主服务器向客户端发送通知吗?
我是否偏离了我想尝试的方向?