Database 为什么跳过列表不优于B+-数据库的树?

Database 为什么跳过列表不优于B+-数据库的树?,database,data-structures,b-tree,skip-lists,Database,Data Structures,B Tree,Skip Lists,我在读有关跳过列表和MemSQL的文章,想知道为什么跳过列表在数据库中没有得到更广泛的应用?使用Skiplits有什么主要的缺点吗?数据库通常非常庞大,必须存储在外部内存中,例如一个巨大的磁盘驱动器。因此,大多数数据库应用程序中的瓶颈是我们必须将内存从磁盘驱动器传输到主内存的次数 B-树及其变体专门设计用于最小化执行其每个操作所需的块读写次数。从数学上讲,每个B-树操作所需的内存传输数量是O(logn/logb),其中B是块大小。将此与skiplist进行比较,skiplist需要按预期进行O(

我在读有关跳过列表和MemSQL的文章,想知道为什么跳过列表在数据库中没有得到更广泛的应用?使用Skiplits有什么主要的缺点吗?

数据库通常非常庞大,必须存储在外部内存中,例如一个巨大的磁盘驱动器。因此,大多数数据库应用程序中的瓶颈是我们必须将内存从磁盘驱动器传输到主内存的次数

B-树及其变体专门设计用于最小化执行其每个操作所需的块读写次数。从数学上讲,每个B-树操作所需的内存传输数量是O(logn/logb),其中B是块大小。将此与skiplist进行比较,skiplist需要按预期进行O(logn)内存传输。由于B通常以兆字节为单位,所以日志B可以在15-25的附近,因此B树的速度会明显加快。即使数据库在主存中,内存层次结构(L1和L2缓存等)的影响也会非常明显,以至于B树变体在实践中仍然比许多其他数据结构更快。给出了一些背景知识

虽然B-树上的每个操作通常比其他数据结构中的相应操作需要更多的CPU工作,但它们需要的内存传输很少,这一事实往往使它们在实践中比其他数据结构快得多。因此,不建议在数据库中使用跳过列表

B-树很好还有另一个原因:它们是最坏情况有效的。尽管确实存在确定性跳过列表,但大多数skiplist实现都是随机的,并对其行为提供了预期的保证。在数据库中,这可能是不可接受的,因为数据库上的许多用例需要最坏情况下的高效行为


希望这有帮助

虽然游戏进行得很晚,但我感到有一种强烈的冲动,那就是作为最高级别的答案来回答,也许并不能传达完整的信息

跳过列表不同于平衡树数据结构,因为它允许有效地组合多个列表。 在数据库术语中,它允许有效组合基于跳过列表的索引。 Lucene就是一个很好的例子,它为Solr/ElasticSeach等搜索引擎提供动力

B-Tree在组合多个索引时存在问题,而没有对整体组合进行先验索引,这是无效的,因为它需要对历史记录进行重新索引


因此,无论何时数据存储必须支持对数据的任意查询,跳过列表都是一个理想的选择。

一个写得很好、很有见地的答案。击中我需要知道的所有要点。非常感谢。回答得很好。对于内存中的数据库(如MemSQL),SkipList实际上是有意义的。