数据库写入数据,有点像整理当天收到的文件:如果每来一张就跑去档案柜改一次,动作会很零碎;更省事的办法,是先在桌上攒成一叠,再整批归档。这篇发布在 The Ledger 的交互文章,用随页面滚动推进的动画,解释 LSM-tree(Log-Structured Merge-tree)如何采用后一种思路。相比静态架构图,它更适合帮助非专业读者建立“数据如何一路移动”的直觉。
新写入先进入 Memtable——内存里的有序缓冲区,读取也会先查这里。它装满后,数据被冻结并刷到磁盘,成为 SSTable——写入后基本不再原地修改的有序键值文件。文件越积越多,后台就进行 Compaction(合并整理):把多个 SSTable 合在一起,清除旧版本和删除标记,并重新整理键的范围。这样能改善读取、回收空间,代价是增加磁盘读写。作者 OhBhai0 称,这个免费网站用于分享个人学习所得;他也在编写自己的 LSM-based 数据库引擎。供稿未提供性能测试,因此这篇文章的价值主要在解释机制,而非证明某种实现更快。