与数据库保持同步
我们开发的解决方案使用数据库(sqlserver 2005)来实现持久性,因此,所有更新的数据都保存到数据库中,而不是发送到程序中。
我有一个前端(桌面),当前一直在轮询数据库以获取可能随时在某些关键数据上发生的更新,而且我并不是真正的数据库轮询爱好者,并且浪费了CPU周期,而这些工作正在无用地重做。
我们的经理似乎并不介意我们轮询数据库。数据量很小(少于100条记录),间隔很长(1分钟),但是我是一名编码员。我愿意。是否有更好的方法来完成使内存中的数据与数据库中的数据尽可能同步的任务?该系统是使用C3.5开发的。
解决方案
对于情况,这可能是过大的了,但看一下Microsoft Sync Framework可能会很有趣
首先想到的是一个触发器和一个消息队列。
在ASP.NET中,http://msdn.microsoft.com/zh-cn/library/ms178604(VS.80).aspx。
SQL Notification Services将允许我们基于多种协议使数据库回调到应用程序。一种实现方法是让通知服务在可访问的网络共享上创建(或者修改)文件,并让桌面应用程序通过使用FileSystemWatcher进行响应。
有关Notification Services的更多信息,请访问:http://technet.microsoft.com/zh-cn/library/aa226909(SQL.80).aspx
请注意,这可能是解决螺母类型问题的大锤方法。
由于我们使用的是SQL2005,因此可以使用SqlDependency来通知更改。请注意,可以与System.Web.Caching.Cache毫不费力地使用它,尽管它具有名称空间,但在WinForms应用程序中运行得很好。
这也可能是过大的,但也许我们可以实现某种缓存机制。也就是说,将数据写入数据库时,我们可以同时对其进行高速缓存,而当我们尝试从数据库取回数据时,请首先检查高速缓存。