The btree-concurrent package

[Tags:lgpl, library, test]

A backend agnostic, concurrent BTree

[Skip to Readme]


Versions 0.1.0, 0.1.1, 0.1.3, 0.1.4, 0.1.5
Dependencies array (==0.4.*), base (==4.*), base64-bytestring (==1.*), bytestring (>=0.9), cereal (>=0.3), containers (>=0.5), directory (==1.*), filepath (==1.*), hashable (==1.*), mtl (==2.*), random (==1.*), snappy (==0.2.*), stm (==2.2.*), time (==1.*) [details]
License LGPL
Author Morten Brøns, Johan Brinch
Stability Experimental
Category Data Structures
Home page
Source repository head: git clone
Uploaded Wed Oct 31 13:09:44 UTC 2012 by JohanBrinch
Distributions NixOS:0.1.5
Downloads 1187 total (3 in the last 30 days)
0 []
Status Docs uploaded by user
Build status unknown [no reports yet]




Maintainer's Corner

For package maintainers and hackage trustees

Readme for btree-concurrent

Readme for btree-concurrent-0.1.5


A backend agnostic, concurrent BTree with relaxed balance[1] written in Haskell using a mix of IO operations and pure STM.

Although the code does work, it is neither production-ready nor complete.

Features include:

  • Caching: While nodes are periodically saved on persistent storage (e.g. disk) they are cached in-memory during operations.

  • Live flushing: It is possible to save the current version of the tree to disk and run modifying operations at the same time. The nodes are updated buttom-up to ensure a valid tree in the case of a crash.

  • Backend agnosticism: A simple API is used as an abstraction for the persistent storage.

  • Verification: The test-suite uses QuickCheck to compare the trees behaviour to that of Data.Map.

Deficients include:

  • Too much memory usage. Nodes are not stored in a compact fashion and are constantly being serialized/deserialized.

  • findMin and findMax are incomplete and may fail (see TODO for details).

  • The implementation does not parallelize well.

[1] B-trees with relaxed balance, K. S. Larsen & R. Fagerberg, Parallel Processing Symposium, 1995. Proceedings., 9th International