有一种流行的存储结构开销模型考虑了如下三个因素:读取(Read)、更新(Update)和内存(Memory)开销,它被称为RUM猜想。
*** RUM猜想指出,读取(Read)、更新(Update)和内存(Memory)开销减少其中两项开销将不可避免地导致第三项开销的恶化,并且优化只能以牺牲三个参数中的一个为代价。***
B树的RUM
我们可以根据这三个参数对不同的存储引擎进行比较,以了解它们针对哪些参数进行了优化,以及其中隐含着哪些可能的权衡。一个理想的解决方案是拥有最小的读取开销,同时保持较低的内存与写入开销。但在现实中,这是无法实现的,因此我们需要进行取舍。B树是针对读进行优化的。对B树的写入需要在磁盘上找到一个记录,而随后对同一页的写入可能需要多次更新该磁盘页面。还要为将来的更新和删除保留额外的空间,这会增加空间开销。
LSM 树的RUM
而LSM树则不需要在写入期间定位磁盘上的记录,也不用为以后的写入保留额外的空间。但由于存储冗余记录,所以仍然存在一些空间开销。在默认配置中,由于必须通过访问多个表才能返回完整的结果,所以读取的成本更高。