Irmin: A Distributed Database and Version Control System for OCaml
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