我应该在NHibernate中使用HiLo吗?

时间:2013-11-22 17:00:21

标签: nhibernate

我正在创建一个ASP.NET MVC网站,人们可以在其中保存书签。每个用户可以存储的书签数量没有限制,因此数据库表可能会变得非常大。

多对多的关系:

  • 书签可以有多个标签
  • 标签可以有多个书签

我的表使用identity在MSSQL数据库中生成id。当我使用NHibernate插入书签时,这会导致对数据库的多个请求。最多10个请求。我知道有其他方法可以生成像HiLo这样的ID,但我不确定我是否真的需要它。

本文建议在绿地应用的情况下使用HiLo:

http://nhibernate.info/blog/2009/03/19/nhibernate-poid-generators-revealed.html

问题:

  • 在我的情况下我应该使用HiLo吗?
  • 使用HiLo有什么缺点吗?
  • 这些对数据库的多个请求在什么情况下会损害性能?

1 个答案:

答案 0 :(得分:0)

HiLo在您必须不断批量插入大量记录的情况下才有意义。

客户端(NHibernate)更容易在客户端上创建ID而不是 必须在每次插入后查询数据库以获取新标识符(这或多或少是自动增量ID的情况)。

这应该导致(在您的情况下)更好的性能和更少的潜在错误。

缺点是您需要另一个表来存储HiLo值,并且访问数据库的其他应用程序都必须知道这一点并且需要实现完全相同的逻辑。只要您的应用程序是唯一访问数据库的应用程序,这不是问题。

在MSSQL2012中,我们现在也有序列。这可以代替HiLo使用,ID的处理或多或少相同,你只需为每个表创建一个序列......