莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          ets和dets的效率建議

          Posted on 2007-09-27 16:33 dennis 閱讀(2201) 評論(2)  編輯  收藏 所屬分類: erlang
             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來實現字符串或無類型的大數據塊.

          評論

          # re: ets和dets的效率建議  回復  更多評論   

          2007-09-28 16:26 by 千里冰封
          ETS是什么?

          # re: ets和dets的效率建議  回復  更多評論   

          2008-10-15 14:36 by z_axis
          ETS = Erlang Term Storage
          主站蜘蛛池模板: 德令哈市| 静宁县| 句容市| 镇坪县| 鄂托克旗| 青铜峡市| 治县。| 建阳市| 松桃| 三亚市| 金坛市| 济阳县| 治县。| 兴宁市| 道孚县| 攀枝花市| 蓬溪县| 山阳县| 慈利县| 鄱阳县| 青浦区| 宝坻区| 长治县| 布尔津县| 东莞市| 黑山县| 西城区| 蓬安县| 漳平市| 文化| 富顺县| 汤原县| 日土县| 朔州市| 浦县| 固原市| 吉木乃县| 龙井市| 札达县| 城固县| 江口县|