为什么Redis用跳表不用B+树,而MySQL用B+树而不是跳表?
创作时间:
作者:
@小白创作中心
为什么Redis用跳表不用B+树,而MySQL用B+树而不是跳表?
引用
1
来源
1.
http://www.360doc.com/content/24/1128/09/77927521_1140617593.shtml
在数据库领域,Redis和MySQL是两款广泛使用的数据库产品,但它们在数据结构的选择上却有所不同。Redis使用跳表(Skip List)作为其有序集合的底层数据结构,而MySQL的InnoDB引擎则使用B+树(B+ Tree)来存储数据。这种差异背后的原因是什么?本文将从读写操作的角度,对比分析B+树和跳表的特性,解释为什么Redis选择跳表而MySQL选择B+树。
1. B+树和跳表结构对比
我们分别对这两个结构进行读、写操作两个场景来做分析。
1.1 B+树结构
- 读操作:我们知道 B+树 的结构中每个结点都是一个16k的数据页,能存放较多的索引信息,三层左右就可以存储3kw左右的数据。查询一次数据,最多三次磁盘IO。
- 写操作:随着数据的增加,B+树为了保持自身平衡而需要调整自身的树高,这背后有相对复杂逻辑来做平衡调整。
所以B+树这类数据结构适合大量数据(相比于redis),而大量的数据肯定不能全放内存里,必定是需要存放在磁盘,而磁盘的读写又很慢,B+树的灵魂在于索引,索引作用是为了加速磁盘io。
但是redis又是一个内存数据库,索引在内存中的作用不大了,相反B+数复杂的平衡逻辑会使得插入变慢,redis这类追求高速的单进程数据库是不建议有这类慢操作的。
1.2 跳表结构
- 读操作:一个结点存放一条数据,如果像上面的mysql一样存储3kw左右的数据,即使每次都能达到最优的二分,也要找2的25次方左右。当然redis也不会有哪个key会存储3kw的数据,这就算大key了,是不允许的。而且与磁盘io不同,内存是很快的,所以索引在内存中显得没那么重要。
- 写操作:与拆分合并数据页不同,一个节点直接插入一条数据。逻辑相对来说比较简单,也很快速,没有平衡的复杂过程。
2. 总结
Redis 使用跳表的原因:
- 内存数据库,查询、插入、删除的效率高,且实现简单,适合高并发、低延迟的内存操作。
- 内存管理灵活,不需要像 B+树那样复杂的节点分裂和合并操作,这些操作也比较耗时。并且B+的最大的索引优势在内存中作用不大。
MySQL 使用 B+树的原因:
- 适合磁盘存储和大规模数据,能够高效进行范围查询和排序,支持复杂的事务管理。
- 适合持久化存储,在数据量很大的情况下,通过索引结构能够优化磁盘 I/O,B+树能够保持查询性能。
参考
[1] https://15721.courses.cs./spring2018/papers/08-oltpindexes1/pugh-skiplists-cacm1990.pdf
[2] https://opensource./2013/01/c-containers-that-save-memory-and-time.html
热门推荐
热词里的中国活力|低空经济乘势起飞,将带来哪些新机遇?
扶摇“职”上,从“心”起航——大学生就业心理调适指南
雷达散射截面积(RCS)详解:影响隐身技术的关键因素
视频号素人直播的选品技巧,如何挑选高利润商品?
如何保护生育力?国家卫健委提出10点建议
“00后”崛起激活消费市场 愿为情绪价值和低碳生活“买单”
自制电解质水的多种方法
王者归来的李子柒,需要直面商业化困局
锂辉石选矿这样做,效果翻倍!
火柴人动画
春节谈“乳”|“乳糖不耐受”别怕,教你几个小方法让你轻松实现“乳糖限量”
公司智囊团如何组建团队
如何在40岁之后达到最佳健身状态?看看专家的建议
Excel快捷键修改全攻略:三种方法让你的工作效率翻倍
麻省理工分享ChatGPT,在教育的5个实际应用案例
给同事发邮件,开头称谓怎么写合适
如何获取最新的电力行业标准更新信息?
内存条选购攻略,全类型推荐,帮你明确需求选对内存条!
明月寄离愁,思亲入梦舟。6首古诗词:共赏一轮月,各怀千里愁
复盘《黑神话:悟空》文化出海的得与失,究竟给国产游戏怎样的启示
多大孩子可以吃汤圆?专家建议三岁左右可适量尝试
八字和五行怎么匹配-生辰八字和五行属性对照表
孩子面对学习过程中的孤独感时如何建立社交支持
玄幻小说排行榜(周榜)
实验设计原理与步骤解析
山路开车有哪些注意事项和驾驶技巧?老司机:掌握这9点就行
精选30首经典五言诗,首首意境优美,值得一读再读
艺术作品的深层解读
梵高绘画构图技巧揭秘
QQ吉凶测试,数字背后的心理游戏与现代迷信