Mysql的一些特性

1.引擎
最常用的引擎分别有InnoDB和myisam两种
区别:
innodb支持事务及四种隔离级别(读已提交、读未提交、可重复读、串行化),myisam不支持
myisam支持FULLTEXT索引,innodb不支持
InnoDB 中存在表锁和行锁,myisam只有表锁

2.rollback的原理
rollback实现主要是依据MVCC来实现的

为了实现多版本控制,InnoDB 引擎在每一行数据中都添加了几个隐藏字段:

DB_TRX_ID:记录最近一次对本记录做(insert/upadte)的事务 ID,大小为 6 字节;

DB_ROLL_PTR:回滚指针,指向回滚段的 undo log,大小为 7 字节;

DB_ROW_ID:单调递增的行 ID,大小为 6 字节,当表没有主键索引或者非空唯一索引的时候 InnoDB 就用这个字段创聚簇索引,这个字段跟MVCC的实现没有关系。

MVCC 在 InnoDB 的实现依赖 undo log 和 read view。undo log 中记录的是数据表记录行的多个版本,也就是事务执行过程中的回滚段,其实就是MVCC 中的一行原始数据的多个版本镜像数据。read view 主要用来判断当前版本数据的可见性。

undo log

undo log 上面讲解的时候说go会用于 MVCC 机制。因为 undo log 中存储的是老版本的数据,如果一个事务读取当前行,但是当前行记录不可见,那么可以顺着 undo log 链表找到满足其可见性的版本。

版本链

每条 undo log 也都有一个 old_trx_id 属性和一个 old_roll_pointer 属性(INSERT 操作对应的 undo log 没有这些属性,因为该记录没有更早的版本)用于记录上一个 undo log。最终这些 undo log 就连接起来形成了一个链表,这个链表称之为版本链,版本链的头节点就是当前记录的最新值。

3.mysql的读写分离
利用主从数据库(master-slave)来实现读写分离,从而分担主数据库的压力。在多个服务器上部署mysql,将其中一台认为主数据库(master),而其他为从数据库,实现主从同步。其中主数据库负责主动写的操作,而从数据库则只负责主动读的操作(slave从数据库仍然会被动的进行写操作,为了保持数据一致性),这样就可以很大程度上的避免数据丢失的问题,同时也可减少数据库的连接,减轻主数据库的负载。

主从同步复制有以下几种方式:

(1)同步复制,master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。

(2)异步复制,master只需要完成自己的数据库操作即可,至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。(master的数据库操作是可以并发的执行的,但是salve只能从relay log中一条一条的读取执行。若master的写操作很频繁,Mysql-B很可能就跟不上了。)

(3)半同步复制,master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。

实现:
MySQL的读写分离

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值