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

个人网站 费用长沙百度seo排名

个人网站 费用,长沙百度seo排名,网站建设与运营的论文的范本,wordpress用户数据目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用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/847106/

相关文章:

  • 北京网站优化服务商有了域名怎么建网站
  • 转运网站开发国外永久免费crm系统
  • 免费网站建设网站wordpress扁平化中文主题
  • 外贸企业网站策划个人简历模板免费可编辑
  • 自助建站免费建站免费建站工具有哪些
  • 海外网站导航前端静态网站开发
  • 德庆网站建设价格网站的月度流量统计报告怎么做
  • 网站哪里买外链品牌网站设计步骤
  • 网站推广 优帮云淄博网站制作公司
  • 二手书哪个网站做的好wordpress 直排主题
  • 网站开发风险分析做情诗网站
  • 怎样可以快速增加网站的反链网络广告平台有哪些
  • 学校网站源码小游戏网站审核怎么做
  • 西乡网站建设政务网站开发协议
  • 美食网站开发环境北京app网站建设
  • 郑州网站建设推广渠道重庆网站建设公司下载
  • 宜宾营销型网站建设网站建设需要什么资质
  • 重庆建网站有哪些学跨境电商要多少钱
  • 上海建设钢结构工程网站深圳电器公司排名
  • 淄博网站建设找淄深网江苏省建设斤网站
  • 免费行情软件app网站红色西安做网站印象网络
  • 宁波网站建设小程序开发聊城wap网站建设
  • 陇南网站网站建设泰安网站的建设
  • 哪个网站有介绍拿到家做的手工活建设银行网站怎么修改手机号码吗
  • 网站地图怎么用淘宝客推广网站建设
  • 外贸零售网站建设购物网站支付功能怎么做
  • 淘宝客如何做自己的网站西宁工程建设招聘信息网站
  • 天津都有哪些制作网站郑州官网首页
  • 个人网站开发模式海南省建设公司官网
  • edu网站开发做爰视频在线观看免费网站