当前位置: 首页 > news >正文

网页制作与网站建设实战大全读后感如何用frontpage做网站

网页制作与网站建设实战大全读后感,如何用frontpage做网站,58南浔做网站,考研培训班哪个机构比较好目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设置数据库隔离级别 五、使用悲观锁解决事务并发问题 六、使用乐观锁解决事务并发问题 Hibernate事务与并发问题处理#xff08;乐观锁与悲观锁#xff09; 一、数据库…目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设置数据库隔离级别 五、使用悲观锁解决事务并发问题 六、使用乐观锁解决事务并发问题     Hibernate事务与并发问题处理乐观锁与悲观锁 一、数据库事务的定义   数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。    1. 原子性(atomic)事务必须是原子工作单元对于其数据修改要么全都执行要么全都不执行   2. 一致性(consistent)事务在完成时必须使所有的数据都保持一致状态。   3. 隔离性(insulation)由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。   4. 持久性(Duration)事务完成之后它对于系统的影响是永久性的。 二、数据库事务并发可能带来的问题    如果没有锁定且多个用户同时访问一个数据库则当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括丢失数据修改、读”脏”数据脏读、不可重复读、产生幽灵数据 假设数据库中有如下一张表   1. 第一类丢失更新(lost update) 在完全未隔离事务的情况下两个事物更新同一条数据资源某一事物异常终止回滚造成第一个完成的更新也同时丢失。   在T1时刻开启了事务1T2时刻开启了事务2在T3时刻事务1从数据库中取出了id402881e535194b8f0135194b91310001的数据T4时刻事务2取出了同一条数据T5时刻事务1将age字段值更新为30T6时刻事务2更新age为35并提交了数据但是T7事务1回滚了事务age最后的值依然为20事务2的更新丢失了这种情况就叫做第一类丢失更新(lost update)。   2. 脏读(dirty read)如果第二个事务查询到第一个事务还未提交的更新数据形成脏读。   在T1时刻开启了事务1T2时刻开启了事务2在T3时刻事务1从数据库中取出了id402881e535194b8f0135194b91310001的数据在T5时刻事务1将age的值更新为30但是事务还未提交T6时刻事务2读取同一条记录获得age的值为30但是事务1还未提交若在T7时刻事务1回滚了事务2的数据就是错误的数据(脏数据)这种情况叫做 脏读(dirty read)。   3. 虚读(phantom read)一个事务执行两次查询第二次结果集包含第一次中没有或者某些行已被删除造成两次结果不一致只是另一个事务在这两次查询中间插入或者删除了数据造成的。   在T1时刻开启了事务1T2时刻开启了事务2T3时刻事务1从数据库中查询所有记录记录总共有一条T4时刻事务2向数据库中插入一条记录T6时刻事务2提交事务。T7事务1再次查询数据数据时记录变成两条了。这种情况是虚读(phantom read)。   4. 不可重复读(unrepeated read)一个事务两次读取同一行数据结果得到不同状态结果如中间正好另一个事务更新了该数据两次结果相异不可信任。   在T1时刻开启了事务1T2时刻开启了事务2在T3时刻事务1从数据库中取出了id402881e535194b8f0135194b91310001的数据此时age20T4时刻事务2查询同一条数据T5事务2更新数据age30T6时刻事务2提交事务T7事务1查询同一条数据发现数据与第一次不一致。这种情况就是不可重复读(unrepeated read)。   5. 第二类丢失更新(second lost updates)是不可重复读的特殊情况如果两个事务都读取同一行然后两个都进行写操作并提交第一个事务所做的改变就会丢失。   在T1时刻开启了事务1T2时刻开启了事务2T3时刻事务1更新数据age25T5时刻事务2更新数据age30T6时刻提交事务T7时刻事务2提交事务把事务1的更新覆盖了。这种情况就是第二类丢失更新(second lost updates)。   三、数据库事务隔离级别 为了解决数据库事务并发运行时的各种问题数据库系统提供四种事务隔离级别1. Serializable 串行化2. Repeatable Read 可重复读3. Read Commited 可读已提交4. Read Uncommited 可读未提交 隔离级别与并发性能的关系  每一个隔离级别可以解决的问题   四、使用Hibernate设置数据库隔离级别 在Hibernate的配置文件中可以显示的配置数据库事务隔离级别。每一个隔离级别用一个整数表示 8 - Serializable 串行化4 - Repeatable Read 可重复读2 - Read Commited 可读已提交1 - Read Uncommited 可读未提交 在hibernate.cfg.xml中使用hibernate.connection.isolation参数配置数据库事务隔离级别。   五、使用悲观锁解决事务并发问题   悲观锁正如其名它指的是对数据被外界包括本系统当前的其他事务以及来自外部系统的事务处理修改持保守态度因此在整个数据处理过程中将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制也只有数据库层提供的锁机制才能真正保证数据访问的排他性否则即使在本系统中实现了加锁机制也无法保证外部系统不会修改数据。   一个典型的依赖数据库的悲观锁调用select * from account where name”Erica” for update这条 sql 语句锁定了 account 表中所有符合检索条件 name”Erica” 的记录。本次事务提交之前事务提交时会释放事务过程中的锁外界无法修改这些记录。悲观锁也是基于数据库的锁机制实现。 在Hibernate使用悲观锁十分容易但实际应用中悲观锁是很少被使用的因为它大大限制了并发性 图为Hibernate3.6的帮助文档Session文档的get方法截图可以看到get方法第三个参数lockMode或lockOptions注意在Hibernate3.6以上的版本中LockMode已经不建议使用。方法的第三个参数就是用来设置悲观锁的使用第三个参数之后我们每次发送的SQL语句都会加上for update用于告诉数据库锁定相关数据。 LockMode参数选择该选项就会开启悲观锁。   T1,T2时刻取款事务和转账事务分别开启T3事务查询ACCOUNTS表的数据并用悲观锁锁定T4转账事务也要查询同一条数据数据库发现该记录已经被前一个事务使用悲观锁锁定了然后让转账事务等待直到取款事务提交。T6时刻取款事务提交T7时刻转账事务获取数据。   六、使用乐观锁解决事务并发问题   相对悲观锁而言乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销特别是对长事务而言这样的开销往往无法承受。乐观锁机制在一定程度上解决了这个问题。乐观锁大多是基于数据版本Version记录机制实现。何谓数据版本即为数据增加一个版本标识在基于数据库表的版本解决方案中一般是通过为数据库表增加一个version字段来实现。  乐观锁的工作原理读取出数据时将此版本号一同读出之后更新时对此版本号加一。此时将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对如果提交的数据版本号大于数据库表当前版本号则予以更新否则认为是过期数据。 Hibernate为乐观锁提供了3中实现 1. 基于version 2. 基于timestamp 3. 为遗留项目添加添加乐观锁  配置基于version的乐观锁 ?xml version1.0 encodingutf-8?!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mapping class namecom.suxiaolei.hibernate.pojos.People tablepeople id nameid typestring column nameid/column generator classuuid/generator /id !-- version标签用于指定表示版本号的字段信息 -- version nameversion columnversion typeinteger/version property namename columnname typestring/property /class/hibernate-mapping 配置基于timestamp的乐观锁 ?xml version1.0 encodingutf-8?!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mapping class namecom.suxiaolei.hibernate.pojos.People tablepeople id nameid typestring column nameid/column generator classuuid/generator /id !-- timestamp标签用于指定表示版本号的字段信息 -- timestamp nameupdateDate columnupdateDate/timestamp property namename columnname typestring/property /class/hibernate-mapping 遗留项目由于各种原因无法为原有的数据库添加version或timestamp字段这时不可以使用上面两种方式配置乐观锁Hibernate为这种情况提供了一个optimisitic-lock属性它位于class标签上 ?xml version1.0 encodingutf-8?!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mapping class namecom.suxiaolei.hibernate.pojos.People tablepeople optimistic-lockall id nameid typestring column nameid/column generator classuuid/generator /id property namename columnname typestring/property /class/hibernate-mapping 将该属性的值设置为all让该记录所有的字段都为版本控制信息。转载于:https://www.cnblogs.com/jiligalaer/p/3990369.html
http://www.zqtcl.cn/news/405777/

相关文章:

  • html5网站怎么建设后台怎么弄厦门微信网站建
  • 幻影图片一键制作网站建筑工程是干嘛的
  • 技术支持 东莞网站建设东莞天助免费网站申请域名39939cn
  • js打开网站wordpress线报主题
  • 怎么做网站首页弹幕外贸网站高端定做
  • asp.net mvc 做网站做网站原型的软件
  • wordpress网站恢复北京app建设 网站开发公司
  • 给别人做设计的网站aso优化师工作很赚钱吗
  • 网店网站建设规划方案入门编程软件
  • 网站布局企业安全文化建设导则
  • 胶东国际机场建设有限公司网站2021重大军事新闻
  • 企业网站优化的方式萍乡市建设局网站王丽
  • 做网站的收费标准社保网上服务大厅
  • php网站开发安全网站建设管理教程视频教程
  • 网站建设的空间是什么意思海络网站
  • 深圳华强北今晚网站优化推广公司
  • 网站建设行业好做吗太原网站改版
  • 寿光企业建站流程个人网站用什么软件
  • 网站建设与管理自考本全国卷wordpress 关闭文章修订
  • 兴义市建设局网站首页网站开发项目实训总结
  • 个人网站空间收费网络软文营销案例
  • 网站开发文件结构组成微网站移交
  • 西安全网优化 西安网站推广网页浏览器缩略词
  • 网站开发及企业推广营销型网站建设怎么收费
  • 网站建设与管理ppt课件百度云盘关键词推广营销
  • c asp.net网站开发书宁波建设业协会网站
  • 政务网站建设发言材料知名互联网公司有哪些
  • 网站搭建制作建e室内设计网画图
  • 重庆市建设工程施工安全管理信息网北京seo公司网站
  • 国外做调查问卷的网站建设邮费自己的网站 要不要购买服务器的