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 |
#729 in Database interfaces
23 downloads per month
Used in raindb
97KB
1.5K
SLoC
Hopscotch - Skip list implemented in Rust
What it says. Cuz it skips.
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:
-
Callers must get a lock (e.g.
Mutex
orRwLock
) over the skip list before insertions can be done. -
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
- Blog - Notes and References on Skip Lists
- OpenDSA - 15.1 Skip Lists
- Learn Rust With Entirely Too Many Linked Lists
- Advanced Lifetimes
- std::linked_list
- Great reference on creating an iterator in Rust: Creating an Iterator in Rust
Dependencies
~1MB
~20K SLoC