0

直升机,

我已经使用 Comet 实现了一个聊天应用程序。请求在服务器上“挂起”,直到新消息到达。然后,它带着新消息返回客户端,然后再次访问服务器。

我的问题是:

为了检查新消息,我每 600 毫秒轮询一次数据库。我执行一个简单的查询“select...from messages where messageId > ' + lastMessageId.

此外,为了保持存在,我非常(非常)频繁地使用每个用户“LastKeepAliveTime”更新数据库。

SQL Server 事务日志变得越来越大,并且在某个时刻,我的聊天应用程序停止工作。

聊天用户不是注册用户,他们只是可以随时离开页面的随机用户。

谢谢亚龙

4

3 回答 3

1

以下是防止事务日志失控的方法:http: //support.microsoft.com/kb/873235

该文章中的选项包括:

  • 做收缩。
  • 更改日志大小。
  • 配置自动扩展。
  • 改变恢复模式。
  • 定期备份日志文件。

和更多。

附带说明一下,设置用户列表及其最后活动日期可能是值得的,您将其存储为应用程序状态中的对象。以这种方式访问​​会更快,并且您可以不那么频繁地保留这些值。

于 2009-12-13T01:02:56.617 回答
1

您可以使用公共缓存对象来获取最后的保持活动信息吗?看起来它的信息量很小,您可以避免大量的 sql 更新。

于 2009-12-13T01:16:24.157 回答
0

从完整模式事务日志切换到简单模式应该可以解决您的日志增长问题。

但是,我还应该补充一点,如果可以的话,避免轮询通常是个好主意,因为它不可扩展。您可以考虑使用 Service Broker 或SqlDependency. 还有其他保持活力的方法。

于 2009-12-13T02:30:54.227 回答