我正在开发一个 Windows 窗体应用程序,该应用程序在 Microsoft Azure 开发服务托管的云 SQL 服务上运行。如果没有能力物理上拥有一个接收应用程序,这将允许我利用套接字,这是一个重要的陷阱,因为我的应用程序将严重依赖于专用数据库,所以我更希望能够不断检查数据库的更改和根据匹配条件的行条目提醒当前用户。
我在一些博客/帖子上读到,轮询(是一种可能的解决方案)是一件不好的事情。那么,应该考虑什么方法呢?
为了澄清这个问题,您希望客户端在数据库中的某些数据发生更改时接收更新。
SQL Server 2005 和 2008do支持数据更改时通知客户端的概念(MSDN http://msdn.microsoft.com/en-us/library/ms175110(v=sql.105).aspx)。然而,this https://stackoverflow.com/questions/9880091/monitor-data-changes-in-sql-azureSO问题似乎表明目前SQL azure中不存在此功能。这意味着您有几个选择:
-
轮询数据库本身
- 此选项可让您降低成本,因为您已经拥有所需的一切。当然,缺点是您要以相对频繁的间隔执行(可能很大的)查询。如果有足够的客户端,由于涉及的负载,速度会大大减慢。如果您有价格/转让方案,它也可能会变得昂贵。
-
围绕数据库包装一个服务并与之对话
- 这可以与轮询一起使用,但在使用推送技术(如套接字或 WebSockets)时效果更好。这当然会产生额外的前期成本,但允许您控制接收哪些更新以及何时接收更新。理想情况下,该服务将在内存中保留数据库的副本,用于服务客户端请求,同时自行更新实际数据库。这可以最大限度地减少对数据库的查询(速度很慢)。
只有你知道正确的答案,但我会选择第二个。当您需要超越简单查询的功能时,它将具有更高的性能、更好的可扩展性并且更具可扩展性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)