社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
快照:之前的某一个历史的状态(类比虚拟机的快照),用于实现原子性
隔离性:通过锁机制来实现
锁:共享锁,排它锁,独占锁,临键锁,间隙锁,自增锁,意向锁
持久性:使用来实现
WAL日志:write ahead log,预写日志
Hbase主要操作内存,因为速度快。也是用WAL来保证数据不丢失。
数据在内存中,然后通过fsync写进磁盘。
一致性:是数据库的根本追求。
MySQL主要有3种日志:redolog,undolog,binlog(其他还有relaylog,slowlog慢查询日志)
binlog是归属server的,无论什么存储引擎,都有这个log
redolog,undolog是归属innodb的,如果换成myisam,就不存在这两种log
逻辑日志:数据是统一放在磁盘里的,要想读取,需要拉取到内存(一次读取的最小逻辑单元的单位是页),页的大小和操作系统相关,innodb默认一次读取16kb的数据。逻辑日志是对当前的sql语句做一次记录。
物理日志:物理日志表示修改当前页的数据。
MVCC:multipart version concurrency control 多版本并发控制
B修改时,A可以通过undolog读取历史数据
数据的存储 :当前进程内存->操作系统内存->磁盘
电脑启动完成之后,所有的硬件设备交由内核来控制,用户空间要与内核交互,才能访问设备的资源。
kafka通过零拷贝、顺序读写,减少了内存复制,直接写进磁盘中
以下:考虑到不同的时候可能断电,这三种方式的安全性 1>2>0,默认是使用1
做n次数据的修改,并不是每一次都直接写进磁盘中。会先写进内存,内存占用达到一定阈值之后才写进磁盘中。
如何理解redolog?
redolog文件是循环存储的
默认隔离级别:
MySQL:可重复读
Oracle:读已提交
脏读:读没提交的数据
RC (READ COMMITTED)读更新之后的快照数据,永远是最新的快照
RR (REPEATABLE READ)读当前事务开启之前的快照数据
在一个表中,有2个用户不可见的列:createtime
,deletetime
(存的是当前事务的id值,而不是时间戳)
读数据的时候,读取的是createtime
小于等于当前事务id
,并且deletetime
为空或deletetime
大于等于当前事务id
的数据
间隙锁是否能解决幻读问题?
间隙锁:给某一个范围加锁。
select * from table1 for update
锁的是索引
select * 是全表扫描,没有使用索引
表级锁和行级锁辨析:
如下图,innodb
可以主动探知到死锁
如果设置了自增id,即使插入失败,id也会增加。
同样,使用duplicate update语句时,即使走的是update,也会让id增加。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!