ZW'Blog

追求极致

MySQL 锁

MySQL 锁

锁分类 加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁(mysql server 实现)的典型使用场景是,做全库逻辑备份 表级锁(mysql server 实现)分两种,一种是表锁,一种是元数据锁(MDL)。 行级锁(innodb 引擎 实现)。 两阶段锁协议 在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到...

MySQL 锁

MySQL 锁

锁分类 加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁(mysql server 实现)的典型使用场景是,做全库逻辑备份 表级锁(mysql server 实现)分两种,一种是表锁,一种是元数据锁(MDL)。 行级锁(innodb 引擎 实现)。 间隙锁(Gap Lock), 锁的就是两个值之间的空隙 ,防止幻读.跟间隙锁存在冲突关系的,是“往这个间隙...

MySQL 索引

MySQL 索引

什么是索引 数据库索引是一种能够改善表操作速度的数据结构(哈希表、有序数组和搜索树等)。就像是书的目录。在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。 CREATE TABLE `tuser` ( `id` int(11) NOT NULL, `id_card` varchar(32) DEFAULT NULL, ...

IM 心跳机制

IM 心跳机制

心跳是什么 由于在长连接的场景下,客户端和服务端并不是一直处于通信状态,如果双方长期没有沟通则双方都不清楚对方目前的状态,所以需要发送一段很小的报文告诉对方“我还活着” 为什么有了tcp 的KeepAlive 机制还要在应用层实现心跳机制呢? TCP的KeepAlive机制只能保证连接的存在,但是并不能保证客户端以及服务端的可用性。 例如: 某台服务器因为某些原因导致负载超高,CP...

《乔布斯传》 感

《乔布斯传》 感

1.优秀的团队。乔布斯原话,一流选手喜欢和一流选手共事,他们只是不喜欢和三流选手在一起罢了 ,一个团队二流选手多了就会慢慢出现三流选手,最后拉胯整个团队。 2.提高品味。在乔布斯眼里微软,惠普是没有“品位”的,因为他们出发点就是怎么赚更多的钱,而不是做出一流的产品。挣钱只是衡量成功与否的标准之一。 3.集中精力。在对的事情上追求极致,完美,think different。乔布斯可以为发布...

IM 状态同步

IM 状态同步

im 状态简单抽象 在线 ,离线 用户登录/登出时更新状态 登录时获取好友状态 userA 已经登录后,好友有状态变化同步 方案一 userA 轮训去服务器拉取好友状态 缺点: 1. 可能会有延迟 2. 大量无效的轮询请求,占用服务器资源 方案二 userB 状态改变后反向 查找 userB的好友,主动通知好友. 缺点:好友数量过多,可能形成”消息风...

IM 消息如何保证时序性和一致性

IM 消息如何保证时序性和一致性

导致消息乱序的原因 时间难以保证。在分布式场景中,难以找到一个”全局时钟”去决定消息的时序。 网络传输。先发送的消息经过网络传输可能会比后面的消息晚到服务器。 多线程。即便是先发送的消息先到达服务器。但是由于多线程,也无法保证先发的消息先处理完成。 优化方案一,增加序列号 user1给 user2 依次发送了3条消息(msg1,msg2,msg3),结果经过网络传输或...

IM 消息如何保证可靠性

IM 消息如何保证可靠性

可靠性 IM的可靠性即保证IM的消息不丢失,一定送达。 tcp协议不就能保证消息不丢失吗? 这里的消息不丢失和tcp 协议的可靠性不是一个层面的东西。这里说的消息不丢失是指应用层的消息不丢失。tcp 协议只能保证消息在传输层不丢失。而从传输层到应用层还有一个过程,这里一旦出错,就可能会出现明明消息到达了,用户却看不到消息的情况。所以一个完善的im应用必须保证在应用层实现消息可靠 2个报文...

MySQL 一条sql语句是怎么执行的

sql 语句是怎么执行的

查询语句怎么执行的 连接器 MySQL服务器和MySQL客户端连接使用tcp协议。如果认证通过,连接器会到权限表中查出账号拥有的权限,以后所有的权限判断都是基于此时查出的权限。也就是说用户连接成功后,在修改用户权限,是对已成功的连接不会成效的。 连接建立成功后,如果长时间没有操作,连接器会自动断开连接。断开连接的时间是由wait_timeout控制的,默认值是8小时。 查询缓存 My...

MySQL 事物

MySQL 事物

定义 一组原子性的sql,要么都执行,要么都不执行。特性:ACID(原子性,一致性,隔离性,持久性) 隔离级别 未提交读。一个事物可以读取另一个事物中还没提交的数据(脏读) 提交读(又叫不可重复读)。一个事物开始时只能读取已提交的事物的修改(提交读的解释);事物t1开始时,读取行row1,执行事物过程中,A被其他事物t2修改,提交,事物t1再次读取row1,会导致前后读取的结果不...