B+树
B+树是多叉数数据结构,每个节点都可以存储16kb的数据,三层的数据结构可以存储2kw的数据量,即2kw的数据量最大是三次磁盘IO(假设数据也都在磁盘中),B+树还是一种平衡树,在插入数据时需要平衡树的结构,会有额外的开销,因此频繁的写入和删除会带来较大的性能开销。
总结:
1、B+树存储2kw的数据树的高度仅为3,适合IO读取,即落盘存储。
2、B+树是一种平衡树,频繁的写入和删除会造成额外的性能开销,性能降低。适合读多写少的场景。
跳表
跳表是链表数据结构且实现简单,存储2kw=2^24的数据需要24层。插入数据时是否出现在层上取决于随机函数,无需平衡数据结构等额外的开销。
总结:
1、跳表实现简单,无需平衡数据结构
2、存储量大的时候跳表的深度也随之大。
Mysql为什么使用B+树,而不是跳表?
mysql数据库是持久化数据库,即是存储到磁盘上的,因此查询时要求更少磁盘IO,且mysql是读多写少的场景较多,显然B+树更加适合mysql。
redis的zset为什么使用跳表而不是B+树
redis是内存存储,不存在io的瓶颈,所以跳表的层数的耗时可以忽略不计,而且插入数据时不需要开销以平衡数据结构(写多)。