- 博客(8)
- 收藏
- 关注
原创 MYSQL底层原理4-Innodb文件系统的基本结构
,默认是一个表一个。最后,索引是方便查询的,索引列的数据不适合放大的,它占用的空间一多,那么B+ tree一层中能放的个数就越少。生成的这个棵B+tree树拥有全量数据,数据都顺序的存放在叶子节点(每个节点不超过16k,超过的会放到溢出页,叶子节点只放一个引用地址),一般3层叶子节点即可存放2千万数据了,4层一般上亿条数据,通过稳定的IO次数即可查到指定数据。作为主键,所以我们在设计表结构的时候最好指定一个主键,不然的话会影响数据插入性能,插入数据需要生成ROW_ID,而生成的ROW_ID是全局共享的,
2022-12-24 22:05:27
300
原创 MYSQL底层原理3-底层解析(Innodb、CheckPoint)
上面说的pool技术,那么它是怎么刷到磁盘的呢,比如你执行了一条DML语句,pool的页就变成了脏页,因为pool里面的数据要比磁盘上的数据要新,两者数据不一致。所以数据库需要按一定的规则将脏页刷到磁盘上,如果每次修改都刷盘,那这个pool基本意义也就不是很大了,开销会非常的大。增删改时,首先顺序写入redolog(顺序写非常快),然后修改pool页(pool里面没有的插入insert buffer),然后各种线程按一定规则将数据刷到磁盘上,发生故障的话就使用redolog进行数据恢复。
2022-11-17 14:24:35
530
原创 MYSQL底层原理2-表一级缓存、二级缓存
这个table实例里面保存了对TABLE_SHARE的引用,从这里面获取一些表的基础信息,还有一些属性,比如存储引擎的信息也会被初始化(引擎的handler),这个实例对象创建完成之后,它就具备了和存储引擎交互的能力了(通过handler交互),这个实例创建完成之后也会放入缓存中,供下次使用时调用,避免反复创建实例。在访问的时候每个客户端之间是隔离的,还需要补填一些独有的信息,比如说不同用户对该表的权限等等,所以要想操作这个表,还需要创建一个表对象来供当前客户端(线程)使用。是缓存就会有淘汰策略。
2022-11-16 18:25:47
1492
原创 MYSQL底层原理1-网络层
对于IO密集时,要减少连接数,譬如你要读写成千上万的数据,这时候你应该考虑减少连接数(和机器CPU数相等),你会发现更少连接数会带来性能数百倍的提升。1、先聊一波网络层,mysql的网络连接是基于BIO的,它本质上是不接受大量连接的,所以设置了。打算深入了解一波Mysql的底层原理,所以特在此进行一番记录。先了解一波mysql的整体分层架构。
2022-11-16 18:13:14
439
原创 LRU算法简介级对应JAVA实现
第一种利用LinkedHashMap添加元素是头插法,自带移除指定元素api,可迭代移除尾部元素三个特性可快捷实现LRU算法,上代码!老铁们这么聪明,一看应该就懂了,不会你来我家!以上两种方法只是简单的为了实现算法写的,真实业务场景中使用最好抽象出一套缓存接口,定义好方法,方便扩展。Java中使用的很多中间件中的淘汰策略都有涉及LRU算法,比如redis的缓存过期策略其中就有LRU策略。1、简单粗暴的借用LinkHashMap实现,复杂度比较高。最近在准备面试,所以刷刷题,记录一波。
2022-09-30 10:48:42
623
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人