`

[笔记]erlang ets笔记

 
阅读更多

额 电子书是买了 然后再买了本erlang程序设计 

再看ets和dets那部分 就权当做个笔记啦....

 

erlang程序设计 写道
ETS和DETS基本上是在做同一件事:它们提供大型的“键—值”搜索表。所不同的是,ETS驻留在内存,而DETS驻留在磁盘。

 

表的类型有四个 分别是:set、ordered set、bag和duplicate bag

set系列两个 set是保证主键唯一 ordered set会根据主键排序(set就是插入顺序啦) 这里需要注意的是 insert操作如果遇到主键重复了 并不会报错 而是覆盖

bag系列 bag是主键可以重复但是元组要不同 duplicate bag就是可以多个重复的元组了。

 

基本操作1:

-module(ets_test).
-export([start/0]).

start() ->
 lists:foreach(fun create/1,[set,ordered_set,bag,duplicate_bag])
.

create(Mode) ->
  TableId=ets:new(test,[Mode]),
  ets:insert(TableId, {a,1}),
  ets:insert(TableId, {b,2}),
  ets:insert(TableId, {a,1}),
  ets:insert(TableId, {a,3}),
  List = ets:tab2list(TableId),
  io:format("~-13w  => ~p~n" , [Mode, List]),
  ets:delete(TableId).

 

结果如下:
70> c(ets_test).
{ok,ets_test}
71> ets_test:start().
set            => [{b,2},{a,3}]
ordered_set    => [{a,3},{b,2}]
bag            => [{b,2},{a,1},{a,3}]
duplicate_bag  => [{b,2},{a,1},{a,1},{a,3}]
ok

 set如果主键重复是覆盖很容易就可以看出来。(以上set中{a,1}已经被{a,3}覆盖了)

 

 

创建参数:

erlang程序设计 写道
调用ets:new可以创建ETS表。创建表的这个进程就是表的所有者。表创建之后,它的一系列属性设置不能再更改。如果所有者进程死掉,或者调用ets:delete时,就会自动释放表的内存空间。

ets:new的参数是下面这样的。

@spec ets:new(Name, [Opt]) -> TableId
Name是一个原子,[Opt]是一个选项列表,取值范围如下。

set | ordered_set | bag | duplicate_bag。

private。创建私有表,只有所有者进程可以读写这个表。

public。创建公开表,所有知道这个表标识的进程都可以对这个表进行读写操作。

protected。创建受保护的表,所有知道这个表标识的进程都可以对这个表进行读操作,但只有这个表的所有者进程可以对这个表进行写操作。

named_table。命名表,如果存在这个选项,则可以在后续操作中使用Name来操作表。

{keypos, K}。使用K作为键的位置,通常情况下使用的是第一个位置。可能只有一种情况才需要用到这个选项,那就是当我们需要存储Erlang的记录时(记录实际上是变相的元组),它的第一元素包含的是这个记录的名字(对每个记录来说,它的值都是一样的)。

说明 打开一个ETS表时不带任何选项,等同于使用了这样的默认选项[set,protected, {keypos,1}]。

 

书上的内容也就这么多了 关于如何查找 利用匹配删除什么的都没讲 有空做个示例吧 先写到这了。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics