11 stable releases

2.7.0 Oct 19, 2022
2.6.2 Jun 5, 2022
2.6.1 Dec 16, 2021
2.2.0 Nov 6, 2021
1.0.0 Sep 20, 2021

#605 in Database interfaces


Used in raindb

MIT license

97KB
1.5K SLoC

Hopscotch - Skip list implemented in Rust

What it says. Cuz it skips.

Build Status Crates.io

Motivation

Note this is a toy project and is not meant for production usage...yet(?). It's primary purpose will be as part of a database internals teaching project.

Details

The implementation of the algorithms in v1 adheres somewhat faithfully to the algorithms as laid out in the original paper by Pugh.

Uses a geometric distribution for determining if a new key is part of a level (fancy for saying we flip a coin). The geometric distrubution actually defaults to p = 0.25 but this is configurable.

Concurrency

NOTE: There may be a measure of undefined behavior here (sounds bad I know). Don't use this unless you really want to try some crazy hack I did.

A version of the skip list that allows for lock-free concurrent reads is now available by turning on the concurrent feature. This skip list has a couple major feature gaps:

  1. Callers must get a lock (e.g. Mutex or RwLock) over the skip list before insertions can be done.

  2. Delete has not been implemented yet because my use case does not require delete.

Work is planned to follow this up with a proper implementation of a fully concurrent and almost-lock-free skip list.

Other art

References

Dependencies

~1MB
~21K SLoC