但是真正在開發的時候,是用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的會和其他節點交換數據,保證每個節點的數據都是壹樣的。