Skip to content

Instantly share code, notes, and snippets.

@qhwa
Last active December 16, 2016 09:44
Show Gist options
  • Select an option

  • Save qhwa/bcce6242f54fd19cb875e6074c90eef6 to your computer and use it in GitHub Desktop.

Select an option

Save qhwa/bcce6242f54fd19cb875e6074c90eef6 to your computer and use it in GitHub Desktop.
Mnesia Database Simple Example
defmodule MnesiaExample do
def demo do
# Step 1: initialize
setup
# Step 2: write some datas into database
seed
# Step 3: read from database
read_employee("Wuliu") |> IO.inspect
read_employee("Ruby") |> IO.inspect
end
def setup(data_dir \\ "./data") do
:ok = prepare_mnesia(data_dir)
create_table
end
def prepare_mnesia(data_dir) when is_binary(data_dir) do
:mnesia |> :application.load
:mnesia |> :application.set_env(:dir, to_charlist(data_dir))
:mnesia.create_schema([node])
:ok = :mnesia.start
end
defp create_table do
:mnesia.create_table(:employee, employee_def)
:ok = :mnesia.wait_for_tables([:employee], 5000)
end
defp employee_def do
[
attributes: [:name, :age, :gender]
]
end
def seed do
upsert_employee("Billy", 33, :male)
upsert_employee("Ruby", 22, :female)
upsert_employee("Wuliu", 22, :male)
end
defp upsert_employee(name, age, gender) do
:mnesia.transaction fn ->
:mnesia.write(:employee, {:employee, name, age, gender}, :write)
end
end
def read_employee(name) do
{:atomic, [ret |_tail]} = :mnesia.transaction(fn ->
:mnesia.read :employee, name
end)
ret
end
end
MnesiaExample.demo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment