Erlang基础Mnesia 之应用场景(Why)

废话几句:

关于技术学习我的理解是三部曲,What,How,Why,具体释义请参见:学习技术的三步曲:What、How、Why。后续所有的技术博客我都均会按照这种章节来写我的技术博客。

Why:

在一个包含多个节点的Erlang集群中,请求需要正确地转发,数据需要在跨主机间正常访问和及时更新。为了保证数据的一致性,需要将这些操作放在一个事务中。

需要在运行期间能够添加、删除节点,并且提供持久化(persistence)确保能快速恢复所有可能的失败场景

Mensia是综合了ETS的高效、简洁和DET的Erlang分布式特性。并在上面添加事务特性保证数据一致性的一个功能强大的分布式数据库。它的可简单,可复杂。

Mensia专注大规模并发,高可用的软实时系统(例如电信),如果系统需要下列需求,你可以考虑使用Mnesia:

    • 潜在复杂的K-V数据快速查找
    • 为了支持位置透明度的跨节点的集群分布式和复制数据
    • 支持快速访问的持久化数据
    • 表位置和表功能运行时重新配置
    • 支持可能是跨多接点的分布式集群事务
    • 数据索引
    • 具有典型Erlang系统容错水平
    • 数据模型与Erlang数据类型或者Erlang本身的紧耦合。
    • 没有软实时期限的关系查询
  如果是以下需求,请不要使用Mnesia:
    • 简单的K-V查找
    • 作为存储例如图片视频文件等大量二进制的存储介质
    • 一个持久化的日志
    • 需要存储上GB数据的数据库
    • 持续运行的大型数据库归档

对于简单的K-V查找需求使用ETS表或者dict模块库即可。对于大量二进制需求对每个项目进行独立处理。在处理审计和跟踪日志,你应该首选disk_log。

如果你正在寻找下一个Web2.0社交网络杀手级应用,它可能隔夜就能产生上亿条用户数据,就不要考虑使用Mnesia。对于容易访问大量的数据项,MySQL,Couch DB, PostgreSQL, Berkeley DB,是比较正确的选择。Erlang都有开源的驱动和API,Dets表的上限是2GB,存储类型是disc-only拷贝的Mnesia上限就是2GB。对于其它存储类型上限取决于操作系统架构,在32位系统的上限是4GB,64位系统的上限是:16 exabytes(16 * 1018 bytes)。如果你存储的数据超过这个限制,你需要考虑使用分片功能。将原始数据分片到集群中的各个节点。Mnesia支持数据分片。

Mnesia不适合存WEB2.0的所有数据,但是它可以用来保存所有用户的session信息作为系统cache,一旦用户登录它可以从持久化介质中读入,并且作为冗余拷贝到集群中的其它节点。当你检索用户登录时,可能会花费一点时间,但是一旦登录后,所有的session活动就会比较快了,当用户退出登录时,需要删除实体且更新用户信息到持久化数据库中。

Mnesia在处理上千万的用户实时数据是相当快和可靠的,所以在正确的场景下使用它在维护、操作方面获益不小。想想你的应用数据库,来至外部系统,API等不同格式的数据,让他们存储在相同的内存空间,并且可以通过Erlang进行均衡控制,你的应用不仅仅高效,而且容易维护。

 

由于英文水平有限,诚恳指正。

------------------------------------------------------

送上一首阿哲的歌新曲:you are my destiny

 

 

转载于:https://www.cnblogs.com/IT-Nobody/p/3732718.html

如何使用erlang mnesia 数据库 Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章将着重说明 如何使用 Mnesia 数据库 阅读详情

相关推荐

erlang mnesia 常用使用技巧

Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧

没有开花的树 3194

erlang版游戏场景aoi(基于四叉树)

erlang版游戏场景aoi(基于四叉树),200行代码,可直接使用,有单元测试。

Erlang 四叉树的场景管理

基于四叉树的场景管理,主要用于战斗查找。效率和层数有关。层数越多,查找越精确。效率越低。一般建议3-7层。

[Erlang12] Mnesia分布式应用

[Erl_Question12] Mnesia分布式应用 情景: 设计一个图书管理系统,需求: 1. 基本的增删查改功能; 2. 支持多节点备份(其中一个节点挂了进,对外接口不影响)。 方案一: Erlang 代码如下:https://gist.github.com/zhongwencool/28f7db8d52134b082f97 启动shell: erl -nam...

weixin_30570101的博客 218

ErlangMnesia——为高伸缩性应用准备的数据库管理系统

看来我们很可以称2007为“数据库正规化的神秘面纱被揭穿的一年”。我们已经看到了一些有意思的讨论,一些大型网站为了能够处理每小时上千万的访问请求,而放弃了传统关系数据库的路子。根据Joe Gregorio最近的观察,出现了这样一些常见方案(这里强调的是我的观点):\ 如果你想伸展到拍字节(Petabyte,2的50次方,约千万亿)的级别,或者每天数十亿请求,你就需要:\分布式部署。数据必须分布到多...

cpongo5 216

erlangmnesia 的使用实例

参考资料: mnesia 用户手册相关的微博 mnesia 应用例子一个 关于mnasia: 数据库启动 启动的时候指向一个特定的数据库: erl -mnesia dir '"Dir"'指定了Mnesia存储数据的目录, windows下可以是erl -mnesia dir 'Dir' DBMS通过mnesia:start()启动 数据库停止 mnesia:stop() 可以通过mne...

dianboju4932的博客 258

Erlang程序设计》第十七章 Mnesia: Erlang数据库

第十七章 Mnesia: Erlang数据库 Table of Contents 第十七章 Mnesia: Erlang数据库 17.1 数据库查询 17.1.1 选取表中所有的数据 17.1.2 选取表中的数据 17.1.3 按条件选取表中的数据 17.1.4 从两个表选取数据(关联查询) 17.2 增删表中的数据 17....

weixin_30586085的博客 242

erlangmnesia总结

一、mnesia的分布式原理: 1、创建schema 在一个节点上,通过 mnesia:create_schema(NodeList), 在整个集群中,创建空的schema。NodeList指定了集群中所有的节点。 注意: 1)schema只能创建一次 2)实际上,每个节点都保存一份schema拷贝  Mnesia封装成一个OTP的[color=red]应用程序,要创建一个空模式并

zcc_0015的专栏 3345

ErlangMnesia简单入门

1.什么是Mnesia? Mnesia在我理解里面就是一种数据库,是Erlang自带的,它支持事务,这是最重要的事务就是要么做,要么全都不做,而且事务有几个重要的概念我们需要了解,因为只有我们知道事务有什么性质,才知道什么场景该用到事务,什么场景不需要。 2.事务几个重要概念 1.原子性(Atomicity)——每个事务都是一个不可分割的单元,要么整体成功,要么整体失...

fbher的博客 3788

erlang mnesia集群建立

mnesia数据可以实现集群共享数据库数据库表可以在其中某个节点所在的数据库目录,可以拷贝到其他节点数据库目录,mnesia会同步数据库,在启动时执行mnesia:wait_for_tables实现数据库数据同步。 erlang mnesia集群建立有两种方法: 方法一: 1、启动时所有节点,并且使节点互通(设置同样的cookie,并且启动epmd,可以通过net_adm:ping

erlang 2702

erlang游戏服务器网关源码.zip

erlang游戏服务器网关源码.zip

[Erlang]Mnesia的备份与还原

数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据。文章首先介绍如何备份和还原Erlang Mnesia数据库,然后从备份、回滚两大方面深入探讨mnesia的备份机制。备份数据库Mnesia启动后,可以使用mnesia:backup()备份,函数原型:mnesia:backup(Opaque [, BackupMod]) -> ok | {e

Sunface撩技术 1827

[Erlang]Mnesia设置主键自增

Mnesiaerlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样

Sunface撩技术 1648

MnesiaErlang数据库

在做任何事之前,必须先创建一个Mnesia数据库。这件事只需要做一次。会在NodeList(它必须是一个包含有效Erlang节点的列表)里的所有节点上都初始化一个新的Mnesia数据库。这个案例给出的节点列表是[node()],也就是当前节点。Mnesia完成初始化并创建了一个名为的目录结构来保存数据库。然后退出Erlang shell,用操作系统的ls命令进行验证。/home/joe/some/path/to/Mnesia.company是将要保存这个数据库的目录。

qq_53795917的博客 1332

mnesia 和mysql 同步,让我们聊聊Mnesia(一)

Mnesia是什么MensiaErlang的OTP库中一个带有强事务的分布式KV存储引擎。可以非常方便且高效的存储Erlang的任何数据类型。并且该系统支持持久化和内存表混合使用,不强制要求所有节点的性质相同。Mnesia的分布式事务是怎么实现的Mnesia的事务模型是2PC的模型,基本上可以分为以下几个步骤让所有参与的Node准备进行提交如果有一个Node回答No,让所有回答yes的Node回...

weixin_35894622的博客 418

让我们聊聊Mnesia(一)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33894992的博客 200

Erlang语言的嵌入式网络

Erlang是一种并发编程语言,最初由爱立信(Ericsson)为电信系统开发。它的设计目标是支持高度并发的分布式系统,并能够提供高可用性和可伸缩性。轻量级进程:Erlang使用轻量级的进程模型,可以创建数以万计的并发进程,而不需要额外的操作系统资源开销。这使得Erlang特别适合嵌入式系统中需要并发处理的场景。消息传递:Erlang进程之间通过异步消息传递进行通信,避免了传统共享内存模型可能引发的竞态条件和死锁的问题。这种机制使得并发编程变得更加安全和简洁。错误处理。

2501_91048812的博客 1444
上一篇: 从今天开始起,养成写Blog的习惯
下一篇: Erlang Mnesia 基础之二(How)
aori3715
博客等级 码龄10年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值