`
amornio19840908
  • 浏览: 56962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang mnesia 集群

阅读更多
使用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的高性能集群服务器,erlang解决方案。 供大家学习使用

    Mnesia用户手册.zip

    1. 分布式能力:Mnesia可以跨多个Erlang节点分布数据,这意味着你可以构建跨越多台机器的数据库集群。这提高了系统的容错性,当一个节点故障时,其他节点仍能继续提供服务。 2. 实时性:Mnesia支持事务处理,确保...

    Mnesia用户手册(docx版)

    Mnesia 是一个强大的分布式数据库管理系统(DBMS),专门为Erlang编程语言设计,特别适用于需要高可用性、持续运行和软实时特性的电信和其他关键业务应用。这个系统允许在多个节点间同步数据,提供了一种在分布式...

    Erlang的高级特性和应用

    **Erlang 分布和集群** Erlang 的分布式特性使其能在多个节点之间轻松部署和管理应用程序。它内置了分布式的原语,支持cnode和jnode,进程可以在节点间自由迁移。节点间的通信高效、安全,通过epmd实现类似DNS的名称...

    inside Erlang VM3

    - **传输层**:Erlang集群支持多种传输方式,如TCP/IP、SSL等。 - **Group Leader**:用于统一管理和协调多个节点之间的交互。 #### Erlang自省机制 - **Trace工具**:Erlang提供了强大的追踪工具,帮助开发者调试...

    ecto_mnesia:Mnesia Erlang术语数据库的Ecto适配器

    2. **分布式**:Mnesia可以在多节点的Erlang集群中无缝工作,数据可以在节点之间复制,实现故障转移和负载均衡。 3. **实时**:由于Erlang VM的特性,Mnesia能快速响应数据变化,适合实时应用。 4. **容错性**:即使...

    RabbitMQ集群 所需的erlang和rabbitmq的rpm包

    标题提到的"RabbitMQ集群 所需的erlang和rabbitmq的rpm包",指的是在构建RabbitMQ集群时,需要先安装Erlang环境,因为RabbitMQ是用Erlang编程语言编写的。Erlang是一种为并发、容错和实时系统设计的编程语言,其强大...

    一个用Erlang公告板系统在一个局域网内构造 BBS 集群,

    Erlang是一种面向并发的编程语言,常用于构建高可用性、分布式系统,如BBS(Bulletin Board System,公告板系统)集群。在局域网内构建BBS集群,可以利用Erlang的强项——分布式计算和容错能力,为用户提供稳定、...

    erlang 中文,chm参考文档

    2. **分布式Erlang**:如何在多台机器上部署和管理Erlang集群,实现跨节点的进程通信。 3. **行为模式**:如GenServer、GenEvent和Supervisor,它们提供了一种组织和管理Erlang进程的标准方式。 4. **性能优化**:...

    erlang 设计指南

    Erlang的分布式特性还包括分布式进程和分布式数据库Mnesia,后者是一个事务型数据库,特别适合实时和高可用性系统。 Erlang的 OTP(Open Telecom Platform)框架进一步简化了并发和分布式系统的开发。OTP提供了一...

    分布式应用Erlang:Erlang_OTP_19_win64

    在Erlang OTP中,分布式数据库Mnesia也提供了强一致性和高可用性的数据存储解决方案。 otp_win64_19.3.exe文件是Erlang OTP 19.3版本的安装程序,适用于Windows 64位操作系统。这个版本可能包含了性能优化、新功能...

    erlang_otp_src_22.3.tar.gz

    5. **Distributed Erlang**:Erlang 支持跨多台机器的分布式计算,通过节点间通信协议实现集群间的进程交互。 在 `otp_src_22.3` 压缩包中,包含了 Erlang OTP 22.3 版本的源代码。要安装此版本,你可以按照提供的...

    esl-erlang_22.0~windows_amd64.exe.7z

    此外,熟悉Erlang的编程语法和常用模块,如ETS(Erlang Term Storage)和Mnesia(分布式数据库管理系统),也是成为Erlang开发者的必备技能。对于在Windows环境中部署和管理Erlang服务,理解Windows服务和Erlang节点...

    mnesiac:Mnesia自动群集变得容易!

    Mnesiac的出现,尤其是对于Elixir开发者而言,意味着在搭建和管理Mnesia集群时可以更加便捷。 **Erlang与OTP** Erlang是一种函数式编程语言,因其在构建高可用性、分布式系统中的出色表现而著名。OTP是Erlang生态...

    Erlang高级应用和原理

    Erlang的分布式和集群特性使其在大规模系统中尤为突出。Erlang的C底层支持保证了高效的分布式计算,内置的分布原语使得跨节点通信变得简单。Erlang的进程是位置无关的,可以方便地进行迁移。全局名称服务、节点心跳...

    Building Web Applications with Erlang

    在数据存储方面,Erlang也提供了多种数据存储选项,这些选项包括但不限于Mnesia,一个Erlang特有的分布式数据库系统,以及其他关系型数据库和键值存储。在选择合适的数据存储方案时,开发者需要考虑数据访问模式、...

    Erlang中文手册

    这些工具使得Erlang成为构建分布式系统和集群的理想选择。在Erlang中文手册中,你会找到关于如何利用这些工具的详细指导。 "更多erlang资料下载.txt"可能是提供进一步学习资源的链接列表,包含更多的教程、案例研究...

    备忘录:Mnesia分布式数据库的简单+强大接口

    Mnesia的设计理念是分布式,这意味着它可以在多个节点之间同步数据,允许在集群中的不同服务器上进行数据读写。这种特性使得Mnesia在构建分布式系统时非常有用,特别是在需要高可用性和容错性的场景下。 2. **实时...

    RabbitMQ集群主从安装.docx

    本文档将详细介绍如何安装 RabbitMQ 集群主从服务,包括安装依赖软件、语言环境 Erlang、安装 RabbitMQ、配置默认数据存储和日志路径、安装 web 界面访问插件等步骤。 安装依赖软件 在安装 RabbitMQ 之前,需要...

Global site tag (gtag.js) - Google Analytics