2012-10-24 102 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表,那麼你將需要在一個節點上創建一個進程,使用該表創建一個進程,並通過這個進程從另一個節點訪問表。這並不是那麼困難。