Shards
ETS tables on steroids!
Sharding support for ETS tables out-of-box.
Why might we need Sharding on ETS tables? Well, the main reason is
to keep the lock contention under control, in order to scale-out ETS tables
(linearly) and support higher levels of concurrency without lock issues;
specially write-locks, which most of the cases might cause significant
performance degradation.
Therefore, one of the most common and proven strategies to deal with these
problems is Sharding or Partitioning; the principle
is pretty similar to DHTs.
This is where Shards comes in. Shards is an Erlang/Elixir library
compatible with the current ETS API, which implements
Sharding or Partitioning on top of ETS tables,
completely transparent and out-of-box.
See the getting started guide
and the online documentation.
Installation
Erlang
In your rebar.config
:
{deps, [
{shards, "0.6.1"}
]}.
Elixir
In your mix.exs
:
def deps do
[{:shards, "~> 0.6"}]
end
Check out the getting started guide to learn
more about it.
Important links
-
Documentation - Hex Docs.
-
Blog Post -
Transparent and out-of-box sharding support for ETS tables in Erlang/Elixir. -
ExShards – Elixir wrapper for
shards
; with extra and nicer functions. -
Nebulex – Distributed Caching
framework for Elixir. -
KVX – Simple Elixir in-memory Key/Value
Store usingshards
(default adapter). -
Cacherl Distributed Cache
usingshards
.
Testing
$ make test
You can find tests results in _build/test/logs
, and coverage in
_build/test/cover
.
NOTE:
shards
comes with a helperMakefile
, but it is just a simple
wrapper on top ofrebar3
, therefore, you can do everything usingrebar3
directly as well (e.g.:rebar3 do ct, cover
).
Building Edoc
$ make doc
NOTE: Once you run the previous command, a new folder
doc
is created,
and you'll have a pretty nice HTML documentation.
Copyright and License
Copyright (c) 2016 Carlos Andres Bolaños R.A.
Shards source code is licensed under the MIT License.