在接触的新项目中,大量使用了ETS表用于临时存储Erlang数据,于是对ETS表的相关知识稍作总结。 ETS是Erlang用于高效存储大量数据的系统模块之一(另一个是DETS),ETS表中的数据存储是临时的,当表释放时,相应的数据也会被随之丢弃。 ETS向我们提供了大型的“键-值”搜索表,一个ETS表实际上就是一系列的Erlang元组,元组中的第一个(默认)为表的键,我们的操作基本都是基于键来实现的,若向表中插入元组,则还需要考虑到表的类型,ETS表共有四种类型:set,orderde set,bag,duplicate bag。四种类型的区别在于,set类型下表中的元组键值都不能相同,ordered set类型下元组会进行排序,bag类型下同一表中的多个元组可以有相同的键值,但是不能有完全相同的两个元组,在duplicate bag类型下同一表中可以存在两个完全相同的元组。 一个ETS表隶属于创建它的进程,当进程死掉或者调用了ets:delete,ETS表也会随之被删掉。 下面介绍一下表的4种基本操作: 1, 创建一个新表:ets:new(TabName,[Opt]) 2, 向表中插入一个或多个元组:ets:insert(TabName,X) 3, 在表中查找元组:ets:lookup(TabName,Key) 4, 释放表:ets:delete(Tab) 注:ets:new函数中第二个参数[Opt]是一个选项列表,取值如下: set/ordered_set/bag/duplicate_bag,表的类型。 private/public/protected,表的打开方式,决定对表的读写权限。 Named_table,命名表,如果有此选项,则在后面可以用Name操作表。 {keypos,K},使用K作为键的位置,通常为1,只有在存储记录时才需要这个选项(记录的第一个元素总是记录名)。 打开一个ETS表不带任何选项时,默认选项为[set,protected,{keypos,1}]。
|