23
loading...
This website collects cookies to deliver better user experience
elixir 1.12.1-otp-24
erlang 24.0.2
Mix.install
in the IEx shell.# Start an Interactive Elixir shell.
❯ iex
iex> :ok = Mix.install([{:cubdb, "~> 1.0"}])
:ok
iex> {:ok, cubdb} = CubDB.start_link(data_dir: "tmp")
{:ok, #PID<0.166.0>}
iex> CubDB.put(cubdb, :word, "hello")
:ok
iex> CubDB.get(cubdb, :word)
"hello"
iex> CubDB.delete(cubdb, :word)
:ok
iex> CubDB.get(cubdb, :word)
nil
iex> ls "tmp"
0.cub data
/data
directory. Don't forget the leading thrash (/
). It is not data
.defmodule HelloNerves.Application do
...
@nerves_data_dir "/data"
def children(_target) do
[
# Children for all targets except host
{CubDB, [data_dir: @nerves_data_dir, name: CubDB]}
]
end
...
CubDB
anywhere in the app anytime.CubDB.put(CubDB, :word, "hello")
iex> CubDB.start_link(data_dir: "/secret_dir", name: CubDB)
{:error, :erofs}
** (EXIT from #PID<0.105.0>) shell process exited with reason: :erofs
:ets
module
:ets
, the Elixir waydefmodule HelloNerves.MemoryStore do
@ets_config [
{:read_concurrency, true},
{:write_concurrency, true},
:public,
:set,
:named_table
]
def create_table() do
:ets.new(__MODULE__, @ets_config)
end
def get(key) do
case :ets.lookup(__MODULE__, key) do
[] -> nil
[{_key, value} | _rest] -> value
end
end
def put(key, value) do
:ets.insert(__MODULE__, [{key, value}])
|> ok_or_error_response
end
def delete(key) do
:ets.delete(__MODULE__, :word)
|> ok_or_error_response
end
def delete_table do
:ets.delete(__MODULE__)
|> ok_or_error_response
end
defp ok_or_error_response(ets_result) do
if ets_result, do: :ok, else: :error
end
end
defmodule HelloNerves.FileStore do
def open(opts \\ []) do
data_dir = opts[:data_dir] || "tmp"
file = :binary.bin_to_list(Path.join(data_dir, "file_store"))
:dets.open_file(__MODULE__, file: file, type: :set)
end
def get(key) do
case :dets.lookup(__MODULE__, key) do
[] -> nil
[{_key, value} | _rest] -> value
end
end
def put(key, value) do
:dets.insert(__MODULE__, [{key, value}])
end
def delete(key) do
:dets.delete(__MODULE__, key)
end
def close do
:dets.close(__MODULE__)
end
end
# When table does not exist for example
** (ArgumentError) argument error
(stdlib 3.15.1) dets.erl:1259: :dets.delete(:my_table, :name)