NHibernate需要非常快速的集合访问

时间:2012-12-06 15:43:58

标签: c# performance nhibernate

我有一个主用户表,当通过NHibernate映射构建一个大的关联数据层次,包括我只需要很少的完整用户细节,所以不要总是加载它。我有一个名为UserLight的部分表,它只包含非常基本的信息,并且我需要快速访问基本信息的次数没有hierachichal连接或集合。

但我的问题不在于那些,那只是背景。

我的网站涉及从大型用户群中搜索其他用户,并且我希望提供从搜索中删除用户的功能,即您点击用户个人资料上的X,然后将其添加到不会出现的删除列表中未来的搜索。

我创建了一个名为UserSearchRemoval的单独的表和对象映射,只有UserId,RemovedId作为数据列。

我正在尝试从代码中找出使用它的最佳方法,因为我希望响应能力很高。我认为GUI智能的最佳方式是在Web端调用一个调用Web服务的Ajax查询,传入两个用户ID,然后在数据库级别完成工作。

我不确定的是在数据库级别执行此操作的最佳方法。在基本层面上,我可以检查是否已经存在搜索删除(需要时间),如果没有,则添加它,或者我可以在没有检查的情况下添加它,并且风险重复,这不是我认为的问题,只是不是最干净的解决方案。因此,添加它似乎是最快的方法。

是否有另一种方法可以通过维护用户删除的会话级别列表并添加到那个并让NHibernate完成其余工作来实现此目的?通过在会话级别保存大量数据以及在内存中更新集合并将其传输到db对象的努力听起来比仅仅向DB添加单行要慢得多,这对我来说听起来很糟糕。

有人能想到更好的解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

答案取决于用户数据库的相对大小,平均搜索结果和平均阻止列表。 它还取决于阻止规则在未来可能不会变得更加复杂的方式,从而可以安全地将它们包含在数据库级别。

假设您的用户数据库是50万用户,您的平均搜索结果是500,平均阻止列表是100,并且规则可能会发展,我会选择基于字典的搜索后应用程序级别过滤。