我正在开发一个网站,其中WCF webservices将使用NHibernate作为数据库ORM,每个用户会话都有自己的NHibernate会话,它将在会话级别保持打开状态,以便为他们提供会话数据库缓存。
每个用户都有一个摘要对象,其中包含来自其他用户的通知列表,例如新消息,新喜欢等,类似于Facebook在顶部的通知如何定期更新以显示来自其他用户的新喜欢,评论等小红旗图标。
摘要对象显然会在加载后保持在NHibernate缓存级别,并且如果有任何新通知,那么进行AJAX调用以检查对象是否已更改并更新可视标记将是一件简单的事情。
问题在于,对此进行的任何更改(例如向用户发送新消息)都将在不同的NHibernate会话中进行(因为每个用户都有自己的会话,而您不会向自己发送消息!)用户Y,在会话Y中,向用户X发送消息并更新用户X的摘要以显示1条新消息?
唯一的方法是每次强制代码转到数据库以获取摘要详细信息,而不是根据摘要对象使用缓存吗?即使有办法更新另一个会话,我也看不到你会知道如何找到正确的会话,所以我猜测唯一的方法是更新数据库摘要表以及检查更新的轮询线程to活动每次都去DB,并忽略缓存。
有什么想法吗?
答案 0 :(得分:2)
在NHibernate指南中,ISession对象应尽可能短...如果您的应用程序被大量用户使用,您当前的解决方案将无法扩展。