如何从数据库中优雅地轮询/提取信息?

时间:2013-07-11 08:16:34

标签: sql sql-server database algorithm database-design

我目前正在开始一个新的个人项目。我有一个数据库,可以在用户登录我的网页时跟踪他们。它显示他们登录和注销的时间。它使用SQL Server 2008。

我想要做的是,每当用户登录时,我网页顶部的滚动条就会提醒我。我创建了一个仪表板来跟踪我的很多网站统计数据,这是我认为非常酷的东西。没用,最终 - 但它会经常从我身上产生一个“heheh”,为什么不呢?

现在,我从来没有尝试构建这样的东西(这就是我构建它的原因!)所以我在几种不同的设计方法之间徘徊。看起来我可以使用http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx重复轮询数据库服务器,只需编写查询来查找当前登录用户的集合并显示该池的任何添加内容。如果这是正确的道路,那么我将会对如何使用它进行更深入的评论。

从高层次的角度来看,似乎不是反复轮询数据库,而是在更改时让数据库将消息推送到我的Web服务器会更有效。这可能吗?如果是这样,怎么样?

为了论证,并且为了使这个讨论更加具体,我们假设我们的SQL Server表的结构如下(但可以根据需要随意进行任何改进或更改!):

Users {
ID Primary Key
Username(Varchar 100)
Password
}

LogInOrOutLogs {
SessionID Primary Key
UserID (Foreign Key)
TimeLoggedIn (DateTime)
TimeLoggedOut (DateTime)
CurrentlyLoggedIn(Bool)
}

对所有技术,所有数据库结构,所有设计理念开放。疯了!仅有要求:您有一个用户数据库,在登录和注销时会更新。尽可能优雅,简单地在Web服务器上显示信息。

非常感谢,期待阅读人们解决此问题的方案。

1 个答案:

答案 0 :(得分:1)

你看过Hibernate吗?这是SQL数据库上的一个elegante对象层。 然后,您可以在数据库上推送触发器以推送事件。当您有数据事件时,您可以通过长查询将其发送到您的Web应用程序(这是一个非常非常长的超时的ajax查询,在收到事件后重新发送查询)。

一个疯狂的设计也应该使用双向messaging system,一个用于传入DB的消息,另一个用于从DB输出。

如果你真的喜欢疯狂的东西,你可以使用嵌入servicemix - redhatfuse的DB4O数据库(SQL Server的缓存)进行缓存。使用servicemix有一个简单的方法,因为预部署的代理(activemq)和融合了它的漂亮的结构系统。