在mnesia中,有脏读脏写等以及事物读写,它们的差异通过测试不难发现:

代码如下:

-module(mnesia_read_test).

-compile(export_all).

-record(r_test, {id, name}).

start(N) ->
timer:tc(mnesia_read_test,dirty_read,[N]). start2(Num) ->
timer:tc(mnesia_read_test,t_read,[Num]). init() ->
    case mnesia:create_schema([node()]) of
        ok ->
            ok;
        _ ->
            mnesia:delete_schema([node()]),
            mnesia:create_schema([node()])
    end, 
    mnesia:start(),
 
    case mnesia:create_table(r_test, [{attributes, record_info(fields, r_test)},
{record_name, r_test},{disc_copies, [node()]}]) of
     {atomic, ok} ->
         ok;
_Any1 ->
mnesia:delete_table(r_test),
mnesia:create_table(r_test, [{attributes, record_info(fields, r_test)},
{record_name, r_test},{disc_copies, [node()]}])
    end, mnesia:transaction(fun() -> t_write(10000) end). t_write(0) ->
ok;
t_write(N) ->
Name = lists:append(["name_", N]),
R = #r_test{id=N, name=Name},
mnesia:write(R),
t_write(N-1). dirty_read(0) ->
ok;
dirty_read(Num) ->
mnesia:dirty_read(r_test, Num),
dirty_read(Num-1). t_read(0) ->
ok;
t_read(Num) ->
mnesia:transaction( fun() -> mnesia:read(r_test, Num) end),
t_read(Num-1).

%%这里创建的表类型为:disc_copies

{disc_copies,NodeList} NodeList每个节点都有内存备份和磁盘备份

测试结果如下:

不难发现,脏读比事物读快了至少1个——2个数量级,获取的结果为微秒(1秒 = 1000000微秒)

从mnesia.erl 追踪脏读源码到mnesia_lib.erl中:

db_get(Tab, Key) ->

db_get(val({Tab, storage_type}), Tab, Key).

db_get(ram_copies, Tab, Key) -> ?ets_lookup(Tab, Key);

db_get(disc_copies, Tab, Key) -> ?ets_lookup(Tab, Key);

db_get(disc_only_copies, Tab, Key) -> dets:lookup(Tab, Key).

发现是ets直接操作。

最新文章

  1. [Note] Software Testing
  2. [2014.01.27]wfPng 水印贴图组件 2.1
  3. 黑马程序员——【Java基础】——正则表达式
  4. Android组件系列----ContentProvider内容提供者
  5. [改善Java代码]用整数类型处理货币
  6. eclipse中的maven配置
  7. Altium中Fill,Polygon Pour,Plane的区别和用法
  8. CAN总线与RS485的比较
  9. iOS 开发问题集锦(一)
  10. sql语句实现隐藏手机号码中间四位的方法
  11. unity零基础开始学习做游戏(一)为了实现你的游戏,你需要提前做的准备工作
  12. javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和
  13. PTA3
  14. WPF:Hyperlink如何绑定数据
  15. HDU 1277全文检索(字典树)
  16. 《数据库系统概念》11-扩展的E-R特性
  17. 阿里云安装kubernetes-UI报错endpoints \"kubernetes-dashboard\" not found解决方法
  18. OpenStack Networking – FlatManager and FlatDHCPManager
  19. HDU1002 A + B Problem II 大数问题
  20. 通用的将Excel导入数据集的方法

热门文章

  1. javascript实现可拖动DIV层
  2. 一个Android Socket的例子(转)
  3. 桶排序Bucket sort(转)
  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---16
  5. javascript 获取焦点和失去焦点事件
  6. hadoop(一)hadoop简介
  7. 前端优化 -- Combo Handler
  8. Codeforces 898 B.Proper Nutrition
  9. ios学习的博客地址
  10. SQLite添加列的限制