ex_shards v0.2.0 ExShards

Shards API – This is the equivalent module to shards.

To build match specs for select functions, you can use Ex2ms library – it is included in ExShards.

Examples

# this is required to build match specs for select operations
iex> require Ex2ms

# create a table with default options
iex> ExShards.new :mytab
:mytab

iex> ExShards.insert :mytab, [k1: 1, k2: 2, k3: 3]
true

iex> for k <- [:k1, :k2, :k3] do
[{_, v}] = ExShards.lookup(:mytab, k)
v
end
[1, 2, 3]

iex> ms = Ex2ms.fun do {_, v} -> v end
[{{:_, :"$1"}, [], [:"$1"]}]
iex> ExShards.select :mytab, ms
[1, 2, 3]

iex> ExShards.delete :mytab, :k3
true
iex> ExShards.lookup :mytab, :k3
[]

# let's create another table
iex> ExShards.new :mytab2, [{:n_shards, 4}]
:mytab2

# start the observer so you can see how shards behaves
iex> :observer.start
:ok

Summary

Functions

i()

Types

key()
key() :: term
state()
state() :: ExShards.State.t
tab()
tab() :: atom
value()
value() :: term

Functions

all()
definitions()
delete(Elixir.arg1)
delete(Elixir.arg1, Elixir.arg2)
delete_all_objects(Elixir.arg1)
delete_object(Elixir.arg1, Elixir.arg2)
drop(tab, keys)
drop(tab, Enumerable.t) :: tab
fetch(tab, key)
fetch(tab, key) :: {:ok, value} | :error
fetch!(tab, key)
fetch!(tab, key) :: value | no_return
file2tab(Elixir.arg1)
file2tab(Elixir.arg1, Elixir.arg2)
first(Elixir.arg1)
foldl(Elixir.arg1, Elixir.arg2, Elixir.arg3)
foldr(Elixir.arg1, Elixir.arg2, Elixir.arg3)
get(tab, key, default \\ nil)
get(tab, key, value) :: value | [value]
get_and_update(tab, key, fun)
get_and_update(tab, key, (value -> {get, update} | :pop)) :: {get, update} when get: term, update: term
get_and_update!(tab, key, fun)
get_and_update!(tab, key, (value -> {get, update} | :pop)) ::
  {get, update} |
  no_return when get: term, update: term
get_nodes(Elixir.arg1)
give_away(Elixir.arg1, Elixir.arg2, Elixir.arg3)
has_key?(tab, key)
has_key?(tab, key) :: boolean
i()
info(Elixir.arg1)
info(Elixir.arg1, Elixir.arg2)
info_shard(Elixir.arg1, Elixir.arg2)
info_shard(Elixir.arg1, Elixir.arg2, Elixir.arg3)
insert(Elixir.arg1, Elixir.arg2)
insert_new(Elixir.arg1, Elixir.arg2)
is_compiled_ms(Elixir.arg1)
join(Elixir.arg1, Elixir.arg2)
keys(tab)
keys(tab) :: [key]
last(Elixir.arg1)
leave(Elixir.arg1, Elixir.arg2)
list(Elixir.arg1)
lookup(Elixir.arg1, Elixir.arg2)
lookup_element(Elixir.arg1, Elixir.arg2, Elixir.arg3)
match(Elixir.arg1)
match(Elixir.arg1, Elixir.arg2)
match(Elixir.arg1, Elixir.arg2, Elixir.arg3)
match_delete(Elixir.arg1, Elixir.arg2)
match_object(Elixir.arg1)
match_object(Elixir.arg1, Elixir.arg2)
match_object(Elixir.arg1, Elixir.arg2, Elixir.arg3)
match_spec_compile(Elixir.arg1)
match_spec_run(Elixir.arg1, Elixir.arg2)
member(Elixir.arg1, Elixir.arg2)
next(Elixir.arg1, Elixir.arg2)
pop(tab, key, default \\ nil)
pop(tab, key, value) :: {tab, value | [value]}
prev(Elixir.arg1, Elixir.arg2)
put(tab, key, value)
put(tab, key, value) :: tab
put_new(tab, key, value)
put_new(tab, key, value) :: tab
remove(tab, key)
remove(tab, key) :: tab
safe_fixtable(Elixir.arg1, Elixir.arg2)
select(Elixir.arg1)
select(Elixir.arg1, Elixir.arg2)
select(Elixir.arg1, Elixir.arg2, Elixir.arg3)
select_count(Elixir.arg1, Elixir.arg2)
select_delete(Elixir.arg1, Elixir.arg2)
select_reverse(Elixir.arg1)
select_reverse(Elixir.arg1, Elixir.arg2)
select_reverse(Elixir.arg1, Elixir.arg2, Elixir.arg3)
set(tab, obj_or_objs)
set(tab, tuple | [tuple]) :: tab
setopts(Elixir.arg1, Elixir.arg2)
state(Elixir.arg1)
tab2file(Elixir.arg1, Elixir.arg2)
tab2file(Elixir.arg1, Elixir.arg2, Elixir.arg3)
tab2list(Elixir.arg1)
tabfile_info(Elixir.arg1)
table(Elixir.arg1)
table(Elixir.arg1, Elixir.arg2)
take(Elixir.arg1, Elixir.arg2)
take_and_drop(tab, keys)
take_and_drop(tab, Enumerable.t) :: map
test_ms(Elixir.arg1, Elixir.arg2)
update(tab, key, initial, fun)
update(tab, key, value, (value -> value)) :: tab
update!(tab, key, fun)
update!(tab, key, (value -> value)) :: tab | no_return
update_counter(Elixir.arg1, Elixir.arg2, Elixir.arg3)
update_counter(Elixir.arg1, Elixir.arg2, Elixir.arg3, Elixir.arg4)
update_elem(tab, key, element_spec)
update_elem(tab, key, term) :: tab
update_element(Elixir.arg1, Elixir.arg2, Elixir.arg3)
values(tab)
values(tab) :: [value]