Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。
参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样,我们也创建这样一个表erlang_sequence,用来索引其他表的自增id,看似麻烦,效果还是很理想。
-module(m).
-export([init/0, reg/2]).
-record(user, {id, name, age}).
-record(erlang_sequence, {name, seq}).%自增索引表,维护其他表的自增id
init() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(erlang_sequence, [{attributes, record_info(fields,
erlang_sequence)} , {type,set}, {disc_copies, [node()]} ]),
mnesia:create_table(user, [{attributes, record_info(fields, user)} ,
{type,set}, {disc_copies, [node()]} ]),
ok.
reg(Name, Age) ->
F = fun() ->
UserId = mnesia:dirty_update_counter(erlang_sequence, user, 1),
User = #user{id = UserId, name = Name, age = Age },
mnesia:write(User)
end,
mnesia:transaction(F),
ok.
运行代码:
D:\>erl -mnesia dir '"mnesia"'
Eshell V5.10.2 (abort with ^G)
1> c(m).
{ok,m}
2> m:init().
ok
3> m:reg("xiaomin",18).
ok
4> m:reg("xiaohong",17).
ok
5> tv:start().
<0.92.0>
Mnesia数据库视图:
分享到:
相关推荐
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...
### Mnesia数据库:Erlang中的分布式数据库管理系统 #### 引言 Mnesia,作为Erlang编程语言的一部分,是一款由爱立信公司开发的分布式数据库管理系统(DBMS)。自1997年以来,Mnesia一直是Open Telecom Platform...
1.2.Mnesia.数据库管理系统(DBMS 2、开始.Mnesia 2.1.首次启动.Mnesia 2.2.一个示例 3、构建.Mnesia.数据库 3.1.定义模式 3.2.数据模型 3.3.启动.Mnesia 3.4.创建新表 4、事务和其他上下文存取 ...
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...
**ecto_mnesia:Ecto适配器与Mnesia Erlang术语数据库** ecto_mnesia是Ecto框架的一个适配器,它允许开发者在Elixir应用中使用Mnesia,一个内置在Erlang虚拟机(VM)中的分布式、事务性的术语数据库。Mnesia以其高...
Mnesia是一个高度可扩展的分布式数据库管理系统,主要为实时系统设计,尤其适用于Erlang和Elixir编程语言。它作为OTP(Open Telephony Platform)的一部分,提供了对高可用性、容错性和低延迟数据存储的出色支持。 ...
《Mnesia用户手册》是专为理解和操作Erlang编程语言中的Mnesia数据库管理系统而编写的详尽指南。Mnesia是Erlang OTP (Open Telephony Platform) 库中的一个核心组件,它是一个强大的分布式数据库系统,特别适用于...
Erlang提供了多种数据库连接库,如Mnesia(Erlang内置的分布式数据库)或者其他第三方库如MySQL、PostgreSQL的驱动,用于存储和检索游戏数据。 6. **游戏源码分析**:对于初学者来说,分析游戏服务器的源码可以帮助...
erlang-mnesia-19.3.6.4-1.el7.x86_64.rpm
本项目是一个基于Erlang的小型游戏服务器,使用了Mnesia数据库来存储游戏数据。 Mnesia是Erlang内置的一个分布式数据库管理系统,支持事务处理和实时查询,非常适合实时性要求高的游戏场景。在这个小型游戏服务器中...
cachet将插入您的mnesia数据库并通过侦听数据库上的事件来工作。 您的主应用程序供稿数据库不必重写。 您的使用数据库的客户端可能需要一些代码更改才能调用cachet API,而不是mnesia (在某些情况下,只需在代码中...
Mnesia 是一个强大的分布式数据库管理系统(DBMS),专门为Erlang编程语言设计,特别适用于需要高可用性、持续运行和软实时特性的电信和其他关键业务应用。这个系统允许在多个节点间同步数据,提供了一种在分布式...
Mnesia是一个分布式数据库管理系统,特别适用于需要持续运行和具备软实时特性的Erlang应用,如电信系统。它作为开放式电信平台(OTP)的一部分,是用Erlang编程语言实现的。Mnesia的设计初衷是为了解决电信应用中的...
此外,Erlang OTP的Mnesia数据库系统支持分布式数据存储和事务处理,非常适合构建容错性强的系统。 总的来说,Erlang OTP 25.0 for Windows 64位是一个强大的开发工具,对于那些需要构建高可用、高性能、分布式应用...
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。..., • 使用内置的Mnesia数据库和其他表存储功能。, 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。
4. **库和工具的更新**:OTP中的各种库(如Mnesia数据库、ERTS(Erlang Run-Time System)和其他并发工具)可能进行了升级,以适应新的需求和改进功能。 5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息...
- **OTP(开放电信平台)**:Erlang OTP是一套库和设计原则,提供了构建可靠系统的框架,包括Mnesia数据库、Event Manager、Supervisor和GenServer等行为模块。 学习Erlang时,你需要掌握以下核心概念: - **BEAM...
Erlang的Mnesia数据库是一个可扩展的、非关系型、事务性数据库,它作为内存中的数据存储,提供了非常快的读写能力。虽然它不适用于大型数据存储,但在需要快速读写的系统中非常有用。Erlang的表存储功能是用于持久化...