Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/keathley/drax
CRDTs for elixir.
https://github.com/keathley/drax
crdts distributed-systems elixir
Last synced: 2 months ago
JSON representation
CRDTs for elixir.
- Host: GitHub
- URL: https://github.com/keathley/drax
- Owner: keathley
- License: mit
- Created: 2018-06-08T04:11:27.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-09-27T04:36:21.000Z (over 5 years ago)
- Last Synced: 2024-10-10T01:21:18.752Z (3 months ago)
- Topics: crdts, distributed-systems, elixir
- Language: Elixir
- Homepage:
- Size: 12.7 KB
- Stars: 13
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Drax
[Documentation](https://hexdocs.pm/drax).
Drax provides a few, common CRDTs for building distributed systems. Drax only provides
the data structures themselves and does not provide a means to replicate or
distribute these data structures across your cluster.## CRDTs provided
### OrSet
State based, Observed-Removed Sets. It supports causal additions and deletions.
In the case of a conflit Add wins. Because this CRDT is state based it requires
that you replicate the entire CRDT to other nodes. This is prohibitive if you
have a large number of elements in the set.### GCounter
A monotonicly increasing counter, similar to vector clocks.
## Why do we need more CRDTs?
You don't. In all reality you probably want to just use the CRDTs provided in
Lasp. That said, I do have some simple goals for this project:1) Learn more about how to properly implement and test CRDTs.
2) Provide a limited set of common CRDTs that I think are useful for the majority of projects.
3) Serve as a reference document for how CRDTs work.## Should I use this in production?
Probably not. But then again you probably shouldn't be building stateful services
anyway so if you're here then you're my kinda people. Look at the code and see
if they do what you need them to do.## Installation
```elixir
def deps do
[
{:drax, "~> 0.1.0"}
]
end
```