ETS和DETS都是两个系统模块,可以用来储存海量的数据,
ETS的全称是Erlang Term Storage(erlang 数据储存),
Dets就是加了个Disk,磁盘ETS,他们的任务相同,提供大型的KV(Key-Value)查询表,ETS比DETS高效,它储存在内存中。
首先分为两个大类:
细分为4类
set | table中的每一个Value(Tuple)都是唯一,并且一个Key只能对应一个Value |
ordered_set | 同set,唯一不同的是table中的Key是有序的 |
bag | table中的每一个Value都是唯一,但是一个key可以对应多个Value |
duplicate_bag | table中每一个key可以对应多个Value,并且允许Value重复 |
效率
set, bag, duplicate_bag内部是采用哈希结构实现,因此查找效率很高,O(1);
ordered_set 内部是采用平衡树结构实现(Key之间是有序的),查找效率相比其他类型略低,是logN级别的;
ETS把元组保存在内存里,而DETS把元组保存在磁盘上,它的最大文件大小是2GB,DETS文件必须先打开才可以操作,用完以后还要正确关闭。
他们之间表的属性也不一样,DETS在打开文件时必须赋予一个全局名称,如果两个或者更多的进程以同一个名称和选项打开了文件,他们就会共享这个表,直到所有进程都关闭他,否则一直是打开状态
ets:all/0
获取所有的 ets 表
ets:delete/1
删除整张表
ets:delete/2
删除表里指定键的所有数据
ets:delete_all_objects/1
删除表里的所有数据
ets:delete_object/2
删除表里的指定数据
ets:first/1
获取 ETS 表里的第一个对象数据的键
ets:foldl/3
对 ETS 数据遍历循环操作
ets:fun2ms/1
把语法函数转为匹配规范的伪函数
ets:give_away/3
改变一个表的拥有者
ets:i/0
在输出端上打印显示所有 ETS 表的信息
ets:info/1
返回一个 ETS 表的信息
ets:info/2
返回给出的跟表相关的项的信息
ets:insert/2
向 ETS 表插入数据
ets:insert_new/2
向 ETS 表插入新数据
ets:is_compiled_ms/1
检测一个 Erlang 数据是否是一个有效已编译的匹配规范
ets:last/1
返回表里的最后一个键
ets:lookup/2
在 ETS 表里查出相应键的值
ets:lookup_element/3
返回 ETS 表里指定键的对象数据的第几个元素数据
ets:match/1 | ets:match/2 | ets:match/3
根据匹配模式匹配表里的对象数据
ets:match_delete/2 | ets:match_object/1 | ets:match_object/2 | ets:match_object/3
根据匹配模式删除表里的对象数据
ets:member/2
判断表里面是否存在指定键的数据
ets:new/2
创建一个 ets 表
ets:next/2
返回表的下一个键
ets:prev/2
返回表的上一个键
ets:rename/2
重新给 ETS 表命名一个名字
ets:safe_fixtable/2
锁定一定 ETS 表使其可以安全遍历
ets:select/1
对 ETS 表里的数据进行匹配比对
ets:tab2list/1
返回一个 ETS 表的所有对象数据的列表
ets:update_element/3
更新 ETS 表里指定键的对象数据的第几个元素数据