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()
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的进程可以读写,对其他进程不可见

浙公网安备 33010602011771号