mnesia锁数据时机
来源:互联网 发布:怎么注册国外域名 编辑:程序博客网 时间:2024/06/10 04:18
mnesia的锁,分为读锁、写锁等,本次总结一下,在一个事务中,什么操作会触发锁。
做如下实验:
实验一:事务中,先读后写,读写之间又10s中等待;
write(Name) ->
Fun = fun() ->
[{person, Name, Age}] = mnesia:read(person, Name),
io:format("read ok, Name=~p, Age=~p~n", [Name, Age]),
timer:sleep(10000),
mnesia:write({person, Name, Age+1})
end,
{atomic, ok} = mnesia:sync_transaction(Fun).
test2() ->
erlang:spawn(?MODULE, write, ["Andy"]),
% timer:sleep(1000),
erlang:spawn(?MODULE, write, ["Andy"]),
io:format("over!~n"),
timer:sleep(10000),
ok.
结论:
1. 读数据时,会触发读锁
2. 读锁不影响进程2的读表操作
实验二:事务中,先读后写,写后等待10s,再结束事务;
write(Name) ->
Fun = fun() ->
[{person, Name, Age}] = mnesia:read(person, Name),
io:format("read ok, Name=~p, Age=~p~n", [Name, Age]),
Result = mnesia:write({person, Name, Age+1}),
timer:sleep(10000),
Result
end,
{atomic, ok} = mnesia:sync_transaction(Fun).
test2() ->
erlang:spawn(?MODULE, write, ["Andy"]),
timer:sleep(1000),
erlang:spawn(?MODULE, write, ["Andy"]),
io:format("over!~n"),
timer:sleep(10000),
ok.
结论:
1. 写数据时,触发写锁,直到事务结束,才会释放锁
2. 写锁,会延迟进程2的读表操作
实验三:修改实验一的读表语句,手动修改锁为写锁;
write(Name) ->
Fun = fun() ->
[{person, Name, Age}] = mnesia:read(person, Name, write),
io:format("read ok, Name=~p, Age=~p~n", [Name, Age]),
timer:sleep(10000),
mnesia:write({person, Name, Age+1})
end,
{atomic, ok} = mnesia:sync_transaction(Fun).
test2() ->
erlang:spawn(?MODULE, write, ["Andy"]),
% timer:sleep(1000),
erlang:spawn(?MODULE, write, ["Andy"]),
io:format("over!~n"),
timer:sleep(10000),
ok.
结论:
1. 同样印证了,写锁会延迟其他进程的读写操作,直到事务结束,才会释放锁
- mnesia锁数据时机
- mnesia 数据转移
- erlang mnesia 节点同步数据
- mnesia的锁机制
- mnesia
- Mnesia(一)
- Mnesia(二)
- Mnesia(三)
- erlang mnesia
- erlang mnesia
- mnesia 总结
- 缩减数据集成工作的适当时机
- 逐渐新增N个Mnesia节点,并确保数据在这些节点上保持同步.
- 逐渐新增N个Mnesia节点,并确保数据在这些节点上保持同步.
- Mnesia用户手册:三,构建Mnesia数据库
- Mnesia用户手册:三,构建Mnesia数据库
- Mnesia用户手册:三,构建Mnesia数据库
- [数据挖掘导论]术语:时机性采样(opportunistic sample)
- 修改MySql密码
- Android API翻译之WebViewClient
- 用wamp5模拟一次AJAX请求
- leetcode 357 c++. Count Numbers with Unique Digits
- cf451e Devu and Flowers(容斥原理)
- mnesia锁数据时机
- java 语言中try catch的用处
- StringBuffer的用法
- 闭包
- Spring MVC 4 + Spring Security 4 + Hibernate +JPA实战
- vector 计算数组中的最大值 最小值
- Java学习重点易忽略问题整理
- [AHK]华泰通达信交易客户端锁定后自动解锁
- sql语句查询各门课程平均分的最大值