Irmin: A Distributed Database and Version Control System for OCaml

Irmin: A Distributed Database and Version Control System for OCaml
Photo by Brandon / Unsplash

Irmin is a customizable-distributed data system based on distributed version-control systems (DVCs). Like Git, Irmin allows for functions such as clone, push, pull, branch, and rebase. Users can store application-specific values and define custom storage layers. Irmin is designed to handle a high number of operations per second and automatically handle update conflicts. It also exposes an event-driven API for programmable dynamic behaviors and dataflow pipelines.

Irmin, created at the University of Cambridge in 2013, is a collection of libraries designed to solve challenges raised by the CAP Theorem for storage and orchestration of unikernel binaries and their data for MirageOS applications. It is not a complete database engine, but rather a combination of libraries that can be selected to solve each application's distributed problem.

In summary is a distributed database system that is very portable and can be used with many different types of storage, including in-memory databases, SSDs, hard drives, local storage, and Git file formats. It has a core of low-level data structures that define how data is saved and shared across nodes, as well as higher-level data structures that developers can use without understanding the specifics of how Irmin works. It also has algorithms for efficiently syncing its distributed low-level constructs, and some components even have formal semantics, such as Conflict-free Replicated Data-Types (CRDT).

Features

  • Built-in Snapshotting - backup and restore
  • Storage Agnostic - you can use Irmin on top of your own storage layer
  • Custom Datatypes - (de)serialization for custom data types, derivable via ppx_irmin
  • Highly Portable - runs anywhere from Linux to web browsers and Xen unikernels
  • Git Compatibility - irmin-git uses an on-disk format that can be inspected and modified using Git
  • Dynamic Behavior - allows the users to define custom merge functions, use in-memory transactions (to keep track of reads as well as writes) and to define event-driven workflows using a notification mechanism

License

ISC license: A permissive license lets people do anything with your code with proper attribution and without warranty. The ISC license is functionally equivalent to the BSD 2-Clause and MIT licenses, removing some language that is no longer necessary.

Permissions

  • Commercial Use
  • Distribution
  • Modification Private use

Limitations

  • No Liability
  • No Warranty

Conditions

  • License and copyright notice

Resources

Read more