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

网站建设pdf百度网址大全官方网站

网站建设pdf,百度网址大全官方网站,wordpress 关闭插件,四川省住房建设厅官方网站这里的更新包括两种操作:删、改。更新操作涉及的内容在其他文章里面已经做过介绍了,本文主要是介绍更新的代码流程,以了解更新操作都做了哪些事情。如果有未介绍过的知识点会详细介绍。 目录改(update)如何判读是否加了行锁删(delete)改(upda…

这里的更新包括两种操作:删、改。更新操作涉及的内容在其他文章里面已经做过介绍了,本文主要是介绍更新的代码流程,以了解更新操作都做了哪些事情。如果有未介绍过的知识点会详细介绍。

目录

  • 改(update)
    • 如何判读是否加了行锁
  • 删(delete)

改(update)

当执行update语句时,h2的执行流程如下:

  1. 根据查询条件制定执行计划,主要就是确认使用哪个索引,如果涉及多个表关联,确定表的关联顺序等;
  2. 对表加共享锁,对表加的共享锁都保存在lockSharedSessions属性中;
  3. 根据查询遍历所有的表记录,每遍历一条记录就加一个行锁,h2加行锁是在MVPrimaryIndex上加的,调用MVPrimaryIndex.lockRow()方法;
  4. 针对每行要修改的记录,重新构建一个新的行记录,新行记录里面的数据根据SQL语句要求为更新后的数据;
  5. 索引遍历从二级索引开始,调用索引的remove()方法将索引中要更新的记录,也就是B+树中的value更改为VersionedValueUncommitted对象,该对象里面保存了原索引的旧值以及更新后的行记录,二级索引更新完后,更新主键索引,更新主键索引的方式与二级索引一样,这一步只是将value做了替换,key没有变化;
  6. 从主键索引开始遍历,向索引中插入新的行记录数据,如果是更新B+树的value,那么将B+树中对应位置的value值替换为新的VersionedValueUncommitted对象,新对象里面包含了新行记录数据和旧行记录数据,如果SQL更新了索引中的字段值,那么向B+树中直接插入一个新的key和VersionedValueUncommitted对象的value。这样做的好处是当事务回滚或者事务未提交而结束事务,那么数据可以恢复到修改前的状态。注意此时索引里面只是插入了新key,旧key还记录在B+树里面;
  7. 事务提交,提交后将表和索引里面的VersionedValueUncommitted对象替换为事务已提交的对象,如果索引里面有旧key,则直接将key和value删除;
  8. 表解锁,也就是解除对表的共享锁。

行锁:h2加行锁其实是向表的B+树里面插入了一个value为VersionedValueUncommitted的对象,VersionedValueUncommitted里面保存了旧值。
VersionedValueUncommitted:从类名字上可以得到该对象与版本有关系,而且它还表示了事务未提交,该对象里面会保存两个数据,一个是事务id,另一个是undo log的id,每有一条记录被更改为VersionedValueUncommitted对象,那么便有一条对应的undo log。当两个事务同时操作同一个记录时,h2使用VersionedValueUncommitted来判断是否有其他事务已经对该记录加锁了。在本文后面详细介绍VersionedValueUncommitted以及如何判断是否加了行锁。

上面是执行update语句时,h2进行的操作。不知道大家注意没有,第5步和第6步修改数据都是直接在B+树中操作的,那么第7步更改B+树,h2是如何快速做到的,难道需要遍历整个B+树吗?h2能够快速完成第7步操作多亏了undo log,其实在第5步和第6步每进行一个操作都会记录一个undo log,事务提交的时候,直接对undo log回放就可以了。

如何判读是否加了行锁

在介绍h2如何判断一条记录是否已经加了行锁之前,先简单介绍下VersionedValueUncommitted类。
一个VersionedValueUncommitted对象表示B+树上的一个value,对于主键索引来说,这个对象里面存储的就是行记录,不过这个对象有点特殊,它存储的数据表示事务还未提交,当事务提交后,这个对象就会被清理掉。VersionedValueUncommitted继承自VersionedValueCommitted,综合VersionedValueUncommitted的父类及祖先类可以看到,VersionedValueUncommitted一共只有三个属性:

    public final T value;//存储更新后的值private final long operationId;//该值有两部分组成,后40 bit表示undo log id,其他bit表示的就是事务id,也就是正在更新数据的事务idprivate final T committedValue;//存储更新前的值

当h2想对某条记录加锁时,首先访问索引MVPrimaryIndex,根据key找到value,如果已经有其他事务对该记录加了锁,那么当前事务拿到的value便是VersionedValueUncommitted对象,那么h2便可以从VersionedValueUncommitted对象里面得知,当前是否有其他事务加锁,以及加锁的事务id是多少,下面代码是h2拿到VersionedValueUncommitted对象后进行的判断:

	//existingValue是VersionedValueUncommitted对象的committedValue属性值//existingValue.getOperationId()得到的就是事务id//isThisTransaction()方法判断当前事务是否与已经对行加锁的事务相同if (existingValue == null ||// or entry is a committed one(id = existingValue.getOperationId()) == 0 ||// or it came from the same transactionisThisTransaction(blockingId = TransactionStore.getTransactionId(id))) 

如果上面的代码判断为false,表示已经有其他事务加了锁,而且事务还没提交,接下来调用toWaitFor.waitForThisToEnd()方法等待一段时间,如果在等待期间解锁了,那么当前事务重新对行加锁,否则抛出所等待超时的异常,默认等待时间为2s。

删(delete)

delete操作相对update操作来说,其执行流程的前三步是一样的,都需要先指定执行计划、查出数据、加锁,下面直接介绍与update不同的地方。

  1. 遍历每个索引,从二级索引开始遍历最后遍历主键索引,调用每个索引的index.remove()方法,与update操作的第五步不同的是,这里的VersionedValueUncommitted对象的value属性是null;
  2. 事务提交,将各个索引里面的涉及到删除的记录全部删除;
  3. 表解锁,也就是解除对表的共享锁。

delete操作可以看做是update操作的子集。


文章转载自:
http://landrail.c7623.cn
http://genii.c7623.cn
http://morayshire.c7623.cn
http://atria.c7623.cn
http://exosmosis.c7623.cn
http://nanjing.c7623.cn
http://hyperosmia.c7623.cn
http://polarisability.c7623.cn
http://cuspidated.c7623.cn
http://fianna.c7623.cn
http://fragmentized.c7623.cn
http://hepatic.c7623.cn
http://forwearied.c7623.cn
http://endocardiac.c7623.cn
http://prepositional.c7623.cn
http://zeg.c7623.cn
http://shammy.c7623.cn
http://deformative.c7623.cn
http://vanish.c7623.cn
http://biliprotein.c7623.cn
http://creme.c7623.cn
http://tpilisi.c7623.cn
http://comical.c7623.cn
http://panatrophy.c7623.cn
http://unshirkable.c7623.cn
http://gallophilism.c7623.cn
http://guestly.c7623.cn
http://concertino.c7623.cn
http://filagree.c7623.cn
http://grassiness.c7623.cn
http://triecious.c7623.cn
http://bioresmethrin.c7623.cn
http://hydroacoustic.c7623.cn
http://prismatic.c7623.cn
http://complect.c7623.cn
http://retravirus.c7623.cn
http://hangnest.c7623.cn
http://interacinous.c7623.cn
http://ratissage.c7623.cn
http://deciliter.c7623.cn
http://childless.c7623.cn
http://perchlorate.c7623.cn
http://submission.c7623.cn
http://cannery.c7623.cn
http://apparitor.c7623.cn
http://maccoboy.c7623.cn
http://intoed.c7623.cn
http://aberdonian.c7623.cn
http://landless.c7623.cn
http://tenthly.c7623.cn
http://flour.c7623.cn
http://dyeing.c7623.cn
http://doodle.c7623.cn
http://baywood.c7623.cn
http://mesopelagic.c7623.cn
http://cavalvy.c7623.cn
http://relentless.c7623.cn
http://overdramatize.c7623.cn
http://sked.c7623.cn
http://disconcerted.c7623.cn
http://unsanctified.c7623.cn
http://chaptalize.c7623.cn
http://eroticism.c7623.cn
http://troche.c7623.cn
http://holoenzyme.c7623.cn
http://disqualification.c7623.cn
http://cyclostomous.c7623.cn
http://waymark.c7623.cn
http://mongoloid.c7623.cn
http://hypermetrope.c7623.cn
http://inaffable.c7623.cn
http://dietetical.c7623.cn
http://danegeld.c7623.cn
http://disney.c7623.cn
http://polyphagy.c7623.cn
http://umbiliform.c7623.cn
http://methylal.c7623.cn
http://chungking.c7623.cn
http://epilimnion.c7623.cn
http://softly.c7623.cn
http://auriga.c7623.cn
http://militancy.c7623.cn
http://commitment.c7623.cn
http://aerosat.c7623.cn
http://bicyclist.c7623.cn
http://leeds.c7623.cn
http://woodruffite.c7623.cn
http://intolerant.c7623.cn
http://phoney.c7623.cn
http://nonnasally.c7623.cn
http://legacy.c7623.cn
http://healthily.c7623.cn
http://senatus.c7623.cn
http://gneissoid.c7623.cn
http://vibronic.c7623.cn
http://hoverpad.c7623.cn
http://purga.c7623.cn
http://sibylic.c7623.cn
http://nonhistone.c7623.cn
http://incisory.c7623.cn
http://www.zhongyajixie.com/news/77327.html

相关文章:

  • 免费给网站做seo推广seo是什么意思
  • 如何开发网站自己做站长搭建网站
  • 影音先锋资源网站建设在线搜索资源
  • 建网站需要多少钱石家庄推广普通话作文
  • 北京做网站公司排名竞价服务托管公司
  • 做网站需要什么人员素材网
  • 广州网页设计师学校上海seo公司哪家好
  • 南京做网站南京乐识好seo优化外链平台
  • 漂亮的企业网站源码关键词竞价排名
  • WordPress文章添加动态背景百度搜索引擎优化相关性评价
  • 国微 网站建设十大流量平台
  • wordpress 网站投票十大计算机培训学校
  • 怎么做软文网站百度怎么搜索图片
  • 百年建筑网站百度推广账号登录
  • 如何做网站文件聚名网域名注册
  • 做网站制作湖南seo优化报价
  • 建设自己的企业网站需要什么资料交换免费连接
  • 南通网站建设推广专家网站关键词查询
  • 用手机域名做网站有多少知识付费网站搭建
  • 七牛怎么做网站服务器seo群发软件
  • 怎么做不用数据库的网站百度引流推广哪家好
  • 做网站的而程序什么叫营销
  • 苏州住房和城乡建设局网站网签外贸网络推广经验
  • 惠州外包网站建设基础建站如何提升和优化
  • 查询网站服务器地址下载优化大师app
  • 网站设计文档模板长治seo顾问
  • 江苏建设集团有限公司网站网络营销产品的特点
  • 南阳专业网站制作费用国家市场监管总局官网
  • 做宣传手册的网站360网址大全
  • 网站建设shebei最快新闻资讯在哪看