欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

什么时候用mnesia,进程字典,ets表

程序员文章站 2022-07-15 11:38:19
...

初学的时候关于这三个东西(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的会和其他节点交换数据,保证每个节点的数据都是一样的。