gpt4 book ai didi

asp.net-mvc - 有人可以帮助我理解为什么使用 NHibernate 时自动标识 (int) 不好?

转载 作者:行者123 更新时间:2023-12-04 23:33:47 25 4
gpt4 key购买 nike

我一直在看到很多关于使用 Guid 而不是 int(大概是数据库中的自动 ID)的评论(从 NHibernate 的角度来看),结论是使用自动标识打破了 UoW 模式。

This post 对该问题有一个简短的描述,但它并没有真正告诉我“为什么”它打破了模式(除非我误解了这可能是这种情况。

有人可以启发我吗?

最佳答案

有几个主要原因。

  • 使用 Guid 使您能够在多个数据库中识别单个实体,包括具有相同模式但数据不同的六个关系数据库、一个文档数据库等。这在您有多个数据存放的地方时变得很重要- 这也意味着你的情况:你有一个开发数据库和一个生产数据库,对吧?
  • 使用 Guid 使 NHibernate 能够将更多语句一起批处理,在工作/事务单元的最后执行更多的数据库工作,并减少到数据库的往返总数,提高性能并赋予其他好处。

  • 评论:

    随机 Guid s 不会创建不良索引 - 它们本身创建不良聚集索引。有两种解决方案。
  • 使用部分顺序的 Guid 。对于 NHibernate,这意味着使用 guid.comb id 生成器而不是 guid id 生成器。 guid.comb 是部分顺序的以获得良好的性能,但保留了非常高的随机性。
  • 将您的 Guid 主键设为 nonclustered 索引,并将聚集索引放在另一个自动递增列上。您可能决定映射此列,在这种情况下,您将失去更好的批处理和更少的往返次数的好处,但您可以重新获得可轻松放入 URL 的短数字的所有好处。或者您可能决定不映射此列并将其完全保留在数据库中,在这种情况下,您将 Guid s 作为主键获得更好的性能,并且 NHibernate 执行更少的往返可以获得更好的性能。
  • 关于asp.net-mvc - 有人可以帮助我理解为什么使用 NHibernate 时自动标识 (int) 不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1539573/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com