mnesia mysql性能_mnesia数据库学习笔记三

本文深入探讨了Mnesia数据库的事务属性,包括原子性、一致性、隔离性和持久性,并详细介绍了锁的种类和使用,如读锁、写锁、读表锁和写表锁。此外,还讲解了脏操作、记录名与表名的区别、活动概念与访问上下文、嵌套事务、模式匹配以及迭代操作。Mnesia的锁机制确保了无死锁问题,而脏操作则提高了效率但牺牲了部分事务特性。最后,文章提到了在遍历时需要注意的性能和内存消耗问题。
摘要由CSDN通过智能技术生成

mnesia数据库学习笔记三

事务及其它访问事务属性,包括原子性,一致性,隔离性,持久性

脏操作

记录名字与表名字

活动概念与访问上下文

嵌套事务

模式匹配

Iteratoin

1、事务属性

Mnesia事务就是将一系列数据库操作封装在一个函数块中。函数块作为一个事务进行运行所有叫作函数对象。保作将影响到所有相关节点上。

Mnesia提供了如下重要属性:事务函数内部不涉及操作在其它事务中,当它在执行一系列表操作时

事务保证了要么在所有节点上操作成功,要么失败但没有在任何节点上产生负作用

提供了Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性).ACID.

2、锁

Mnesia使用5种锁读锁, 在复制记录读前加读锁

写锁, 在事务写记录前,会在指定记录的所有复件上添加写锁

读表锁,如果一个事务遍历整个表搜索指定条件记录,最低效是设置记录锁,同时也是大量内存消耗。些时可以指定一个读表锁。

写表锁,如果一个事务要大量写入一个表,最好你用写表锁

粘锁,当一个事务操作完成后,锁依然存在。

Mnesia采用动态策略应对如mnesia:read/1,自动添加和释放锁。程序员无须考虑。

Mnesia不用担心死锁问题,当系统怀疑某个锁死锁时,它会释放该锁,然后再执行一遍, 多个相同事务不能保证顺序执行,但可以保证都执行。程序员不能设定某个事务的优先级。

切不可执行代码带有事务副作用。如在receive语句在事务,可能产生系统假死等。

当一个事务异常终止时,Mnesia会自动的释放其持有的所有锁。

Mnesia函数:

mnesia:transaction(Fun) -> {aborted, Reason} | {atomic, Value},该函数执行一个带函数Fun的事务。

mnesia:read({Tab, Key}) -> transaction abort | RecordList, 返回所有带Key的记录

mnesia:wread({Tab, Key}),该函数和上一函数相同,除由读锁改为写锁,如果执行一个读记录,修改, 写入记录,那么直接用写锁效率更高。

mnesia:write(Record).写入一条记录到数据库

mnesia:delete({Tab, Key}),删除指定表键的所有记录

mnesia:delete_object(Record)用Record的OID删除对应记录

粘锁:

普通情况下mnesia每次写入操作的时候,都会锁住所有复件。如果针对一个大量写入到在一个复件的情况下, 那么粘锁就可以派上用场了。在没有其它复件存在的情况下,粘锁和普通锁差不多,没有什么特别影响。

粘锁在第一次使用后, 并不立即释放。下次我们使用粘锁在同一节点的同一记录上,那么这个粘锁就已经设置好了。所有效率更高。多用于一主多从库&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值