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

公司平台网站建设做一个网站的建设过程

公司平台网站建设,做一个网站的建设过程,企业邮箱网易,网站开发用jquery吗文章目录1、事务1.1、ACID 特性1.1.1、原子性undo log1.1.2、一致性1.1.3、* 隔离性1.1.4、持久性redo log1.2、事务控制语句2、隔离级别2.1、隔离级别的分类2.1.1、读未提交 RU2.1.2、读已提交 RC2.1.3、可重复读 RR2.1.4、串行化 SC2.2、并发事务读异常2.2.1、* 脏读2.2.2、*… 文章目录1、事务1.1、ACID 特性1.1.1、原子性undo log1.1.2、一致性1.1.3、* 隔离性1.1.4、持久性redo log1.2、事务控制语句2、隔离级别2.1、隔离级别的分类2.1.1、读未提交 RU2.1.2、读已提交 RC2.1.3、可重复读 RR2.1.4、串行化 SC2.2、并发事务读异常2.2.1、* 脏读2.2.2、* 不可重复读2.2.3、* 幻读2.2.4、测试代码3、MVCC3.1、当前读 快照读3.2、Read View3.2.1、read view 生成3.2.2、read view 属性3.3、聚集索引隐藏列3.4、undo log3.4、事务的可见性1、事务 事务 (transaction) 并发的场景下用户定义的操作序列这些操作要么都做要么都不做不可分割。 目的将数据库从一种一致性状态转换为另一种一致性状态保证系统始终处于一个完整且正确的状态。 1.1、ACID 特性 原子性 (Atomicity)一致性 (Consistency)隔离性 (Isolation)持久性 (Durability) 1.1.1、原子性 一个事务中的操作要么都做要么都不做不存在中间状态是一个不可分割的工作单位。若事务执行过程发生错误回滚到事务初始状态。 实现机制 undo log。 undo log undo log 回滚日志存放在共享表空间内用于存储旧版本的数据。 undo log是逻辑日志回滚时将数据库逻辑地恢复到原来的样子也就是说根据 undo log 记录的事务 DML 操作做之前的相反操作实现回滚操作保证了事务的原子性和一致性。 此外undo log 也可以用来实现 MVCC。用户读取记录时若该记录被其他事务占用当前事务可以通过 undo log 读取之前事务 DML 操作提交后的行版本信息以此实现非锁定读。 总结 undo log 的作用 事务回滚记录事务 DML 操作步骤通过逆运算逻辑取反实现事务回滚。MVCC记录事务 DML 操作提交后产生的行版本信息。 1.1.2、一致性 事务的前后数据满足完整性约束数据库保持一致性状态。 一致性指的是事务将数据库从一种一致性状态转变为下一种一致性的状态在事务执行前后数据库完整性约束没有被破坏。一个事务需要提交后才会被其他事务可见。 一致性的种类 数据一致性完整性约束必须遵守预期一致性逻辑一致性适当破坏。例查询是否存在不存在写入可能出现数据查询不存在插入时却存在报错。 实现机制原子性 隔离性 一致性实现。 1.1.3、* 隔离性 并发事务间相互隔离互不影响避免多个事务并发异步执行进而导致数据的不一致。 实现机制为了提升性能设定不同程度的隔离级别适度破坏逻辑一致性。 锁用来并发处理 DML 操作。数据库中提供粒度锁的策略针对表聚集索引 B 树、页聚集索引 B 树叶子节点、行叶子节点中某一段行记录三种粒度加锁MVCC 多版本并发控制。主要解决一致性非锁读通过记录和获取行版本而不是使用锁来限制读操作从而实现高效并发读性能。 1.1.4、持久性 事务一旦提交其结果就是永久性的即使系统故障也不丢失。 实现机制 redo log。 redo log redo log 重做日志用于实现事务的持久性。 事务提交后事务 DML 操作持久化记录事务 DML 操作对应物理页修改的内容写入 redo log 磁盘文件。发生宕机等故障时恢复数据库数据。 redo log 属于 WAL (Write Ahead Log)预写日志用于数据恢复顺序写磁盘再通过其他线程异步刷到 B 树。与 redis 的aof类似。 1.2、事务控制语句 innoDB 中一条 sql 语句是一个事务。若想多条语句构成事务采用事务控制语句。 -- 显示开启事务 START | BEGIN TRANSACTION -- 提交事务并使得已对数据库做的所有修改持久化 COMMIT -- 回滚事务结束用户的事务并撤销正在进行的所有未提交的修改 ROLLBACK -- 创建一个保存点一个事务可以有多个保存点 SAVEPOINT identifier -- 删除一个保存点 RELEASE SAVEPOINT identifier -- 事务回滚到保存点 ROLLBACK TO [SAVEPOINT] identifier2、隔离级别 ISO 和 ANIS SQL 标准制定了四种事务隔离级别目的在于提升数据库并发性能。 不同隔离级别的区别在于读操作的加锁写操作均加排他锁。隔离级别的高低与事务请求锁的数量和保持锁时间的长短相关。级别越高性能越低级别越低逻辑一致性受到的影响越大。 2.1、隔离级别的分类 读未提交事务还未提交其变更就能被其他事务看到读已提交事务提交后其变更才能被其他事务看到可重复读事务执行过程中看到的数据一直跟与该事务启动时看到的数据是一致的串行化对记录加上读写锁在多个事务对这条记录进行读写操作时如果发生了读写冲突的时候后访问的事务必须等前一个事务执行完成才能继续执行 2.1.1、读未提交 RU 读未提交READ UNCOMMITTED。事务还未提交其修改就能被其他事务看到。 读不做处理写自动加 X 锁 逻辑错误脏读。 2.1.2、读已提交 RC 读已提交READ COMMITTED。事务提交后其他事务才能看到修改。大部分数据库采用的隔离级别如 oracle, SQL Server 等。 读MVCC读取最新版本的行数据写自动加 X 锁 MVCC 在事务期间每次读取数据时生成新的 read view这也意味着同一事务多次读取同一条数据可能出现数据不一致不可重复读。因为在多次读取数据期间可能有其他事务修改并提交了该条记录。 逻辑错误不可重复读。 2.1.3、可重复读 RR 可重复读 (RR) REPEATABLE READ事务执行过程中看到的数据一直跟与该事务启动时看到的数据是一致的。MySQL InnoDB 引擎的默认隔离级别。 读MVCC读取事务开始前版本的行数据写自动加 X 锁 MVCC 在事务启动时生成新的 read view整个事务期间读取数据使用这个 read view这样保证了在事务期间读到的数据都是事务启动前的记录。 逻辑错误幻读。 2.1.4、串行化 SC 串行化SERIALIZABLE对记录加上读写锁在多个事务对这条记录进行读写操作时如果发生了读写冲突的时候后访问的事务必须等前一个事务执行完成才能继续执行。 读自动加 S 锁 (next-key locking)写自动加 X 锁 2.2、并发事务读异常 不同隔离级别由于逻辑一致性问题造成的并发异常。 脏读读到其他事务未提交的数据。不可重复读前后读取的数据不一致。UPDATE幻读前后读取的记录数量不一致。INSERT DELETE 2.2.1、* 脏读 一个事务读到了另一个事务未提交的修改读到脏数据。 不可重复读在 RU 隔离级别存在。在读写分离的场景下可以将 slave 节点设置为 READ UNCOMMITTED。此时脏读不影响在 slave 上查询并不需要特别精准的返回值。 例如session B 读到了 session A 中事务未提交的脏数据。 seqsession Asession B1SET tx_isolation ‘READ UNCOMMITTED’;SET tx_isolation ‘READ UNCOMMITTED’;2BEGIN;BEGIN;4UPDATE account_t SET money money - 100 WHERE name ‘A’;5SELECT money FROM account_t WHERE name ‘A’;6COMMIT;COMMIT; 2.2.2、* 不可重复读 同一事务内两次读取同一个数据前后不一样。一个事务读到了另一个事务的提交的修改 不可重复读在 RC 隔离级别存在。一般来说不可重复读的问题可以接受因为读到已经提交的数据不会带来很大的问题。 例如session B 读到了 session A 中事务提交的修改造成两次读取同一个数据不一样。 seqsession Asession B1SET tx_isolation ‘READ COMMITTED’;SET tx_isolation ‘READ COMMITTED’;2BEGIN;BEGIN;4SELECT money FROM account_t WHERE name ‘A’;5UPDATE account_t SET money money - 100 WHERE name ‘A’;6COMMIT ;SELECT money FROM account_t WHERE name ‘A’;7COMMIT; 2.2.3、* 幻读 同一事务两次读取同一个范围内的记录得到的结果集不一样。 幻读在 RR 隔离级别存在仅在当前读下出现。 例如由于 session A 的事务提交了插入操作导致 session B 两次查询范围的结果不一样。 seqsession Asession B1SET tx_isolation ‘REPEATABLE READ’;SET tx_isolation ‘REPEATABLE READ’;2BEGIN;BEGIN;4SELECT * FROM account_t WHERE id 2;5INSERT INTO account_t VALUES (4, ‘D’, 1000);6COMMIT ;7SELECT * FROM account_t WHERE id 2;COMMIT; 解决通过读加锁next-key locking seqsession Asession B1SET tx_isolation ‘REPEATABLE READ’;SET tx_isolation ‘REPEATABLE READ’;2BEGIN;BEGIN;4SELECT * FROM account_t WHERE id 2 FOR UPDATE | IN SHARE MODE;INSERT INTO account_t VALUES (4, ‘D’, 1000);6COMMIT ;7SELECT * FROM account_t WHERE id 2;COMMIT; MySQL InnoDB 引擎的默认隔离级别是可重复读但是它可以很大程度上避免幻读现象。 针对快照读通过 MVCC 方式解决了幻读。因为可重复读隔离级别下事务执行过程中看到的数据一直跟这个事务启动时看到的数据是一致的即使中途有其他事务插入了一条数据是查询不出来这条数据的所以就很好了避免幻读问题。针对当前读是通过 next-key lock记录锁间隙锁方式解决了幻读。因为当执行 select … for update 语句的时候会加上 next-key lock如果有其他事务在 next-key lock 锁范围内插入了一条记录那么这个插入语句就会被阻塞无法成功插入所以就很好了避免幻读问题。 2.2.4、测试代码 DROP TABLE IF EXISTS account_t; CREATE TABLE account_t (id INT(11) NOT NULL,name VARCHAR(225) DEFAULT NULL,money INT(11) DEFAULT 0,PRIMARY KEY(id),KEY idx_name (name) ) ENGINE innoDB AUTO_INCREMENT0 DEFAULT CHARSET utf8;SELECT * FROM account_t;INSERT INTO account_t VALUES (1, A, 1000), (2, B, 1000), (3, B, 1000);ROLLBACK;-- 脏读一个事务读取了另一个未提交事务的修改 -- 隔离级别READ UNCOMMITTED SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; BEGIN -- 脏读事务1 UPDATE account_t SET money money - 100 WHERE name A; -- 脏读事务2 SELECT money FROM account_t WHERE name A; COMMIT;-- 不可重复读一个事务内两次读取同一个数据不一样 -- 隔离级别READ COMMITTED解决了脏读问题 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN -- 不可重复读事务1 UPDATE account_t SET money money - 100 WHERE name A; -- 不可重复读事务2 SELECT money FROM account_t WHERE name A; COMMIT;-- 幻读一个事务内两次读取同一个范围内的记录得到的结果集不一样。 -- 隔离级别REPEATABLE READ解决了不可重复读 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN -- 幻读事务1 INSERT INTO account_t VALUES (4, D, 1000); -- 幻读事务2 SELECT * FROM account_t WHERE id 2; -- 幻读事务2解决幻读问题 SELECT * FROM account_t WHERE id 2 FOR UPDATE; COMMIT;3、MVCC 多版本并发控制 MVCC(Multiversion Concurrency Control)用来实现一致性的非锁定读。非锁定读是指不需要等待访问记录 X 锁的释放。因此 MVCC 没有读写阻塞只有写写阻塞提高了并发性。 MVCC 只在读已提交和可重复读的隔离级别下工作与其他隔离级别不兼容。 MVCC 通过 read view聚集索引隐藏列undo log 来实现关键是解决事务的可见性问题。 3.1、当前读 快照读 innoDB 支持的读方式 当前读锁定读读取最新版本的记录对读取的记录加锁悲观锁保证其他并发事务不能修改当前记录。 select ... lock in share mode | for updateinsert, delete, update不管什么隔离级别DML 操作均加锁。undo log 快照读非锁定读读取记录的一个快照对读取的记录不加锁。普通 SELECT 语句 MVCC 的读指的是快照读非锁定读因为没有事务需要对历史数据进行 DML 操作。 在读已提交和可重复读的隔离级别下对于快照数据的定义不同 RC 级别读取当前事务锁定行的最新行记录。RR 级别读取启动事务时的行记录版本。 3.2、Read View read view 是事务进行快照读的时候产生的读视图保存了当前事务开启时所有活跃事务的列表。 3.2.1、read view 生成 在读已提交和可重复读的隔离级别下read view 的区别仅在于创建 read view 的时机不同 RC 级别每次读取数据时生成新的 read view。RR 级别启动事务时生成新的 read view一直使用到事务提交。 3.2.2、read view 属性 m_ids创建 read view 时活跃事务的事务 id 列表。活跃事务指的是已启动但是未提交的事务。min_trx_id创建 read view 时活跃事务的最小事务 idmax_trx_id创建 read view 时预分配给下一个未开启事务的 id即全局事务的最大事务 id 1creator_trx_id创建该 read view 的事务的事务 id 创建 read view 时read view 属性与事务状态已提交 - 启动未提交 - 未启动的关系 3.3、聚集索引隐藏列 聚集索引记录的隐藏列 trx_id事务修改记录时trx_id 记录生成该版本的事务 id。roll_pointer事务修改记录时将旧记录写入 undo logroll_pointer 指向旧版本记录通过它可以找到修改前的记录。 3.4、undo log 用户读取记录时若该记录被其他事务占用当前事务可以通过 undo 读取之前事务 DML 操作提交后的行版本信息以此实现非锁定读。 innoDB 通过 undo log 保存每个记录的多个版本每个事务读到的记录版本可能是不一样的。在同一个事务中用户只能看到该事务创建快照之前已经提交的修改和该事务本身做的修改。 3.4、事务的可见性 事务的可见性问题当前事务访问某条记录时该记录是否可见 判断规则是判断生成该版本的事务 id (trx_id)与生成 read view 的当前事务 id 的关系。具体来说生成 read view 的当前事务处于启动未提交状态重点判断生成该版本事务的所处状态。 trx_id creator_trx_id当前事务访问自己修改的记录该版本记录对当前事务可见。trx_id min_trx_id生成该版本的事务在当前事务生成 read view 前已提交该版本记录对当前事务可见。trx_id max_trx_id生成该版本的事务在当前事务生成 read view 后启动该版本记录对当前事务不可见。min_trx trx_id max_trx_id判断生成该版本的事务 id 是否在启动未提交的事务 id 列表中 存在生成该版本记录的事务已启动但未提交该版本记录对当前事务不可见不在生成该版本记录的事务已提交该版本记录对当前事务可见 整理一下方便记忆 trx_id creator_trx_id版本事务 当前事务trx_id min_trx_id版本事务已提交可见。trx_id max_trx_id 版本事务后启动不可见。min_trx trx_id max_trx_id版本事务 id 是否在启动未提交的事务 id 列表中 存在版本事务启动未提交不可见不在版本事务已提交可见
http://www.tj-hxxt.cn/news/232566.html

相关文章:

  • 管网建设网站全部免费网站软件
  • 网站可以做参考文献吗做网站的原型文件下载
  • 苏州网站建设熊掌平面设计黑白创意图片
  • 网站文章收录高端设计网站公司
  • iis默认网站打不开成都有哪些网站开发公司
  • 班级网站 建设模板网站关键词数量减少
  • 新沂做网站番禺网站建设多少钱
  • 做校园网站 怎么备案商务网站欣赏
  • 门户网站类是什么意思公司做网站的步骤
  • 企业网站服务器租用wordpress 不更新
  • 网站建站怎么在服务器上部署网站
  • 建筑钢结构网站大安区网站建设
  • 用地方别名做网站名支持html5的网站
  • 网站自主制作平台各类最牛网站建设
  • 网站tdk设置界面江苏高效网站制作公司
  • 财经门户网站建设专业高端网站建设
  • 四川省建设安全协会网站大连零基础网站建设教学哪里有
  • 成都网站建设qghl亿网网络科技有限公司
  • 第三方做网站招商网站建设地点
  • 可以做思维导图的网站asp怎么样做网站后台
  • 协会网站建设需求文档软件定制化
  • 网站维护服务费南阳网站建设制作价格
  • 医药网站建设中图片宁晋网站建设设计
  • 北京的制作网站的公司有哪些高创园网站建设方案
  • 做网站公司商丘新网站如何做营销
  • 网站建设与规划活动推广宣传方案
  • 网站建设意向表深圳网页设计学院
  • 建设网站的工作步骤西安市建设工程信息网诚信信息平台诚信承诺书在哪儿下载
  • 帮别人做网站赚钱吗网站建设 psd
  • 有了网站域名如何做网站汽车网页模板