【问题标题】:Erlang shared ETS tablesErlang 共享 ETS 表
【发布时间】:2012-10-14 09:23:17
【问题描述】:

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

【问题讨论】:

标签: erlang shared ets


【解决方案1】:

在单个 Erlang 节点中,ETS 表可以通过将public 选项传递给ets:new 来完全共享。 (但请注意,如果其所有者死亡,则该表将被销毁,除非您设置了继承人。)

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

【讨论】:

  • 我想使用 ETS 表来维护不同节点之间的“共享”状态。我没有考虑 Mnesia,因为这在更新密集型任务中会慢得多。
  • 据我所知,Mnesia 是建立在 ETS 和 DETS 之上的。因此,它不应该比自定义实现更减慢您的应用程序,而是为您带来健壮性和文档。可能有人可以就选择使用的事务(同步/异步,脏与否)提供建议
【解决方案2】:

您不能在不同节点上的进程之间“共享”ETS 表,ETS 表只能由创建它的节点上的进程访问。如果要共享 ETS 表,则需要在一个节点上创建一个进程,即具有该表的节点,并通过此进程从另一个节点访问该表。其实没那么难。

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 2012-10-18
    • 2016-09-10
    • 2021-01-19
    • 2016-10-27
    • 2010-12-30
    • 2015-10-27
    • 2010-12-19
    • 2011-02-17
    相关资源
    最近更新 更多