在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直接操作。

mnesia的脏读和事物读的测试的更多相关文章

  1. mnesia的脏写和事物写的测试

    在之前的文章中,测试了脏读和事物读之间性能差别,下面测试下脏写和事物写之间的性能差别: 代码如下: -module(mnesia_text). -compile(export_all). -recor ...

  2. 【Mysql】数据库事务,脏读、幻读、不可重复读

    一.什么是数据库事务 数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开始与事务结束之间 ...

  3. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  4. SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  5. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  6. SQL Server 已提交读快照 测试

    1. 打开数据库 已提交读快照 选项 2. 数据库 已提交读快照 模式下的测试 a) 测试表 Test b) 开启事务1,更新数据C2 = '200'(未提交) BEGIN TRAN ' WHERE ...

  7. MySQL脏读、虚读、幻读

    事务的特性: 原子性:指处于同一个事务中的多条语句是不可分割的. 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态.比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K. 隔离 ...

  8. MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制

    一.SQL注入攻击 1.什么是SQL注入攻击 一些了解sql语法的用户,可以输入一些关键字 或合法sql,来导致原始的sql逻辑发生变化,从而跳过登录验证 或者 删除数据库 import pymysq ...

  9. MySQL数据库(六) —— SQL注入攻击、视图、事物、存储过程、流程控制

    SQL注入攻击.视图.事物.存储过程.流程控制 一.SQL注入攻击 1.什么是SQL注入攻击 import pymysql conn = pymysql.Connect( user="roo ...

随机推荐

  1. 让Dropdownlist既有静态项又有动态项或者既能有编辑项又能绑定数据源

    原文发布时间为:2008-10-27 -- 来源于本人的百度文章 [由搬家工具导入] protected void Page_Load(object sender, EventArgs e) //Dr ...

  2. linux下的用户管理(一)

    linux下有三类用户: 1.超级用户:root具有操作系统的一切权限,UID值为0的是超级用户 2.普通用户:只具有操作系统有限的权限,UID是从500到6000范围 3.伪用户:是为了方便系统管理 ...

  3. LeetCode总结【转】

    转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetco ...

  4. flashcache 介绍

    rpm: flashcache-utils-0.0-4.1.el6.x86_64 kmod-flashcache-0.0-3.el6.x86_64 基本介绍: Flashcache是Facebook技 ...

  5. LeetCode OJ--Copy List with Random Pointer **

    https://oj.leetcode.com/problems/copy-list-with-random-pointer/ 灵活的指针链表应用. 每个节点有两个指针next,random,对本链表 ...

  6. EOJ Monthly 2018.7

    准备继续大学acm啦 又要开始愉快的码码码啦 第一次在华东师大OJ上面做题 看来EOJ上的积分体质是假的,我怎么一把上红??? A.数三角形 神tm的防AK题放在A,出题人很不友好啊... 先写了个暴 ...

  7. Java 8 Lambda表达式的使用

    lambda表达式允许你通过表达式来代替功能接口.lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增 ...

  8. SecureCRT介绍、安装、使用(转)

    http://blog.csdn.net/liang19890820/article/details/49701429 简介 SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简 ...

  9. ios界面笔记(一)

    基于一个简单视图的view解析

  10. iOS 在Xcode中使用OpenSSL库

    最近要做一个密码键盘,想内置一些加密算法,所以就想到了添加OpenSSL库,现在mac也自带了OpenSSL库,但是每次都从终端是生成是很麻烦的.网上找了很多文档.博客去介绍如何编译可以在Xcode中 ...