mnesia数据库表的id

本文介绍如何在Mnesia数据库中实现类似关系型数据库主键的ID生成机制,采用原子操作dirty_update_counter来确保ID的唯一性和递增性。
对于mnesia数据库表有时候需要有一个id字段,就像关系数据库的主键.
最简单的办法是用uuid做id,但是我们希望此id是整数递增的.或者用{node(), erlang:now()} 做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, {item, uid})

2.每为feature表加入一条新记录时,需要得到新的id值:
mnesia:dirty_update_counter(unique_id, feature, 1)
这里我们把表名作为Key,通过此方法即得到这个表当前的id

以上暂时没有考虑集群的情况
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia 数据库管理系统( DBMS ) . . .. . . .. . 4 2 、开始 Mnesia . . .. . .. . . .. . 7 2.1 首次启动 Mnesia . . .. . .. . .. . 7 2.2 一个示例 . . .. . . . .. . 8 3 、构建 Mnesia 数据库 . . .. . .. . 22 3.1 定义模式 . . .. . .. . .. . 22 3.2 数据模型 . . .. . .. . .. . 23 3.3 启动 Mnesia . . . 23 3.4 创建新 . . .. . .. . .. . 26 4 、事务和其他上下文存取 . . .. . .. . .. . 29 4.1 事务属性 . . .. . .. . .. . 29 4.2 锁 . . .. . .. . .. . 30 4.3 脏操作 . . .. . . .. . 33 4.4 记录名与 . . .. . .. . . .. . 34 4.5 作业( Activity )概念和多种存取上下文 . . .. . .. . 37 4.6 嵌套事务 . . .. . .. . .. . 38 4.7 模式匹配 . . .. . .. . .. . 39 4.8 迭代 . . .. . . .. . 41 5 、其它 Mnesia 特性 . . .. . .. . .. . 45 5.1 索引 . . .. . . .. . 45 5.2 分布和容错 . . .. . .. . . .. . 45 5.3 分片 . . .. . . . .. . 46 5.4 本地内容 . . .. . .. . . .. . 53 5.5 无盘节点 . . .. . .. . .. . 54 5.6 更多的模式管理 . . .. . .. . .. . 55 5.7 Mnesia 事件处理 . . . . .. . 55 5.8 调试 Mnesia 应用 . . .. . . 57 5.9 Mnesia 里的并发进程 . . .. . . . .. . 58 5.10 原型 . . .. . . .. . 58 5.11 Mnesia 基于对象的编程 . . .. . .. . .. . . 61 6 Mnesia 系统信息 . . .. . .. . . .. . 64 6.1 数据库配置数据 . . .. . .. . .. . 64 6.2 内核转储 (Core Dumps ). . .. . .. . .. . 64 6.3 转储 . . .. . . . .. . 64 3 6.4 检查点 . . .. . . . .. . 64 6.5 文件 . . .. . . .. . 65 6.6 在启动时加载 . . .. . .. . .. . 67 6.7 从通信失败中恢复 . . .. . .. . . .. . 68 6.8 事务的恢复 . . .. . .. . . .. . 68 6.9 备份、回滚以及灾难恢复 . . .. . .. . . .. . 69 7 Mnsia 与 SNMP 的结合 . . .. . .. . 74 7.1 结合 Mnesia 与 SNMP . . .. . . . .. . 74 8 附录 A : Mnesia 错误信息 . . .. . . 75 8.1 Mnesia 中的错误 . . . . .. . 75 9 附录 B :备份回调函数接口 . . .. . .. . . .. . 76 9.1 Mnesia 备份回调行为 . . .. . . . .. . 76 10 附录 C :作业存取回调接口 . . .. . . .. . 83 10.1 Mnnesia 存取回调行为 . . . . .. . 83 11 附录 D :分片哈希回调接口 . . . .. . 92 11.1 mnesia_frag_hash 回调行为 . . .. . . .. . . 92
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值