LevelDB 源码阅读:跳表的原理、实现以及可视化
在 LevelDB 中,内存 MemTable 中的数据存储在 SkipList(跳表) 中,用来支持快速插入。跳表是 William Pugh 在论文 Skip Lists: A Probabilistic Alternative to Balanced Trees 中提出的一种概率性数据结构。有点类似有序链表,但是可以有多层,通过空间换时间,允许快速的查询、插入和删除操作,平均时间复杂度为 $ O(\log n) $。和一些平衡树比起来,代码实现也比较简单,性能稳定,因此应用比较广泛。
那么跳表的原理是什么?LevelDB 中跳表又是怎么实现的呢?LevelDB 的跳表实现有哪些亮点以及优化呢?如何支持单线程写,并发读跳表呢?本文将从跳表的原理、实现等方面来深入探讨。最后还提供了一个可视化页面,可以直观看到跳表的构建以及整体结构。