2016-03-28 22 views
0

我創建了一個主管,負責啓動每個孩子正在創建自己的ETS表格的孩子。基本上,除了當我嘗試啓動超過50個孩子時,一切都看起來很好,它說太多的數據庫表,這也是一個糟糕的設計。我希望以這樣一種方式實施,即主管創建孩子,所有孩子使用一個ETS表。即使孩子想寫入ETS表格,它也會寫入全球ETS表格。創建與監督員共享一張ETS表格的N個孩子

我試圖谷歌,但找不到任何幫助。

謝謝!

回答

0

這取決於你真正想要什麼,但是你可以讓主管創建表並傳遞給孩子使用的pid /名稱。如果要在進程之間共享該表,您需要使用公共權限。

或者讓一個服務器負責讀取和寫入要存儲的數據,並讓主管和其他孩子一起管理該服務器。

1

爲什麼說創建50個ETS表是不好的設計?這完全取決於你的要求。如果這50個進程需要同時訪問ETS,那麼將它們限制爲只有一個表可能會影響性能,因爲一次只能有一個進程寫入表。

創建一個表或gen_server擁有該表並充當將數據寫入表的網關(由Nathaniel提議)只有在所有這些進程都需要訪問相同數據時纔有意義。

但是在後面的情況下,如果將表ID從主管傳遞給其子項,以便子進程可以並行讀/寫,而不是依靠中央gen_server將請求代理表(除非當然表現不是你的要求)。