什么时候用mnesia,进程字典,ets表
发布网友
发布时间:1天前
我来回答
共1个回答
热心网友
时间:1天前
初学的时候关于这三个东西(mnesia,进程字典,ets表)总是感觉不知道到底怎么样但是感觉很厉害的样子,
但是真正在开发的时候,是用mnesia还是进程字典还是ets表呢?
我这段时间实际的工作经验来看:
1.当我们需要在某个进程中频繁的访问很大块的数据的时候,推荐用进程字典,首先有4中方式可以达到目的:
1.参数传递,进程的运行过程中,所有的函数的参数都带着这些数据。
2.存在ets表中。
3.存在mnesia中。
4.存在进程字典中。
但是在实际测试发现,数据的读写速度:进程字典》ets表》mnesia。所以2,3可以pass了,那么1和4,在时间上没什么太大的差距,但是函数调用的参数传递也是有成本的,所以推荐用进程字典。他的特点是读写速度快,但是无法跨进程访问。
?
2.当我们开发的时候遇到了很多进程要共享某个数据的时候,推荐用ets表,还是有2中方式可以实现:
1.消息传递,以消息的发送作为数据的交换。
2.ets表。
但是消息的传递也是有很大的成本,尤其是大块的数据,消息成本非常高,这时ets表作为共享就非常方便了,但是这时涉及到一个问题,就是会有阻塞的情况发生,当有成千上万的进程(或者更多)去访问同一个ets表的时候,可能会造成阻塞,这时就需要想别的办法了,例如加队列或者放弃ets改用其他方式来处理。
?
3.当我们有很多节点,这些节点内的进程需要共享数据的情况,用mnesia是个不错的选择,mnesia会在联通的节点上都启动一套mnesia进程,负责管理mnesia。每个节点上的mnesia的会和其他节点交换数据,保证每个节点的数据都是一样的。
如何使用erlang mnesia 数据库
mnesia:create_schema(DiscNodes) -> ok | {error,Reason} mnesia:create_schema([node()]) .3、启动数据库:mnesia:start() -> ok | {error, Reason} mnesia:start() .注:数据库创建后,使用数据库必须先启动mneisa服务:erl -mnesia dir ‘“d:/mnesia”’ -s mnesia 创建表:1、声明...
Erlang程序设计的目录
5.4.15 在模式中使用匹配操作符5.4.16 数值类型5.4.17 操作符优先级5.4.18 进程字典5.4.19 引用5.4.20 短路布尔表达式5.4.21 比较表达式5.4.22 下划线变量第6章 编译并运行程序6.1 开启和停止Erlang shell6.2 配置开发环境6.2.1 为文件加载器设定搜索路径6.2.2 在系统启动时批量执行命令6.3 运行程序的几种不...