erlang 中 mnesia 的使用例項

2021-07-23 15:41:19 字數 2536 閱讀 2395

參考資料:

mnesia 使用者手冊相關的微博

mnesia 應用例子乙個

資料庫啟動

啟動的時候指向乙個特定的資料庫:

erl -mnesia dir '"dir"'指定了mnesia儲存資料的目錄,

windows下可以是erl -mnesia dir 'dir'

dbms通過mnesia:start()啟動

資料庫停止

mnesia:stop()

可以通過mnesia:info()檢視資料庫狀態

建立資料表

-record(muppet, ).

mnesia:create_table(name, arglist)用來建立表

name是表名,

mnesia:create_table(muppet, )

記錄中的欄位名就是資料表的各個字段,預設情況下主鍵是記錄的第乙個元素,

每一條記錄的例項成為乙個物件,物件表名和主鍵作為物件識別符號

常見的屬性:

->type 可以是set, ordered_set, bag

3.資料表的插入一條記錄

test= #muppet,

f=fun()->mnesia:write(test) end

mnesia:transaction(f).

資料表的讀取一條記錄

oid = ,

mnesia:read(oid).

資料表的刪除一條記錄

要想刪除一行,需要知道這一行資料的目標oid,

oid由表的名稱和主鍵值決定

oid =

f=fun()->mnesia:delete(oid) end

mnesia:transaction(f).

事務mnesia:transaction(fun)表示fun位於乙個事務中:

1)fun要麼完全成功要麼完全失敗

2)操作同樣資料record的**可以並行執行,不同的程序不會相互干擾

事務具有原子性。

呼叫mnesia:abort(reason) 取消乙個事務,資料庫恢復到進入事務

之前的狀態。

髒操作有時在事務的範圍以外而且沒有設定任何鎖來執行一次操作,是可以接

受的這種操作成為髒操作,mnesia中,髒操作的速度比在事務中執行的

速度快大約十倍,在可以保證表一致性,隔離性,永續性,以及分布式

特性,髒操作可以大大提高程式效能

dirty_read()

dirty_write(記錄名)

dirty_delete()

這些操作和事務中執行操作一樣

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

mnesia:start().//啟動

rd(muppet, ).//建立記錄用於建立資料庫

mnesia:create_table(muppet, ).//建立資料庫表

mnesia:table_info(muppet, attributes). //以列表形式獲取資料表的各個欄位名稱

[name,callsign,salary]

mnesia:dirty_write(#muppet).//寫入乙個記錄

mnesia:table_info(muppet,size)

1mnesia:table_info(muppet,type).

setmnesia:dirty_all_keys(muppet).

["sh"]

mnesia:dirty_read(muppet,"sd").

[#muppet]

mnesia:dirty_write(#muppet).

mnesia:dirty_read(muppet,ssd).

[#muppet]

mnesia:dirty_all_keys(muppet).//記錄的各個主鍵名稱

["sd",ssd]

mnesia:table_info(muppet,size)//記錄的個數

2mnesia:table_info(muppet, record_name).

muppet

mnesia:add_table_copy(tab, node, type).

建立乙個復件表在node節點上。type只能是原子ram_copies,disc_copies, disc_only_copies之一。

假如我們添乙個schema系統表復件到乙個節點, 這樣就擴充套件了mnesia系統的節點數

node()

mnesia:add_table_copy(muppet,node(),ram_copies).

}

mnesia:add_table_copy(muppet,my@debian,ram_copies).

17> mnesia:add_table_copy(muppet,my@debian,ram_copies).

}也可以這樣建立資料表,但是這個之後怎麼用是乙個問題

mnesia:create_table(muppet,).

Erlang資料庫Mnesia操作

mnesia是一套輕量級的軟實時分布式資料儲存系統,支援冗餘複製和事務,特別適合於儲存離散的erlang資料塊,尤其擅長ram中的資料儲存。初始化資料庫步驟 1.啟動節點,erl mensa dir dir name mynode 2.建立資料庫模式,mnesia create schema nod...

erlang資料庫Mnesia主鍵自增

erlang資料庫mnesia主鍵自增 2012 09 24 22 32 07 分類 python ruby 對於mnesia資料庫表有時候需要有乙個id欄位,就像關聯式資料庫的主鍵.最簡單的辦法是用uuid做id,但是我們希望此id是整數遞增的.或者用 做id也是不錯的辦法.類似於乙個set集合 ...

erlang中的spawn函式

spawn fun pid 引數型別 fun function 引數為空的函式 返回型別 程序pid 說明 生成乙個由fun函式啟動的 引數為空的新程序,並返回程序的pid。spawn node,fun pid 引數型別 node node 節點 fun function 引數為空的函式 返回型別 ...