使用mnesia,启动为内存存储模式,及集群部署。
第一步:创建online.hrl
-record(chat, {user_name,
pid
}
).
第二步:创建数据库初始化文件,online_init.erl,将chat表创建为ram模式,并且type为bag
-module(online_init).
-include("online.hrl").
-export([init/0]).
init() ->
mnesia:create_table(chat,
[{ram_copies, [aa@localhost, bb@localhost]},
{type, bag},
{attributes, record_info(fields, chat)}]).
第三步:创建测试代码,online_util.erl
add(Who, Pid) ->
F = fun() ->
New = #chat{user_name = Who, pid = Pid},
mnesia:write(New)
end,
mnesia:transaction(F).
remove(Who, Pid) ->
Oid = {chat, Who, Pid},
F = fun() ->
%% 其他类型用mnesia:delete
%% mnesia:delete(Oid)
%% bag类型用mnesia:delete_object
mnesia:delete_object(Oid)
end,
mnesia:transaction(F).
find(Who, Pid) ->
F = fun() ->
io:format("find result, ~p~n", [mnesia:read({chat, Who})])
end,
mnesia:transaction(F).
select(Who) ->
F = fun() ->
Chat = #chat{user_name = Who, pid = '$1', _ = '_'},
io:format("find result, ~p~n", [mnesia:select(chat, [{Chat, [], ['$1']}])])
end,
mnesia:transaction(F).
启动
启动两个console窗口,分别输入
1)
erl -sname aa -mnesia dir '"/test_mnesia/disc/online"'
返回ok
erl -sname bb -mnesia dir '"/test_mnesia/db/online"'
返回ok
2)第一次启动mnesia的时候,在aa或bb点,输入mnesia:create_schema([aa@localhost,bb@localhost]).
返回ok
注意:
1)、schema只能创建一次
2)、实际上,每个节点都保存一份schema拷贝
3)在aa和bb两点分别输入
mnesia:start().
返回ok
4)初始化表,在aa或者bb点输入
online_init:init().
返回 {atomic,ok}
5)查看表信息,在aa和bb点分别输入
mnesia:info().
返回
---> Processes holding locks <---
---> Processes waiting for locks <---
---> Participant transactions <---
---> Coordinator transactions <---
---> Uncertain transactions <---
---> Active tables <---
chat : with 0 records occupying 300 words of mem
...
...
...
说明表创建成功。
验证
验证,集群增,删,查操作
1)在aa点输入 online_util:add("bob", "im").
返回{atomic,ok}
2) 在bb点输入 online_util:find("bob", "im").
返回
find result, [{chat,"bob","im"}]
{atomic,ok}
3)在bb点输入 online_util:add("bob", "hello").
返回{atomic,ok}
4) 在aa点输入 online_util:find("bob", "im").
返回
find result, [{chat,"bob","im"},{chat,"bob","hello"}]
{atomic,ok}
5) 在aa点输入 online_util:remove("bob", "im").
返回
{atomic,ok}
6) 在bb点输入 online_util:select("bob").
返回
find result, ["im"]
{atomic,ok}
验证,宕机处理
1)aa点输入halt(). 宕掉aa点。
2) bb点输入 online_util:select("bob").
返回
find result, ["im"]
{atomic,ok}
说明,mnesia数据库依旧存在。
3) aa点启动,输入erl -sname aa -mnesia dir '"/test_mnesia/disc/online"'
返回ok
输入 mnesia:start().
返回ok
输入 online_util:select("bob").
返回
find result, ["im"]
{atomic,ok}
说明,mnesia数据库,从bb点同步到aa点,数据依旧存在。
参考文献
[1] http://hideto.iteye.com/blog/232881
分享到:
相关推荐
erlang的高性能集群服务器,erlang解决方案。 供大家学习使用
1. 分布式能力:Mnesia可以跨多个Erlang节点分布数据,这意味着你可以构建跨越多台机器的数据库集群。这提高了系统的容错性,当一个节点故障时,其他节点仍能继续提供服务。 2. 实时性:Mnesia支持事务处理,确保...
Mnesia 是一个强大的分布式数据库管理系统(DBMS),专门为Erlang编程语言设计,特别适用于需要高可用性、持续运行和软实时特性的电信和其他关键业务应用。这个系统允许在多个节点间同步数据,提供了一种在分布式...
**Erlang 分布和集群** Erlang 的分布式特性使其能在多个节点之间轻松部署和管理应用程序。它内置了分布式的原语,支持cnode和jnode,进程可以在节点间自由迁移。节点间的通信高效、安全,通过epmd实现类似DNS的名称...
- **传输层**:Erlang集群支持多种传输方式,如TCP/IP、SSL等。 - **Group Leader**:用于统一管理和协调多个节点之间的交互。 #### Erlang自省机制 - **Trace工具**:Erlang提供了强大的追踪工具,帮助开发者调试...
2. **分布式**:Mnesia可以在多节点的Erlang集群中无缝工作,数据可以在节点之间复制,实现故障转移和负载均衡。 3. **实时**:由于Erlang VM的特性,Mnesia能快速响应数据变化,适合实时应用。 4. **容错性**:即使...
标题提到的"RabbitMQ集群 所需的erlang和rabbitmq的rpm包",指的是在构建RabbitMQ集群时,需要先安装Erlang环境,因为RabbitMQ是用Erlang编程语言编写的。Erlang是一种为并发、容错和实时系统设计的编程语言,其强大...
Erlang是一种面向并发的编程语言,常用于构建高可用性、分布式系统,如BBS(Bulletin Board System,公告板系统)集群。在局域网内构建BBS集群,可以利用Erlang的强项——分布式计算和容错能力,为用户提供稳定、...
2. **分布式Erlang**:如何在多台机器上部署和管理Erlang集群,实现跨节点的进程通信。 3. **行为模式**:如GenServer、GenEvent和Supervisor,它们提供了一种组织和管理Erlang进程的标准方式。 4. **性能优化**:...
Erlang的分布式特性还包括分布式进程和分布式数据库Mnesia,后者是一个事务型数据库,特别适合实时和高可用性系统。 Erlang的 OTP(Open Telecom Platform)框架进一步简化了并发和分布式系统的开发。OTP提供了一...
在Erlang OTP中,分布式数据库Mnesia也提供了强一致性和高可用性的数据存储解决方案。 otp_win64_19.3.exe文件是Erlang OTP 19.3版本的安装程序,适用于Windows 64位操作系统。这个版本可能包含了性能优化、新功能...
5. **Distributed Erlang**:Erlang 支持跨多台机器的分布式计算,通过节点间通信协议实现集群间的进程交互。 在 `otp_src_22.3` 压缩包中,包含了 Erlang OTP 22.3 版本的源代码。要安装此版本,你可以按照提供的...
此外,熟悉Erlang的编程语法和常用模块,如ETS(Erlang Term Storage)和Mnesia(分布式数据库管理系统),也是成为Erlang开发者的必备技能。对于在Windows环境中部署和管理Erlang服务,理解Windows服务和Erlang节点...
Mnesiac的出现,尤其是对于Elixir开发者而言,意味着在搭建和管理Mnesia集群时可以更加便捷。 **Erlang与OTP** Erlang是一种函数式编程语言,因其在构建高可用性、分布式系统中的出色表现而著名。OTP是Erlang生态...
Erlang的分布式和集群特性使其在大规模系统中尤为突出。Erlang的C底层支持保证了高效的分布式计算,内置的分布原语使得跨节点通信变得简单。Erlang的进程是位置无关的,可以方便地进行迁移。全局名称服务、节点心跳...
在数据存储方面,Erlang也提供了多种数据存储选项,这些选项包括但不限于Mnesia,一个Erlang特有的分布式数据库系统,以及其他关系型数据库和键值存储。在选择合适的数据存储方案时,开发者需要考虑数据访问模式、...
这些工具使得Erlang成为构建分布式系统和集群的理想选择。在Erlang中文手册中,你会找到关于如何利用这些工具的详细指导。 "更多erlang资料下载.txt"可能是提供进一步学习资源的链接列表,包含更多的教程、案例研究...
Mnesia的设计理念是分布式,这意味着它可以在多个节点之间同步数据,允许在集群中的不同服务器上进行数据读写。这种特性使得Mnesia在构建分布式系统时非常有用,特别是在需要高可用性和容错性的场景下。 2. **实时...
本文档将详细介绍如何安装 RabbitMQ 集群主从服务,包括安装依赖软件、语言环境 Erlang、安装 RabbitMQ、配置默认数据存储和日志路径、安装 web 界面访问插件等步骤。 安装依赖软件 在安装 RabbitMQ 之前,需要...