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步涉及大量数据拷贝,如果一次性把哈
阅读更多
MySQL实战45讲-阅读笔记

MySQL实战45讲-阅读笔记

SQL查询语句的执行 执行流程如下 具体拆解如下, 1. 连接器 * 长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。使用长连接可能会导致MySQL占用内存快速上涨,原因是执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开的时候才释放。解决方案有两个 * 定期断开长连接 * MySQL 5.7或更新版本可以执行mysql_reset_connection来重新初始化连接资源 2. 查询缓存 * 除非是静态表,否则不建议开启查询缓存。表只要有一次更
阅读更多