求大佬解答

1.redis为什么不用红黑树或者b+树
2.hashmap为什么不用跳表和b+树
3.mysql索引为什么不用跳表和红黑树
求佬解答,感激不尽
全部评论
其实很简单,下策:你把redis用跳表,hash用红黑树,mysql用b➕树的底层加原理讲透。最简单用redis进行举例,跳表的优点,查询时间复杂度Ologn,尽管和红黑树,b➕查询时间复杂度一致,但是从redis作用场景使用场景上来说做读多于写,减少了写时自平衡开销,再衍生一点,缓存数据量肯定没有内存大,这点对比b➕树来说,他的插入性能更好,主打一个灵活,想不出来就灵活进行举例优缺点,只要你够熟,面试官就不会追着你拷打这个问题,再说了,都能举例优缺点了,肯定也没问题的
31 回复 分享
发布于 2024-08-31 19:40 陕西
1.红黑树不能范围查询,b+树实现太复杂了,redis作者手撕不出来
21 回复 分享
发布于 2024-08-31 23:56 重庆
Redis:跳表在进行范围查询时优于红黑树,内存占用优于B+树; HashMap:HashMap 通常不需要进行范围查询,并且比跳表占用的内存空间更少(每个节点最多两个指针),这也是不选择B+树的原因(内存占用太大了); MySQL:InnoDB 存储引擎下内存与磁盘进行数据交换的单位是页,跳表和红黑树占用的内存空间是离散的,每进行一次比较就需要进行一次磁盘 IO,B+树在非叶子节点中保存索引,一次磁盘IO就能更快锁定数据所在的范围(在内存中进行比较的速度是很快的),B+树最大的优点就是磁盘 IO 次数少。
20 回复 分享
发布于 2024-09-02 00:34 江苏
我觉得问这种问题真挺逆天的,我只记得小林里面有说跳表vs红黑树,这踏🐴就是开发者来了也只挤出来三个理由,而且还不是那种决定性的理由,不过确实很有道理。 凭记忆能想起来原因之一是跳表更简单,更好维护和调试。
11 回复 分享
发布于 2024-08-31 23:11 北京
可以看小林coding,我记得原因是这样的 1 为什么mysql用b+树?因为mysql基于磁盘,磁盘io很慢,b+树一个节点可以存100个数据,那么一次i9就可以比较100个数据,3次io就可以定位100w的区分度了,减少了磁盘io次数就提升了性能。 2 为什么redis用跳表,因为跳表比b+树维护索引要简单的多,每次插入节点只需要考虑需不需要向上层增加索引节点即可,不需要考率索引节点分裂的情况。 3为什么hashmap用红黑树?这个我自己想的,可能是因为红黑树不需要维护索引结点,所以没有额外的空间开销,因为不像mysql和redis都是数据库,数据量非常大,对读写性能要求都特别高。
5 回复 分享
发布于 2024-09-01 20:48 江苏
mysql不用红黑树,红黑树是二叉树,只能有两个子节点,相同数据量下层数更大,io操作次数更多
3 回复 分享
发布于 2024-08-31 23:15 广东
我觉得是 1红黑树和b+树实现比跳表复杂,而且红黑树不支持范围查询,对于b+树更多的是考虑每一个数据页节点能够尽量的占满磁盘的每一个簇,redis都是基于内存操作没有这方面的考虑 2hashmap同样是不支持范围查询 3为什么不用跳表1有说了,然后红黑树就是因为是二叉树结果,每次io能读取到的节点有限,io次数多,性能就低综合来说b+树更好
2 回复 分享
发布于 2024-09-01 08:20 广东
1. 范围查询排除红黑树,跳表和b+树都可以,底层都是索引。 2. hashmap只需要查询,红黑树做查询内存消耗低(其他两个都需要维护顺序)。 3. 范围查询排除红黑树,磁盘I/O问题,B+树是用的页来存储,I/O效率更好。
1 回复 分享
发布于 2024-09-02 17:50 重庆
m
点赞 回复 分享
发布于 2024-09-30 01:15 上海
如果redis用的红黑树又该问为什么不用跳表了😂
点赞 回复 分享
发布于 2024-09-29 14:57 湖南
用跳表是因为跳表好维护,对于redis这种速度极快但大小受限的应用来说,使用索引会不仅不会加快到哪去,反而增加了维护的成本,反比mysql,mysql的io速度很慢,但空间大小绰绰有余,至于索引大小啊维护成本啊根本不在乎,在乎的是如何快速的找到减少io次数。
点赞 回复 分享
发布于 2024-09-27 11:32 河南
为啥大家没有人考虑空间复杂度啊,跳表应该比红黑树更占地方吧?个人愚见,查询性能在内存应该差不多,就算多查一层少查一层也没什么所谓,redis为了实现简单可以忽略一些空间,但是java可能考虑gc等等的需要同时平衡时空复杂度,红黑树就显得更靠谱一些。
点赞 回复 分享
发布于 2024-09-25 23:00 天津
cy
点赞 回复 分享
发布于 2024-09-22 10:39 北京
看了大家的回答我就放心了😋
点赞 回复 分享
发布于 2024-09-05 19:09 辽宁
m
点赞 回复 分享
发布于 2024-09-02 09:15 香港
我记得redis的八股说是跳表+哈希表不用存储节点的颜色信息所以节省了空间,删除节点不用考虑树的平衡性,实现简单
点赞 回复 分享
发布于 2024-08-31 22:54 四川

相关推荐

面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 14:08
点赞 评论 收藏
分享
评论
46
391
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务