我正在开发一个Windows窗体应用程序,它运行在由微软Azure开发服务托管的云SQL服务上。如果没有物理上允许我使用套接字的接收应用程序的能力,这是一个重要的陷阱,因为我的应用程序将严重依赖于专用数据库,所以我宁愿有能力不断检查数据库的变化,并根据符合标准的行条目提醒当前用户。
我在一些博客/帖子上读到投票(是一种可能的解决方案)是一件不好的事情。那么,应该考虑什么方法呢?
为了澄清这个问题,您希望客户端在数据库中的某些数据更改时接收更新。
SQL Server 2005和2008 do支持数据更改(MSDN)时通知客户端的概念。然而,这个SO问题似乎表明,目前SQL azure中还没有这个特性。这意味着您有几个选项:
-
轮询数据库本身
- 这个选项可以让你降低成本,因为你已经拥有了你需要的一切。当然,缺点是您需要以相对频繁的间隔执行(可能很大的)查询。如果有足够的客户端,由于所涉及的负载,这将大大降低速度。如果你有一个价格/转移方案,它也可能是昂贵的。
-
在数据库周围封装一个服务并与之通信
- 这可以与轮询一起使用,但如果使用推送技术(如socket或WebSockets)则更好。这当然需要额外的前期成本,但允许您控制何时接收哪些更新。理想情况下,此服务将在内存中保留用于服务客户机请求的数据库副本,同时自己更新实际的DB。这使得对数据库的查询(速度很慢)保持在最低限度。
只有你知道这个问题的正确答案,但我还是选第二个。当您需要超越简单查询的功能时,它将具有更高的性能、更好的可伸缩性和更强的可扩展性。