可以用来搞笑存储海量的Erlang数据,提供大型的键值查询表,ETS常驻内存,DETS则常驻磁盘,ETS表查询速度更快,而DETS运行时占用的内存更小
1.表的类型
- 保存的是元组,元组里的某一个元素(默认是第一个)被称为该表的键.通过键可以向表里插入和提取元组.分为连个基本的表类型:异键表(set)和同键表(bag);基本表类型有有四种表类型:异键,有序异键,同键,副本同键
2.四种基本操作
- 1)创建一个新表或打开现有的表: 用ets:new或dets:open_file实现
- 2)向表里插入一个或多个元组: insert(TableId,X),其中X是一个元组或元组列表
- 3)在表里查找某个元组: lookup(TableId,Key) ,得到的结果是一个匹配key的元组列表
- 4)丢弃某个表: dets:close(TableId) 或 ets:delete(TableId).
3.创建一个ETS表
- 1)ets:new(Name,[Opt]) -> TableId : Name是一个原子,[Opt]是一列选项分为:
- set|ordered_set|bag|duplicate_bag : 创建一个指定类型的ETS表
- private 创建一个私有表,只有主管进程才能读取和写入它
- public 创建一个公共表,任何知道此表标识符的进程都能读取和写入它
- protected 创建一个受保护表,任何知道此表标识符的进程都能读取它,但只有主管进程才能写入它
- named_table 如果设置了此选项,Name就可以被用于后续的表操作
- {keypos,K} 用K作为键的位置,通常键的位置是1。基本上唯一需要使用这个选项的场合是保存Erlang记录(它其实是元组的另一种形式),并且记录的第一个元素包含记录名的时候。
- 2)建表示例:ets_test.erl