什么时候用mnesia,进程字典,ets表
发布网友
发布时间:2024-06-06 20:59
我来回答
共1个回答
热心网友
时间:2024-06-06 20:57
初学的时候关于这三个东西(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的会和其他节点交换数据,保证每个节点的数据都是一样的。