The LMDB database is a fast in-file key-value store that supports ACID transactions.
These bindings attempt to expose a typesafe yet low-overhead API.
First, an environment must be opened using Env.create :
let env = Env.(create Rw ~flags:Flags.no_subdir "mydb") Now the data file mydb and lock file mydb-lock have been created in the current directory.
One environment may contain multiple named and one unnamed key-value stores. They are called databases in the LMDB documentation , but called maps in these OCaml bindings.
A single ('key, 'value, [< `Read | `Write], [< `Dup | `Uni ]) Map.t is a key-value store mapping OCaml values of type 'key to values of type 'value. Multiple values per key are supported on request.
Using Map , we can open the unnamed map and add our first value:
let map = Map.open_existing Nodup ~key:Conv.string ~value:Conv.string env in
Map.add map "Bactrian camel" "Elegant and beautiful animal with two humps."Transactions and Iterators are also available.
type 'a perm = | Ro : [ `Read ] perm | Rw : [ `Read | `Write ] perm
This library uses [< `Read | `Write ] phantom types to encode the read/write permissions of transactions and cursors. The following values are used to request read-only or read-write permissions on environments, transactions and cursors.
module Env : sig ... end Collection of maps stored in a single memory-mapped file.
module Txn : sig ... end Series of operations on an environment performed atomically.
module Conv : sig ... end Converters to and from the internal representation of keys and values. A converter contains serialising and deserialising functions as well as the flags applied when the converter is used in a map.
module Map : sig ... end Key-value maps.
module Cursor : sig ... end Iterators over maps.
exception Exists Raised when adding an already existing key to a `Uni map or adding an an already existing value with Map.Flags.no_dup_data to a key of a `Dup map.
Also raised when trying to add ~flags:Flags.append(_dup) non-sorted data.
exception Not_found Raised when searching for non-existing key
exception Map_full Raised when memory map is full
exception Error of intOther errors are reported with Invalid_arg s or Error n.
val pp_error : Stdlib.Format.formatter -> int -> unitpp_error Format.std_formatter e prepares a human-readable description of the given error code n raised via Error n.
val version : string * int * int * int(name, major, minor, patch)