Groot v0.1.0 Groot View Source
Groot provides an eventually consistent, ephemeral KV store. It relies on distributed erlang and uses LWW-registers and Hybrid-logical clocks to provide maximum availability. Groot utilizes ETS for efficient reading.
Usage
# Changes are propogated to other nodes.
:ok = Groot.set(:key, "value")
# Read existing values
"value" = Groot.get(:key)
Updates will replicate to all connected nodes. If new nodes join, or if a node rejoins the cluster after a network partition then the other nodes in the cluster will replicate all of their known registers to the new node.
Consistency
Groot provides LWW registers. Each register includes a hybrid logical clock (HLC).
Ordering of events is determined by comparing HLCs. If a network partition
occurs nodes on either side of the partition will continue to accept set and
get operations. Once the partition heals all registers will be replicated to
all nodes. If there are any conflicts the register with the largest HLC will
be chosen.
Its possible that Groot will lose writes under specific failures scenarios. For instance, if there is a network partition between 2 nodes, neither node will be able to replicate to the other. If either node crashes after accepting a write, that write will be lost.
Data limitations
Groot replicates all keys to all connected nodes. Thus there may be performance issues if you attempt to store hundreds or thousands of keys. This issue may be fixed in a future release.
Link to this section Summary
Functions
Gets a register's value. If the register is not found it returns nil.
Sets the value for a register.
Link to this section Functions
Gets a register's value. If the register is not found it returns nil.
Sets the value for a register.