B树
-
B树将数据库分解成固定大小的块或页,传统上大小为4KB。之前的日志结构索引是可分解为可变大小的段。
-
每个页面都可以使用地址或位置进行标识,可以让一个页面引用另一个页面,类似指针,不过是指向磁盘地址,而不是内存
- 更新:首先搜索包含该键的叶子页,更改该页的值,并将页写回到磁盘。
- 添加:找到范围内包含新键的页,并将其添加到该页。如果没有足够可用空间,将其分为两个页,并更新父页的键范围
- 上述算法保证具有n个键的B树总是具有O(log n)的深度
-
B树的基本写操作是覆盖写。而LSM树使用的是追加更新文件,但不会修改文件。
-
为了保证恢复崩溃后的数据库,需要加上额外的数据结构:预写日志(WAL),仅支持追加写,每个更新先写到WAL到写入到B树的磁盘
B树和LSM树对比
- LSM树写入更快,B树读取更快
LSM树优点
LSM树的优点:
- 写入速度快:LSM树将数据写入磁盘时,可以在内存中构建一个有序的结构,这使得写入操作非常快。
- 更少的磁盘访问:LSM树在写入时可以将数据聚集在一起,减少了对磁盘的访问次数,从而提高了读取效率。
- 更适合大数据量:LSM树适用于处理大量数据,因为它可以将数据分布到多个磁盘上,减少单个磁盘的负载。
LSM树的缺点:
- 读取速度较慢:由于LSM树需要将数据从多个磁盘中合并到内存中,因此读取速度较慢。
- 数据可能存在重复:当数据被多次写入时,LSM树可能会出现重复数据,这会占用额外的磁盘空间。
- 数据可能会丢失:在某些情况下,例如系统故障或崩溃时,LSM树可能会出现数据丢失的情况。
B树的优点:
- 查询速度快:B树的查询速度非常快,因为它的结构可以快速定位到存储数据的位置。
- 数据没有重复:B树不允许存在重复的数据,这避免了占用额外的磁盘空间。
- 数据不易丢失:由于B树的数据结构比较稳定,因此数据不易丢失。
B树的缺点:
- 写入速度较慢:B树的写入速度较慢,因为它需要保持数据的有序性。
- 不适合大数据量:当数据量非常大时,B树的高度可能会非常高,从而导致访问磁盘的次数增加,性能下降。
- 需要频繁的平衡操作:在插入或删除数据时,B树需要进行平衡操作,这会导致一些额外的开销。
综上所述,LSM树适合处理大量数据和写入速度较快的应用场景,而B树适合查询速度快的应用场景,但对于数据量较大或写入频繁的应用,可能需要采用一些特殊的技巧。