2012-10-24 51 views
1

Erlang ETS表可以在不同的进程间共享吗?因此,如果我有两个进程在不同的Erlang运行系统上运行,我可以以某种方式将它们链接起来,以便我在一个ETS表中做的所有更改都会反映在另一个ETS表中。Erlang共享ETS表

+0

看看http://yarivsblog.blogspot.com/2008/05/erlang-does-have-shared-memory.html – halfelf

回答

9

在单个Erlang节点内,可以通过将public选项传递给ets:new来完全共享ETS表。 (注意,如果它的所有者死了,表将会被销毁,除非你已经设立了继承人。)

如果你需要跨几个Erlang节点共享表,你需要使用Mnesia。

+0

我想使用ETS表维持一个“共享”状态之间的不同的节点。我没有考虑Mnesia,因为这会在更新密集型任务中慢得多。 – Dan

+2

据我所知,Mnesia建立在ETS和DETS之上。所以它不应该比自定义实现更慢地降低应用程序的速度,同时也会带来健壮性和文档。可能有人可以给出有关要使用的交易选择的建议(同步/异步,是否肮脏) – Pascal

4

您不能在不同节点上的进程之间“共享”ETS表,ETS表只能由其创建节点上的进程访问。如果你想共享ETS表,那么你将需要在一个节点上创建一个进程,使用该表创建一个进程,并通过这个进程从另一个节点访问表。这并不是那么困难。