加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 有人可以帮我理解为什么使用NHibernate时自动标

发布时间:2020-12-16 06:35:38 所属栏目:asp.Net 来源:网络整理
导读:我已经看到很多评论(从NHibernate的角度来看)关于使用Guid而不是int(并且可能是数据库中的auto-id),结论是使用自动标识打破了UoW模式. This post有一个简短的问题描述,但它并没有真正告诉我“为什么”它打破了模式(除非我误解了可能的情况. 有人可以开导我吗
我已经看到很多评论(从NHibernate的角度来看)关于使用Guid而不是int(并且可能是数据库中的auto-id),结论是使用自动标识打破了UoW模式.

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

有人可以开导我吗?

解决方法

有几个主要原因.

>使用Guid可以识别跨多个数据库的单个实体,包括具有相同模式但不同数据的六个关系数据库,文档数据库等.只要您有多个数据所在的单个位置,这就变得很重要. – 这也意味着你的情况:你有一个开发数据库和一个prod数据库,对吧?
>使用Guid使NHibernate能够将更多语句一起批处理,在工作单元/事务处理的最后执行更多数据库工作,并减少到数据库的往返总数,提高性能并赋予其他好处.

评论:

Random Guids不会创建糟糕的索引 – 本机地,它们会创建不良的聚簇索引.有两种解决方案.

>使用部分顺序的Guid.使用NHibernate,这意味着使用guid.comb id生成器而不是guid id生成器. guid.comb在良好性能方面属于部分顺序,但保留了非常高的随机性.>让Guid主键成为非聚簇索引,并将聚簇索引放在另一个自动递增列上.您可能决定映射此列,在这种情况下,您将失去更好的批处理和更少往返的好处,但您可以重新获得容易在URL中容纳的短数字的所有好处.或者您可能决定不映射此列并使其完全保留在数据库中,您可以获得Guids作为主键的更好性能,以及NHibernate执行更少往返的更好性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读