MySQL原理和实践

一条SQL的执行过程 1. 客户端连接到服务端的连接器 2. 分析器进行词法分析(解析关键字和字段名)和语法分析(判断是否符合MySQL语法) 3. 如果是查询语句,有缓存则查缓存 4. 优化器决定SQL的执行顺序 5. 表权限校验,执行器调用存储引擎读写接口进行操作。如果是InnoDB写操作具体流程是 1. 调用查询接口查询数据 2. 查询引擎从磁盘读取到内存,返回数据 3. 执行器变更数据,调用查询引擎写入数据 4. 新数据更新到内存,写入redolog 5. 执行器写binlog 6. 提交事务,写数据 r
阅读更多

Kafka原理和实践

Kafka部署方案选择 * 操作系统 * I/O模型的选择:I/O模型:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO几种模型。Java Socket对象的阻塞&非阻塞模式对象前两种;Linux的select函数属于IO多路复用;epoll系统调用介于第三四种模型之间;第五种模型Linux少有支持,Windows由OCP线程模型。Kafka客户端底层使用了Java的selector实现,selector在Linux上实现机制是epoll,Windows上实现机制是select。因此Kafka部署在Linux上更有优势,I/O性能更强。 * 零拷贝支持:从磁盘读取数据发送到
阅读更多

Redis原理和实践

数据结构 整体组织形式 全局哈希表,每个哈希桶存储键值对,值存储的是指向实际元素的指针。redis采用链地址法(拉链法)解决哈希冲突,当链表长度过长时查询速度会变慢,所以链表长度过长时需要rehash,增加哈希桶数量 rehash过程: 使用两个全局哈希表实现 1. 给哈希表2分配更大的空间,比如哈希表1的两倍 2. 把哈希表1的数据重新映射拷贝到哈希表2 3. 释放哈希表1的空间 渐进式rehash: 时机:负载因子(哈希表已保存的节点数量/哈希表大小)大于1且没有进行bgsave或bgrewiteaof时。或者负载因子大于5时 原因:第2步涉及大量数据拷贝,如果一次性把哈
阅读更多