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

网站开发与设计需要哪些技术青海做网站的公司

网站开发与设计需要哪些技术,青海做网站的公司,网站开发怎么设置打印按钮,如何选择赣州网站建设前提#xff1a;在介绍mvcc之前#xff0c;先简单介绍一下mysql事务的相关问题#xff0c;mvcc归根结底是用来解决事务并发问题的#xff0c;当然这个解决不是全部解决#xff0c;只是解决了其中的一部分问题#xff01; mysql事务 一、事务的基本要素#xff08;ACID在介绍mvcc之前先简单介绍一下mysql事务的相关问题mvcc归根结底是用来解决事务并发问题的当然这个解决不是全部解决只是解决了其中的一部分问题 mysql事务 一、事务的基本要素ACID   1、原子性Atomicity事务开始后所有操作要么全部做完要么全部不做不可能停滞在中间环节。事务执行过程中出错会回滚到事务开始前的状态所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体就像化学中学过的原子是物质构成的基本单位。    2、一致性Consistency事务开始前和结束后数据库的完整性约束没有被破坏 。比如A向B转账不可能A扣了钱B却没收到。    3、隔离性Isolation同一时间只允许一个事务请求同一数据不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱在A取钱的过程结束前B不能向这张卡转账。    4、持久性Durability事务完成后事务对数据库的所有更新将被保存到数据库不能回滚。 二、事务的并发问题   1、脏读事务A读取了事务B未提交的数据然后B回滚操作那么A读取到的数据是脏数据 ----解决的基础隔离级别读已提交   2、不可重复读事务 A 多次读取同一数据事务 B 在事务A多次读取的过程中对数据作了更新并提交导致事务A多次读取同一数据时结果 不一致。----解决的基础隔离级别可重复读   3、幻读是针对数据插入操作来说的假设在事务A中按照某个条件先后两次查询数据库两次查询结果的条数不同事务B在事务A两次查询期间插入符合查询条件的新数据这种现象称为幻读。—解决的基础隔离级别串行化针对一张表的操作每一个session依次完成自己的操作行锁 间隙锁MySQL事务隔离级别和实现原理   小结不可重复读与幻读的区别可以通俗的理解为前者是数据变了后者是数据的行数变了。不可重复读的和幻读很容易混淆不可重复读侧重于修改幻读侧重于新增或删除。 三、MySQL事务隔离级别 MVCC多版本并发控制 前提概要 什么是MVCC 什么是当前读和快照读 当前读快照读和MVCC的关系 MVCC能解决什么问题好处是 MVCC实现原理 隐式字段 undo日志 Read View(读视图) 例子 MVCC相关问题 RR是如何在RC级的基础上解决不可重复读的 RC,RR级别下的InnoDB快照读有什么不同 一、前提概要 什么是MVCC? MVCC全称Multi-Version Concurrency Control即多版本并发控制。MVCC是一种并发控制的方法一般在数据库管理系统中实现对数据库的并发访问。 什么是当前读和快照读 在学习MVCC多版本并发控制之前我们必须先了解一下什么是MySQL InnoDB下的当前读和快照读? 当前读 像select lock in share mode(共享锁), select for update ; update, insert ,delete(排他锁)这些操作都是一种当前读它读取的是记录的最新版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。 快照读 简单的select操作就是快照读即不加锁的非阻塞读快照读的前提是隔离级别不是串行级别串行级别下的快照读会退化成当前读之所以出现快照读的情况是基于提高并发性能的考虑快照读的实现是基于多版本并发控制即MVCC,可以认为MVCC是行锁的一个变种但它在很多情况下避免了加锁操作降低了开销既然是基于多版本即快照读可能读到的并不一定是数据的最新版本而有可能是之前的历史版本 MVCC能解决什么问题好处是 数据库并发场景有三种分别为 读-读不存在任何问题也不需要并发控制 读-写有线程安全问题可能会造成事务隔离性问题可能遇到脏读幻读不可重复读 写-写有线程安全问题可能会存在更新丢失问题 MVCC带来的好处是 多版本并发控制MVCC是一种用来解决读-写冲突的无锁并发控制也就是为事务分配单向增长的时间戳为每个修改保存一个版本版本与事务时间戳关联读操作只读该session的数据库的快照。 所以MVCC可以为数据库解决以下问题 在并发读写数据库时可以做到在读操作时不用阻塞写操作写操作也不用阻塞读操作提高了数据库并发读写的性能 二、MVCC的实现原理 它的实现原理主要是依赖记录中的 3个隐式字段undo日志 Read View 来实现的。 隐式字段 每行记录除了我们自定义的字段外还有数据库隐式定义的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段 DB_TRX_ID 6byte最近修改(修改/插入)事务ID记录创建这条记录/最后一次修改该记录的事务ID DB_ROLL_PTR 7byte回滚指针指向这条记录的上一个版本存储于rollback segment里 DB_ROW_ID 6byte隐含的自增ID隐藏主键如果数据表没有主键InnoDB会自动以DB_ROW_ID产生一个聚簇索引 实际还有一个删除flag隐藏字段, 既记录被删除并不代表真的删除而是删除flag变了 如上图DB_ROW_ID是数据库默认为该行记录生成的唯一隐式主键DB_TRX_ID是当前操作该记录的事务ID,而DB_ROLL_PTR是一个回滚指针用于配合undo日志指向上一个旧版本 undo日志 undo log主要分为两种 insert undo log 代表事务在insert新记录时产生的undo log, 只在事务回滚时需要并且在事务提交后可以被立即丢弃 update undo log 事务在进行update或delete时产生的undo log; 不仅在事务回滚时需要在快照读时也需要所以不能随便删除 对MVCC有帮助的实质是update undo log undo log实际上就是存在rollback segment中旧记录链它的执行流程如下 一、 比如有个事务在persion表插入了一条新记录记录如下name为Jerry, age为24岁隐式主键是1事务ID和回滚指针我们假设为NULL。为演示插入提交后该undo log被删除 二、 现在来了一个事务1对该记录的name做出了修改改为Tom 在事务1修改该行(记录)数据时数据库会先对该行加排他锁 然后把该行数据拷贝到undo log中作为旧记录既在undo log中有当前行的拷贝副本 拷贝完毕后修改该行name为Tom并且修改隐藏字段的事务ID为当前事务1的ID, 我们假设从1开始之后递增回滚指针指向拷贝到undo log的副本记录既表示我的上一个版本就是它 事务提交后释放锁 三、 又来了个事务2修改person表的同一个记录将age修改为30岁 在事务2修改该行数据时数据库也先为该行加锁 然后把该行数据拷贝到undo log中作为旧记录发现该行记录已经有undo log了那么最新的旧数据作为链表的表头插在该行记录的undo log最前面 修改该行age为30岁并且修改隐藏字段的事务ID为当前事务2的ID, 那就是2回滚指针指向刚刚拷贝到undo log的副本记录 事务提交释放锁 记录版本链 从上面我们就可以看出同一记录的多次修改会导致该记录的undo log成为一条记录版本线性表既链表undo log的链首就是最新的旧记录链尾就是最早的旧记录 Read View(读视图) 什么是Read View?对照表 什么是Read ViewRead View是session进行快照读操作的时候生产的读视图(Read View)在该session执行的快照读的那一刻会生成数据库系统当前的一个快照。 Read View主要是用来做可见性判断的, 即当执行快照读的时候对该记录创建一个Read View读视图把它比作条件用来判断当前session能够看到哪个版本的数据既可能是当前最新的数据也有可能是该行记录的undo log里面的某个版本的数据。 Read View执行查询时【所有】未提交的事务Id数组数组里最小的id为min_id和已创建的最大事务idmax_id:未提交、已提交组成 mvcc遵循一个可见性算法查询时候需要用read-view和undo log 做对比得到结果 比较规则 依次比较记录版本链中每一条记录符合规则就返回该条数据不符合根据回滚指针取链路中的下一条数据 trx_id为记录版本链里的DB_TRX_ID 1、如果trx_id min_id落在绿色部分,表示这个版本是已经提交的事务生成的这个数据肯定是可见的 2、如果trx_id max_id 落在红色部分,表示这个版本是由将来的启动的事务生成的是肯定不可见的 3、如果min_id trx_id max_id 落在黄色部分那就包括两种情况 a、若trx_id在未提交的事务Id数组里表示这个版本是由未提交的事务产生的不可见当前自己的事务是可见的 b、若trx_id不在未提交的事务Id数组里表示这个版本是已经提交的事务生成的可见 对于删除的情况可以认为是update的特殊情况会将版本链上最新的数据复制一份然后将其trx_id修改成删除的trx_id同时在该条记录的头信息record_header里的delete_flag标记位上写上true来表示当前记录已经被删除在查询时按照上面的规则查到对应的记录如果delete_flag标记位等于true意味着该条记录已被删除则不返回数据 例子 默认RR级别 https://www.processon.com/view/link/5eef4a2d6376891e81dc7d28 三、MVCC相关问题 RC,RR级别下的InnoDB快照读有什么不同 正是Read View生成时机的不同从而造成RC,RR级别下快照读的结果的不同 在RR级别下的某个session对某条记录的第一次快照读会创建一个Read View, 将当前系统活跃的其他事务记录起来此后再快照读的时候还是使用的是同一个Read View换一句话说只要当前session在其他事务提交更新之前使用过快照读那么之后的快照读使用的都是同一个Read View所以对之后的修改不可见 而在RC级别下的每次快照读都会新生成一个Read View, 这就是我们在RC级别下的事务中可以看到别的事务提交的更新的原因 总之在RC隔离级别下是每个快照读都会生成并获取最新的Read View而在RR隔离级别下则是同一个session中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。 可参考文档 mvcc https://www.jianshu.com/p/8845ddca3b23 bin log、redo log、undo log区别 https://www.cnblogs.com/wq-blogs/p/11867199.html 事务 https://blog.csdn.net/qq_38997379/article/details/89017287 详细解读mysql 的undo log https://blog.csdn.net/qq_39459385/article/details/84644005 详细分析MySQL事务日志(redo log和undo log)
http://www.dnsts.com.cn/news/170694.html

相关文章:

  • 秦皇岛企业建网站网站服务器搬迁
  • 制作一个网站需要多少钱网站广告收入如何缴文化事业建设费
  • 免费网站注册 建站36氪网站用什么程序做的
  • 如何自助建网站一站式建网站html好看的个人主页
  • 理财网站方案建设商标号在线查询
  • 一诺建站南宁制作网站服务商
  • 威海建设公司网站岳阳网站建设推广
  • phpcmsv9中英文网站html网页大赛优秀作品
  • 什么网站做电器出租贵州省城乡建设局网站查
  • 玉林博白网站建设加强网站信息内容建设的意见
  • 伊滨区网站建设百度关键词优化查询
  • 响应式网站的费用wordpress国内中文主题
  • 医疗网站整站优化思路聊天不付费的交友软件
  • 怎么查网站的关键词排名网络经营网址怎么注册
  • 建免费网站的步骤wordpress注册没有反应
  • 怎样做永久网站二维码石景山老山网站建设
  • 做网站用vs珠海微网站进入
  • 中小企业建站排名好的h5网站模板
  • 北京鑫旺路桥建设有限公司网站晋中营销型网站建设
  • 港闸网站建设制作莆田网站建设建站系统
  • 天津黑曼巴网站建设宝安做棋牌网站建设哪家技术好
  • 网站建设与设计方案昆明调整高风险地区
  • 网站建设奖项互联网网站开发发展
  • 在平台企业网站推广怎么做做网站什么样的域名好
  • 海宁住房和城乡规划建设局网站交互设计师工资一般多少
  • 百度创意产品网站二手房在哪个网站做合同
  • 鲜花网站建设结构布局上海网站建设一般多少钱
  • 网站备案的幕布是什么来的wordpress中国风
  • 淘宝网站推广工具建湖网站建设
  • 响应式网站和展示式区别工程合同模板