从阻塞IO到IO多路复用到异步IO
虽然之前也了解过NIO的原理,但是涉及到select、epoll还是有点儿不够理解,时间一长又忘了。这次看到一篇非常好的文章: 《你管这破玩意叫 IO 多路复用?》 算是彻底解决了内心的疑惑!跟着梳理一下,顺便对比着看一下之前写的记录。 阻塞io - read 伪非阻塞 - 多线程 真正的非阻塞read() - 第一阶段非阻塞 伪多路复用 - 轮询 真正的多...
虽然之前也了解过NIO的原理,但是涉及到select、epoll还是有点儿不够理解,时间一长又忘了。这次看到一篇非常好的文章: 《你管这破玩意叫 IO 多路复用?》 算是彻底解决了内心的疑惑!跟着梳理一下,顺便对比着看一下之前写的记录。 阻塞io - read 伪非阻塞 - 多线程 真正的非阻塞read() - 第一阶段非阻塞 伪多路复用 - 轮询 真正的多...
终于开始聊事务了。 所谓事务 原子性Atomicity:单个事务要做的 持久性Durability:单个事务要做的 隔离性Isolation:事务之间不能相互影响 一致性Consistency:最终想达到的状态 事务语法 autocomit redo log:为了提升性能的同时保证一致...
Innodb以磁盘作为存储介质,所以用的时候需要加载到内存。Innodb管理数据的基本单位是页,每次都加载一页数据到内存里。 innodb按页加载数据,是为了读下一条数据的时候能够直接从内存里的同一页取,而不用再次从磁盘取,减少一次磁盘IO。同样的思想,innodb如果能在内存中放很多个页,就能减少很多从磁盘加载页的IO开销。理想情况下,如果内存足够大,能放下所有表的所有索引的所有页,取数...
Innodb - 行组成Innodb - 页,页组成了innodb的表。页是innodb管理存储空间的基本单位,但是表才是逻辑上对一堆相同结构的数据管理的基本单位。 表遍历的性能问题 区(extent) 段(segment) 碎片区(fragment) 段链表 表的物理存储 mysql的数据存放位置 连接mysql ...
在Innodb - 页中,介绍了页内行记录的排列方式——类似于一个拥有一层目录的跳表,可以加速行的定位。既然现在页与页之间也构成了双向链表,那么类比页内跳表,可以在页与页之间构建一个页间跳表,以加速页的定位。 有序是前提 索引 再来一页 再来一层 那它为什么不叫跳表? 层级意味着IO次数 ...
之前介绍了Innodb - 行,行是一种紧凑存放列值的结构,而行是放在页page里的。 行怎么在页内排列 物理上按插入顺序排列 逻辑上按主键序排列 有序链表的查询 metadata tailer header 行组成页,页是innodb管理存储空间的基本单位。 这一点非常好理解,和虚拟内存使用页式管理一模一样。当需...
Innodb给使用者的抽象,大致就是表,每个表有很多行,每个行可能有很多列。 COMPACT 怎么存储列数据 列定界 null值 metadata 隐藏列 语法 一行是怎么存储的?逻辑上,它拥有多个格子分别代表多个列,实际上,它是一堆非常紧凑的二进制。 innodb有好几种存储行的方案: ...
Innodb是 以磁盘作为存储介质的MySQL引擎。既然存储在磁盘上,那么: 关机之后记录就还会存在; 使用的时候需要加载到内存; 内容有改动的时候要从内存写回磁盘才算真正的保存下来; 改动的内容没写回磁盘之前,如果程序崩溃、服务器宕机,修改就丢失了; 等等,听起来怎么这么耳熟?脏页?写回?LRU?学计算机组成原理的时候,虚拟内存不也是这么玩儿的?是的。大家都是从...
之前在代理 - shadowsocks介绍了使用ss做代理的方式,部署简单,使用方便。但用了一个月之后,奇奇怪怪的事情发生了 ┓( ´∀` )┏ 奇奇怪怪的问题 v2ray 配置 客户端 websocket + tls + web(eg: nginx) websocket 配置nginx ...
计算机网络整体梳理了比较宏观的只是,但是在一些问题上还是让人有很多问号。比如为什么数据链路层要使用广播发消息、为什么最小报文得是64Byte。 本以为数据链路层没什么太多好说的,但细细一看,东西还挺多,而且还挺关键。 为什么局域网要使用广播 NIC 为什么最小帧是64B 到底什么是Ethernet 集线器hub - 物理层上扩大以太网 ...