Skip to content

djs55/ocaml-btree

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

This is a work-in-progress.

The aim is to create a persistent on-disk map for use as an Irmin backing store.

Assumptions and consequences

  • This will be optimised for append operations (since Irmin is history-preserving)

Append operations are efficient on SSD devices since an update to an allocated sector involves erasing and rewriting a whole block (see CloudFS).

  • This will be single-reader and single-writer, like a traditional (non-clustered) filesystem.

We will not need to implement locking or fencing, as all locks will be stored in the memory of the single process accessing it.

  • This will be transactional: updates will either be committed or not.

We will not support grey-areas such as modes where metadata is committed but data is not.

Design

The system will have 2 layers:

  1. a heap supporting object allocation and deallocation. Space will be reclaimed by means of a garbage collector. This is similar to the OCaml heap but over a BLOCK device.
  2. a b-tree supporting functional update i.e. an update will require a new root to be created, referencing some new and some existing tree nodes, which will be atomically switched to commit the update.

About

A b-tree implementation for Mirage BLOCK devices

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages