0

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

但我的问题是除此之外,这只是背景。

我的网站涉及从大量用户群中搜索其他用户,我想提供从搜索中删除人员的功能,即您单击用户个人资料上的 X 并将他们添加到将不会出现在未来搜索中的删除列表中。

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

我试图从代码中找出处理这个问题的最佳方法,因为我希望响应度很高。我想 GUI 明智的最佳方式是在 Web 端调用 Ajax 查询,该查询调用 Web 服务,传入两个用户 ID,然后在数据库级别完成工作。

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

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

谁能想到更好的解决方案?

谢谢

4

1 回答 1

0

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

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

于 2012-12-07T09:24:07.547 回答