首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Nhibernate大事务,刷新和锁定

Nhibernate大事务,刷新和锁定
EN

Stack Overflow用户
提问于 2013-11-17 11:15:08
回答 1查看 1.3K关注 0票数 1

我面临着使用Nhibernate维护一个难以置信的大事务的挑战。所以,让我们说,我正在拯救大量的实体。如果我不使用事务N (假设为10000 ),那么性能就会因为Nh会话过度拥挤而被扼杀。如果我进行刷新,我会将锁放在DB级别上,这与读取提交的隔离级别结合在一起确实会影响工作应用程序。还请注意,实际上,我导入了一个实体,其业务逻辑是系统的核心之一,在其导入时,大约有10个表受到影响。这使得无状态会话成为一个糟糕的主意,因为手工维护级联。

将BL移动到存储过程是一个很大的挑战,原因是:

  1. 在应用程序的域类中已经存在复杂的OO业务逻辑,
  2. 复制的BL将被引入。

理想情况下,我希望将会话刷新到某个文件,只有在数据准备完成之后,我才希望执行它的内容。有可能吗?

任何其他建议/最佳做法都非常受欢迎。

EN

回答 1

Stack Overflow用户

发布于 2013-11-17 11:30:54

您的场景是典型的ORM批处理问题。一般来说,我们可以说,ORM并不是用来做那样的事情的。如果您希望具有较高的批处理性能(而不是永久锁或死锁),则不应使用ORM插入1000 s的记录。

相反,使用本机批处理插入,这将总是要快得多。(类似于MMSQL的SqlBulkCopy )

无论如何,如果要为此使用nhibernate,请尝试使用批处理大小设置。调用、保存或更新所有对象,最后只调用session.Flush一次。这将在内存中创建所有的对象..。

根据批处理大小,nhibernate应该尝试创建具有此大小的insert/update批处理,这意味着您对数据库的往返次数将大大减少,因此锁会更少,或者至少不会花那么长时间.

通常,如果使用正常事务,操作只应在服务器上执行第一个insert语句时锁定数据库。如果使用TransactionScope,它的工作方式可能会有所不同。

下面是一些关于如何改进批处理的附加读物。

http://fabiomaulo.blogspot.de/2011/03/nhibernate-32-batching-improvement.html NHibernate性能插入 http://zvolkov.com/clog/2010/07/16?s=Insert+or+Update+records+in+bulk+with+NHibernate+batching

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20034979

复制
相关文章
Gorm-事务锁定(一)
在进行并发操作时,我们可能会遇到资源竞争的情况,例如多个goroutine同时修改同一个数据库记录。这时,我们需要使用锁来保证数据的一致性。在Gorm中,可以使用事务锁定来实现这一目的。
堕落飞鸟
2023/04/24
2.9K0
Gorm-事务锁定(二)
在使用事务锁定时,需要注意避免死锁的发生。死锁是指两个或多个goroutine在等待对方释放锁定资源的情况下,陷入了一种互相等待的状态。为了避免死锁的发生,我们应该在进行事务锁定时,按照一定的顺序对数据进行加锁。
堕落飞鸟
2023/04/24
8700
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
beginor
2020/08/06
6140
Nhibernate_nhibernate与ef区别
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Nhibernate_nhibernate与ef区别,希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
6110
NHibernate分页
转载:http://www.cnblogs.com/tenghoo/archive/2011/02/14/1954393.html
跟着阿笨一起玩NET
2018/09/19
4730
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
全栈程序员站长
2022/09/19
4440
NHibernate教程
在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。
全栈程序员站长
2022/09/14
3990
NHibernate VS IbatisNet
  NHibernate是当前最流行的Java O/R mapping框架Hibernate的移植版本,当前版本是1.0 .2。它出身于sf.net..IbatisNet是另外一种优秀的Java O/R mapping框架,当前版本是1.2。目前属于apache的一个子项目了。 相对NHibernate“O/R”而言,IbatisNet是一种“Sql Mapping”的ORM实现。 NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间
张善友
2018/01/31
7670
NHibernate详解
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。 NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。
全栈程序员站长
2022/09/18
7180
NHibernate总结
现在的项目中数据访问使用的是NHibernate的一个ORM框架,小弟也是在后期加入项目组,之前对NHibernate就一直没有接触过,所以一直在学习NHibernate,都是一些很基础的一些东西,写出来总结一下,作为备忘。
写代码的猿
2019/04/11
9480
NHibernate总结
[原创]Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失为一个经典,对于新手的我们,需要完全掌握还需要很长一段路,对于新手来说,最初的配置是非常头大的一件事情,好在老赵推荐一个开源的框架Fluent NHibernate,有了它,我们可以完全脱离配置文件,不过博客园中介绍Fluent
脑洞的蜂蜜
2018/02/02
1.1K0
[原创]Fluent NHibernate之旅
NHibernate实践与模式
NHibernate实践与模式 NHibernate是一款非常优秀的O/R mapping的开源框架,再还没有.net的时候它已经存在于java环境中。 下面我们先看一下它的框架 工作原理 将数据
阿新
2018/04/12
8190
NHibernate实践与模式
NHibernate Contrib Best Practice
NHibernate Contrib(Burrow)是一个轻量级的开发中间件,底层使用Nhibernate 2.0GA(Nhibernate 2.0的.hbm.xml和1.2是兼容的) ORM技术框架实现。Burrow提供了智能化的状态,会话,使管理,事务让你更方便的使用Nhibernate进行.net应用程序的开发。
阿新
2019/02/13
6640
Nhibernate入门与demo
      学习和使用Nhibernate已经很久了,一直想写点东西和大家一起学习使用Nhibernate。博客园里也有很多大牛写了很多关于Nhibernate入门的文章。其中:李永京的博客http://www.cnblogs.com/lyj/tag/NHibernate/  内容最为丰富。而且在李哥的博客里面学了很多东西,在此致谢!
老马
2022/05/10
3830
Nhibernate入门与demo
面试中常问到的三大路由更新和撤销
路由器产生的 1 个 1 类 LSA 中会包含多个路由条目,这些所有属于一个 LSA 的路由条目只有一个序列号,故当 1 类似 LSA 进行更新和撤销的时候都为完整的触发更新。比如一台路由器 A 有三个环回口,此时都宣告到同一个区域,这时候此路由器产生的 1 个 1 类 LSA 中包含三条路由条目,假设序列号为 01,当你接下来将其中一个 loopback 口删除后,此时路由器 A 会立马触发更新,只将剩余的两条路由通过 1 个 1 类 LSA 通过出去,并且序列号为02.这样其他路由器收到后会更新该 LSA,此时在其他路由器中关于路由器 A 的 1 类 LSA 中只有两条路由,以此实现路由撤销。
Ponnie
2021/02/24
1.7K1
NHibernate 使用 SqlQuery
多数情况下, NHibernate 提供的 HQL、 Linq 以及条件查询足够用了, 但是在某些情况下, 需要使用 SqlQuery, 使用 SqlQuery 可以查询标量(简单类型), 查询单表实体类, 关联表查询。
beginor
2020/08/10
5820
阴阳大论之事务
MySQL支持用户自定义在commit时如何将log buffer中的日志刷log file中。这种控制通过变量 innodb_flush_log_at_trx_commit 的值来决定。该变量有3种值:0、1、2,默认为1。但注意,这个变量只是控制commit动作是否刷新log buffer到磁盘。
Java学习录
2019/06/18
5110
Nhibernate_juan benet
大家好,又见面了,我是你们的朋友全栈君。 什么是NHibernate? NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本. NHi
全栈程序员站长
2022/11/16
3860
NHibernate介绍「建议收藏」
现代化大型项目通常使用独立的数据库来存储数据,其中以采用关系型数据库居多。用于开发项目的高级语言(C#、Java等)是面向对象的,而关系型数据库是基于关系的,两者之间的沟通需要一种转换,也就是对象/关系数据库映射(Object/Relational Mapping,简称ORM)。
全栈程序员站长
2022/09/18
7810
NHibernate介绍「建议收藏」
点击加载更多

相似问题

NHibernate中的非锁定事务

11

Nhibernate事务锁定一个表

11

NHibernate:独占锁定

414

Nhibernate事务异常

11

MySQL事务是否锁定正在更新和/或选择的InnoDB中的行?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文