erlang資料庫Mnesia主鍵自增

2021-06-23 08:17:33 字數 1902 閱讀 1589

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...