Erlang ETS(转)

ETS和DETS是Mnesia的基础

erlang的list,处理小量数据是没有问题的,但数据多了后,性能就会下降,它的时间复杂度是O(N),随着数据量性能线性下降,因此引入ETS(erlang term storage)

此外,erlang是immutable variables,而有时候又需要mutable variable,这时候就可以使用ETS来实现,不过它引入了side effects

ETS是不会被垃圾回收的,可以通过ets:delete/1来手工删除,此外ETS是与创建它的进程绑定的,当创建它的进程退出,相应的ETS都会自动删除

ETS对并发写的支持有限,没有使用lock来保证冲突处理,系统会抛异常,只能由应用程序来处理冲突情况:ets:safe_fixtable/2

想查看当前ETS的内容,可以在erl shell下执行:tv:start()

111

ETS有4种,内部用hash table和binary tree来实现的

  • set,O(1)
  • ordered set,O(log N),内部用AVL balanced binary tree实现
  • bag,O(1)
  • duplicate bag,O(1)

ETS的权限保护:

  • public 所有process都可以读写
  • protected 默认权限,只有创建ETS的进程可以写,其他进程只能读
  • private 只有创建ETS的进程可以读写,对其他进程不可见
posted @ 2013-10-21 21:18  Coca-coder  阅读(187)  评论(0)    收藏  举报