0

我正在开发一个网站,其中 WCF 网络服务将使用 NHibernate 作为数据库 ORM,每个用户会话都有自己的 NHibernate 会话,该会话将在会话级别保持打开状态,为他们提供会话数据库缓存。

每个用户都有一个摘要对象,其中包含来自其他用户的通知列表,例如新消息、新喜欢等,类似于 facebook 如何在顶部定期更新通知以显示来自其他用户的新喜欢、评论等小红旗图标。

显然,一旦加载,摘要对象将保持在 NHibernate 缓存级别,并且通过 AJAX 调用来检查对象是否已更改并在收到任何新通知时更新视觉标志将是一件简单的事情。

问题是对此的任何更改 - 例如向用户发送新消息,都将在不同的 NHibernate 会话中进行(因为每个用户都有自己的会话并且您不向自己发送消息!)所以用户 Y ,在会话 Y 中,向用户 X 发送消息并更新用户 X 的摘要以显示 1 条新消息?

是强制代码每次都转到数据库以获取摘要详细信息而不对摘要对象使用缓存的唯一方法吗?即使有办法更新另一个会话,我也看不到任何方法你会知道如何找到正确的会话,所以我猜唯一的方法是更新数据库摘要表和检查更新的轮询线程活动每次都去数据库并忽略缓存。

有什么想法吗?

4

1 回答 1

2

在 NHibernate 指南中,ISession 对象应尽可能短……如果您的应用程序被大量用户使用,您当前的解决方案将无法扩展。

于 2012-11-29T18:11:27.137 回答