53 releases (stable)

5.0.37 Sep 8, 2024
5.0.33 Nov 11, 2023
5.0.27 Jul 26, 2023
5.0.12 Mar 26, 2023
0.0.13 Nov 13, 2022

#51 in Concurrency

Download history 262/week @ 2024-07-20 503/week @ 2024-07-27 136/week @ 2024-08-03 120/week @ 2024-08-10 209/week @ 2024-08-17 118/week @ 2024-08-24 435/week @ 2024-08-31 377/week @ 2024-09-07 219/week @ 2024-09-14 174/week @ 2024-09-21 187/week @ 2024-09-28 8520/week @ 2024-10-05 35745/week @ 2024-10-12 12002/week @ 2024-10-19 10140/week @ 2024-10-26 9393/week @ 2024-11-02

70,320 downloads per month
Used in 10 crates (2 directly)

MIT/Apache

96KB
1.5K SLoC

concurrent-map

Lock-free linearizable map.

  • get, insert, cas, remove, iter, range, get_gt, get_gte, get_lt, get_lte, first, last, pop_first, pop_last
  • fully lock-free node splits and merges based on the sled battle-tested implementation. concurrent-map can be though of in some ways as a simplified, in-memory sled that supports high-level types.
  • initially designed for use in sled's next generation object store, marble.

The ConcurrentMap allows users to tune the tree fan-out (FANOUT) and the underlying memory reclamation granularity (LOCAL_GC_BUFFER_SIZE) for achieving desired performance properties. The defaults are pretty good for most use cases but if you want to squeeze every bit of performance out for your particular workload, tweaking them based on realistic measurements may be beneficial. See the ConcurrentMap docs for more details.

If you want to use a custom key type, you must implement the Minimum trait, allowing the left-most side of the tree to be created before inserting any data.

This is an ordered data structure, and supports very high throughput iteration over lexicographically sorted ranges of values. If you are looking for simple point operation performance, you may find a better option among one of the many concurrent hashmap implementations that are floating around. Pay for what you actually use :)

The minimum supported rust version (MSRV) is 1.70.

Dependencies

~0.4–5MB
~17K SLoC