2013-07-11 46 views
0

我目前正在开始一个新的个人项目。我有一个数据库,用于在用户登录到我的网页时跟踪用户。它显示何时登录和注销。它使用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) 
} 

适用于所有技术,所有数据库结构,所有设计思路。疯了!只有要求:您有一个数据库的用户登录和注销时进行更新。在网页服务器上显示信息的意义,优雅和简单。

非常感谢,期待着解读这个问题的人们解决方案。

+0

不知道是谁把-1放在这个上,但是看起来相当苛刻,因为我给出了一个具体的问题,启动时很有趣。 –

回答

1

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

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

如果你真的很喜欢疯狂的事情,你可以使用嵌入到servicemix - redhatfuse中的DB4O数据库(用于SQL Server的缓存)进行缓存。由于预先部署的代理(activemq),可以轻松使用servicemix,并与其良好的面料系统进行融合。