首先无论是哪种树,写树本身是个内存操作,两种结构都不需要等树结构落盘数据库才算Commit成功。数据库脏页通常都是异步进程慢慢刷出的。所以单纯的写树动作并不是关键。但是,B-TREE的写树动作,并非一个纯粹内存操作。因为只要从根节点开始,一直到数据页。B-TREE这一条路上,无论是索引页还是数据页,有任何页不在...
本节由一个 shell 脚本出发,到一个相当简单但可用的存储引擎 Bitcask,然后引出 LSM-tree,他们都属于日志流范畴。之后转向存储引擎另一流派——B 族树,之后对其做了简单对比。最后探讨了存储中离不开的结构——索引。 首先来看,世界上“最简单”的数据库,由两个 Bash 函数构成: ...
上述这种索引结构被称为之LSM-Tree,全称是Log-Structured Merge-Tree,即日志合并树。而这种基于合并和压缩文件原理的存储引擎被称为LSM存储引擎,其中比较为人所知的是Hbase。 B-Tree 最后,我们再来讨论流传最久的数据库村粗结构。与LSM-Tree这几年才逐渐为人所知不同,B-tree存储结构担得起经久不衰这四个字。
我个人觉得比较精准的说法应该是,LSM-TREE中MemTable的追加写入速度,要比B树的维护快得多。首先无论是哪种树,写树本身是个内存操作,两种结构都不需要等树结构落盘数据库才算Commit成功。数据库脏页通常都是异步进程慢慢刷出的。所以单纯的写树动作并不是关键。但是,B-TREE的写树动作,并非一个纯粹内存操作。因为只...
正如上面所描述的,当我接触了LSM-TREE的存储结构之后,我有一个特别深刻而直观的印象,这个“数据库的存储结构是为数据写入服务的”。它和B树有根源性的不同,B树的存储结构,处处损耗写入的性能来提高查询性能。而LSM-TREE在提高写入性能,并且可能在某些时候损耗了读取的性能。
1996年,一篇名为 Thelog-structured merge-tree(LSM-tree)的论文创造性地提出了日志结构合并树( Log-Structured Merge-Tree)的概念,该方法既吸收了日志结构方法的优点,又通过将数据文件预排序克服了日志结构方法随机读性能较差的问题。尽管当时 LSM-tree新颖且优势鲜明,但它真正声名鹊起却是在 10年之后的 2006年,...
B-tree 是一个多叉平衡树,为了保持树的平衡,在一个叶子节点满了之后,需要将叶子节点分裂。分裂子结点可能会影响多个父子节点。 该算法确保树保持平衡:具有n个键的 B-tree 总是具有O(log n)的深度。大多数数据库可以适合 3-4 层的 B-tree,因此不需要遍历非常深的页面层次即可找到所需的页(...
正如上面所描述的,当我接触了LSM-TREE的存储结构之后,我有一个特别深刻而直观的印象,这个“数据库的存储结构是为数据写入服务的”。它和B树有根源性的不同,B树的存储结构,处处损耗写入的性能来提高查询性能。而LSM-TREE在提高写入性能,并且可能在某些时候损耗了读取的性能。
二叉查找树与平衡二叉树 最常见的树结构是二叉查找树( Binary Search Tree),它就是一棵二叉有序树:保证左子树上所有节点的值都小于根节点的值,而右子树上所有节点的值都大于根节点的值。其优点在于实现简单,并且树在平衡的状态下查找效率能达到 O(log n);缺点是在极端非平衡情况下查找效率会退化到 O(n),因...
目前市面上大部分存储引擎是基于rocksdb支持LSM树,现在介绍的是wiredtiger存储引擎支持两种数据结构b-tree和lsm,支持行存储和列存储,全面支持ACID事务模式,通过配置参数灵活定制自己需要的存储类型.采用的设计思路和数据库设计思路非常相似。在常规应用中写比例重的业务采用lsm方式存储性能相对比较高;针对读比例比较重的业务...