- 博客(10)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 分布式算法学习笔记---ACID
单机上实现ACID可以通过锁,时间序列等机制实现。分布式系统由于需要协调多个节点,单机的实现方案就不能保证多个节点之间的ACID特性。此时就需要分布式事务协议。比如二阶段提交,TCC。二阶段提交协议1 选举协调者2 客户端发消息给协调者3 协调者发消息给其他事务的参与者,进入提交请求阶段(投票阶段)4...
2020-08-12 23:48:00 260
原创 Mysql学习笔记--删除数据
首先 innodb_file_per_table 要设置为ONinnodb_file_per_table:1 这个参数设置为 OFF 表示的是,表的数据放在系统共享表空间,也就是跟数据字典放在一起;2 这个参数设置为 ON 表示的是,每个 InnoDB 表数据存储在一个以 .ibd 为后缀的文件中。如果设置为OFF,则drop table也是不会回收空间的。删除流程MYSQL的删除并不是真正的把数据删除,只是标志为删除。比如删除ID为300的行,则是把这个记录标记为删除。后续插入的时候是会复用
2020-08-12 13:55:38 254
原创 分布式算法学习---CAP理论
CAP理论也叫做CAP不可能三角,就是三种特性不可能同时满足。CAP分别指的是:C:一致性。就是当有客户端修改了数据以后,要同步到集群所有的机器,才会返回成功,这时,无论客户端往哪台机器去读取数据都是最新的数据。如果发生了网络问题,A:可用性。当客户端修改了数据,只要在一台机器修改成功了,就立即返回了,不保证其他机器上的数据都是最新的。当集群间的机器发生网络问题的时候,客户端去读取数据就会发生读取到的数据不是最新的,但...
2020-08-10 23:27:48 2026
原创 MYSQL学习笔记---抖动一下
有时在正常情况下,工作的很好的SQL语句,突然就变慢了一下。MYSQL发生了抖动,这是什么原因?首先从MYSQL的wal机制说起。INNODB在处理更新语句的时候,只是写了一次redo log就返回了。那么就会产生“胀页”。当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。产生了胀页,就要找时间进行flush,把内存的数据刷入到磁盘里面,保持数据的一致。以赊账的例子来看:那么发生MYSQL抖动一下的情
2020-08-10 19:42:40 122
原创 MYSQL学习笔记---字符窜加索引
比如邮箱登陆的系统,有一张表:mysql> create table SUser(ID bigint unsigned primary key,email varchar(64), ... )engine=innodb; 有一条SQL语句:mysql> select f1, f2 from SUser where email='xxx';不在email加索引的话,就会进行全盘扫描,效率比较低。MySQL 是支持前缀索引的,有两种加索引的方式:mysql> alter
2020-08-06 13:52:25 162
原创 分布式算法学习---拜占庭将军问题
拜占庭将军问题很好的抽象了分布式系统面临的共识问题。以六国与秦国作战作为类比,先做以下的假设:忠诚的将军,你可以理解为正常运行的计算机节点;叛变的将军,你可以理解为出现故障并会发送误导信息的计算机节点;信使被杀,可以理解为通讯故障、信息丢失;信使被间谍替换,可以理解为通讯被中间人攻击,攻击者在恶意伪造信息和劫持通讯。以三个国家攻打秦国为例,假设秦国很强大,需要半数以上的国家同时进攻才能打败秦国。统帅为苏秦。那么苏秦面临着怎么统一作战的问题。二忠一叛的难题按照少数服从多数的原则,只要大多数的
2020-08-06 00:02:23 723
原创 MYSQL学习笔记---选择索引
在不同的场景下,是选择普通索引还是唯一索引呢?假设有一个市民系统,业务层面已经保证了身份证号是唯一的,有下面的查询:select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz';这个SQL语句肯定要考虑建索引。由于身份证号字段比较大,所以考虑是普通索引或者唯一索引。从业务上已经保证身份证不会重复,所以从业务上来说都是正确的。从查询和更新的性能来说呢?查询过程比如有下面的语句:select id from T where k=5这
2020-08-05 00:37:00 157
原创 MYSQL学习笔记---值到底是多少
建表和插入语句如下:mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;insert into t(id, k) values(1,1),(2,2);启动的事务:A,B,C查到的值是?首先,两种启动事务的方式:1 begin/start transaction,没有直接启动事务,而是要到执行第一条快照读语句的
2020-08-04 20:18:37 144
原创 MYSQL学习笔记--行锁
MYISAM不支持行锁,INNODB支持行锁。从并法度来说INNODB要比MYISAM要大。这也是INNODB替代MYISAM的重要原因之一。从两阶段锁说起下面的情况会发生什么?事务 B 的 update 语句会被阻塞,直到事务 A 执行 commit 之后,事务 B 才能继续执行。那么就有一个结论:在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。从这个可以得出:如果你的事务中需要锁多个行,要把最可能造成锁冲突、
2020-08-03 20:12:48 199
原创 MSQL学习笔记--锁
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁全局锁就是把整个数据库的实例加锁。命令是 Flush tables with read lock (FTWRL)。数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句都会被阻塞。主要的作用就是做全库逻辑备份,也就是把整库每个表都 select 出来存成文本。会出现很危险的问题:1 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆;2 如果你在从库上备份,那么
2020-08-03 19:43:08 179
美颜需要替换眉毛确定眉毛的长度
2017-04-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人