1.什么是ETS,DETS?
是一种用于存储存储元组的系统模块,erl自带的,在理论上来说他们可以存储无限数据,只要你有足够的存储空间,那ets和dets有什么不同呢,ets用的是内存存储,dsets用的是磁盘存储,前者的存取速度更快,但是它并不能长期存储,意思是只要erl程序一结束,它所存的数据就会丢弃,但ets却不会,若重启后,会检查一致性,若发现有误,会尝试性修复。
2.ETS
1.创建表 TableId = ets:new(Name,[Opt]).
1.首先表一共有4种set,ordered_set,bag,duplicate_bag.
set:每个键只能出现一次,后一个插入会覆盖前一个。
ordered_set:和set唯一不一样的它的键值是有序的,按字典序的大小排序。
bag:可以有2个或以上的相同键的不同值的原组。
duplicate_bag:可以有同键同值的元组。
2.其次表有3种权限
private:只有主管程序可以对它进行读写
public:所有知道该表标示的程序都可以进行读和写
protected:所有知道该表标示的都可以进行读,但是只有主程可以进行写,这个模式很好。
2.插入 ets:insert(TableId,{Key,Value}) -> true
3.查找 ets:lookup(TableId,Key) -> Value | []
4.得到一个列表 ets:tab2list(TableId) -> List
5.删除表 ets:delete:(TableId) -> true | expection error
6.底层原理:
除了ordered_set是用平衡树二叉树构成以外,其他都是用散列表构建的,这意味着ordered_set的空间复杂度会更少,插入时间复杂度恒定,而其他表插入的时间复杂度会随着数据量的增多而增多。
2.DSETS
1.创建表 dets:open_file(filename,[Opt])
1.首先一共有3种类型
set bag duplicate bag解释和ETS一样。
2.访问权限
只要open_file指定对应的文件路径,就可以共享文件