我应该和NHibernate一起使用HiLo吗?

我应该和NHibernate一起使用HiLo吗?,nhibernate,Nhibernate,我正在创建一个ASP.NETMVC网站,人们可以在这里保存书签。每个用户可以存储的书签数量没有限制,因此数据库表可能会变得相当大 多对多关系: 书签可以有许多标记 一个标签可以有许多书签 我的表使用标识在MSSQL数据库中生成ID。当我插入带有NHibernate的书签时,会导致对数据库的多个请求。最多10个请求。我知道有其他方法可以生成像HiLo这样的ID,但我不确定我是否真的需要它 本文建议在绿地应用程序中使用HiLo: 问题: 我应该在我的情况下使用HiLo吗 使用HiLo有什么缺

我正在创建一个ASP.NETMVC网站,人们可以在这里保存书签。每个用户可以存储的书签数量没有限制,因此数据库表可能会变得相当大

多对多关系:

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

本文建议在绿地应用程序中使用HiLo:

问题:

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

在需要不断批量插入大量记录的情况下,HiLo是有意义的

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

这将导致(在您的情况下也是如此)更好的性能和更少的潜在错误

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

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