天天看點

ets和dets的效率建議

ets表的底層是由哈希表實作的,不過ordered_set例外,它是由平衡二叉樹實作的。 是以不管是插入還是查找,set的效率要比ordered_set高.采用set還是ordered_set取決于你的需求,當你需要一個有序的集合時,顯然應當采用ordered_set模式。

duplicate_bag要比bag的效率要高, 因為bag要和原來的記錄比較是否有相同的記錄已經插入. 如果資料量很大,相同的記錄越多,bag的效率就越差.

一張ets表是由建立它的程序所擁有, 當此程序調用ets:delete或者程序終止的時候, ets表就會被删除.

一般情況下, 插入一個元組到一張ets表中, 所有代表這個元組的結構都會被從process的堆棧中,複制到ets表中; 當查找一條記錄時, 結果tuple從ets表中複制到程序的堆棧中。

但是large binaries卻不是這樣! 它們被存入自已所擁有的off-heap area中。這個區域可以被多個process,ets表,和binaries所共享。它由引用計數的垃圾回收政策管理, 這個政策會跟蹤到底有多少個process/ets表/binaries引用了這個large binaries. 如果引用數為0的話, 此大型二進制資料就會被垃圾回收掉.

看起來很複雜, 實際結論就是: 兩程序間發送包含大型binary資料的消息其實費用很低, 往ets表插入binary類型元組也很劃算。我們應該盡可能采用binaries來實作字元串或無類型的大資料塊.

文章轉自莊周夢蝶  ,原文釋出時間2007-09-27

繼續閱讀