Mnemonix v0.4.0 Mnemonix.Mnesia.Store

A Mnemonix.Store module that uses a Mnesia table to store state.

Before using, your current node should be part of a Mnesia schema and the Mnesia application must have been started:

iex> :mnesia.create_schema([node])
iex> {:ok, store} = Mnemonix.Mnesia.Store.start_link
iex> Mnemonix.put(store, :foo, "bar")
iex> Mnemonix.get(store, :foo)
"bar"
iex> Mnemonix.delete(store, :foo)
iex> Mnemonix.get(store, :foo)
nil

Summary

Functions

Callback implementation for c:Mnemonix.Store.Core.Behaviour.delete/2

Callback implementation for c:Mnemonix.Store.Core.Behaviour.fetch/2

Callback implementation for c:Mnemonix.Store.Core.Behaviour.put/3

Creates a Mnesia table to store state in

Starts a new Mnemonix.Store using the Mnemonix.Mnesia.Store module with init opts

Functions

delete(store, key)
delete(store, key) :: {:ok, store} | exception

Callback implementation for c:Mnemonix.Store.Core.Behaviour.delete/2.

fetch(store, key)
fetch(store, key) ::
  {:ok, store, {:ok, value} | :error} |
  exception

Callback implementation for c:Mnemonix.Store.Core.Behaviour.fetch/2.

put(store, key, value)
put(store, key, Mnemonix.Store.value) ::
  {:ok, store} |
  exception

Callback implementation for c:Mnemonix.Store.Core.Behaviour.put/3.

setup(opts)
setup(opts) :: {:ok, state} | {:stop, reason :: any}

Creates a Mnesia table to store state in.

If the table specified already exists, it will use that instead.

Options

  • table: Name of the table to use, will be created if it doesn’t exist.

    Default: Mnemonix.Mnesia.Store.Table

  • transactional: Whether or not to perform transactional reads or writes.

Allowed: :reads | :writes | :both | nil

Default: :both

The rest of the options are passed into :dets.open_file/2 verbaitm, except for type:, which will always be :set.

start_link(opts \\ [])

Starts a new Mnemonix.Store using the Mnemonix.Mnesia.Store module.

If you wish to pass configuration options to the module instead, use start_link/2 with an empty opts list.

The returned GenServer.server/0 reference can be used as the primary argument to the Mnemonix API.

Examples

iex> {:ok, store} = Mnemonix.Mnesia.Store.start_link
iex> Mnemonix.put(store, :foo, "bar")
iex> Mnemonix.fetch(store, :foo)
{:ok, "bar"}
iex> Mnemonix.delete(store, :foo)
iex> Mnemonix.fetch(store, :foo)
:error
start_link(init, opts)

Starts a new Mnemonix.Store using the Mnemonix.Mnesia.Store module with init opts.

The returned GenServer.server/0 reference can be used as the primary argument to the Mnemonix API.