erlang資料庫mnesia主鍵自增
2012-09-24 22:32:07
分類: python/ruby
對於mnesia資料庫表有時候需要有乙個id欄位,就像關聯式資料庫的主鍵.
最簡單的辦法是用uuid做id,但是我們希望此id是整數遞增的.或者用 做id也是不錯的辦法.
類似於乙個set集合(意思是集合中不可能兩個相同的鍵同時存在),每個鍵對應的值將作為id,
方法mnesia:dirty_update_counter(tab, key, incr)的特點:
tab: 某個存放key對應的最新鍵值的mnesia資料庫表,這個表儲存key-value
key: 鍵名
incr: 鍵值遞增量
這個方法的意義在於:
1.它的效率很高;
2.這個方法是原子操作,不管有沒有在事務中使用,它總是乙個原子操作
如果兩個程序同時呼叫此方法,每個呼叫都會得到正確的更新值.
假設我們設計的feature表需要有乙個id,這個id是唯一且遞增的,
1.建立如下結構的mnesia資料庫表
-record(unique_id, )
2.每為feature表加入一條新記錄時,需要得到新的id值:
mnesia:dirty_update_counter(unique_id, feature, 1)
這裡我們把表名作為key,通過此方法即得到這個表當前的id
以上暫時沒有考慮集群的情況
mnesia:dirty_update_counter ,unique_id表型別應該為預設set。其他型別就出這個錯。
%% 1.建立如下結構的mnesia資料庫表
-record(unique_id,).
-record(t_user,).
%% 2.每為t_user表加入一條新記錄時,需要得到新的id值:
%% mnesia:dirty_update_counter(unique_id, t_user, 1)
%% 這裡我們把表名作為key,通過此方法即得到這個表當前的id%%
create
table
init()
->
mnesia:
start()
,mnesia:create_table(t_user,[,
]),mnesia:create_table(unique_id,[,
])%set 不允許重複資料
.test()-
>
init()
,fun= fun()-
>
user_id =mnesia:dirty_update_counter(unique_id, t_user, 1)
,user=
#t_user
,mnesia:
write
(user)
end,
%% 向表中插入兩條記錄
mnesia:
transaction
(fun)
,mnesia:
transaction
(fun)
%% 像mysql 一樣,主鍵遞增
%% 方法mnesia:dirty_update_counter(tab,
key, incr)
%% tab: 某個存放key對應的最新鍵值的mnesia資料庫表,這個表儲存key-
value%%
key: 鍵名
%% incr: 鍵值遞增量
%% 這個方法的意義在於:
%% 1.它的效率很高;
%% 2.這個方法是原子操作,不管有沒有在事務中使用,它總是乙個原子操作
%% 如果兩個程序同時呼叫此方法,每個呼叫都會得到正確的更新值.
Erlang資料庫Mnesia操作
mnesia是一套輕量級的軟實時分布式資料儲存系統,支援冗餘複製和事務,特別適合於儲存離散的erlang資料塊,尤其擅長ram中的資料儲存。初始化資料庫步驟 1.啟動節點,erl mensa dir dir name mynode 2.建立資料庫模式,mnesia create schema nod...
mnesia資料庫表的id
對於mnesia資料庫表有時候需要有乙個id欄位,就像關聯式資料庫的主鍵.最簡單的辦法是用uuid做id,但是我們希望此id是整數遞增的.或者用 做id也是不錯的辦法.類似於乙個set集合 意思是集合中不可能兩個相同的鍵同時存在 每個鍵對應的值將作為id,方法mnesia dirty update ...
Mnesia資料庫操作整理 1
mnesia資料庫的操作和以前習慣的sql資料庫操作幾乎完全不同,剛開始用很不使用。現將常見的讀寫操作整理於下 1 髒讀 mnesia dirty read tab,key valuelist exit 示例 對於set型別的表,這個操作返回乙個值或者空表,因為set型別表鍵值不可重複。如果對bag...