[ノート]erlang etsノート

2343 ワード

ええと、電子書籍は買ってからerlangプログラムの設計を買いました.
etsとdetsの部分を見てメモを取る権利があります....
 
Erlangプログラム設計は
ETSとDETSは基本的に同じことをしています.大きな「キー値」検索テーブルを提供しています.異なる点は、ETSがメモリに存在し、DETSがディスクに存在することです.
 
テーブルのタイプは、set、ordered set、bag、duplicate bagの4つです.
setシリーズの2つの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のレコードを格納する必要がある場合(レコードは実際には変相のメタグループ)、その第1の要素にはこのレコードの名前(レコードごとに値が同じ)が含まれている場合だけです.
説明ETSテーブルを開くときにオプションを持たないのは、このようなデフォルトオプション[set,protected,{keypos,1}]を使用したのと同じです.
 
本の内容もこれだけですが、マッチングで削除する方法については例を挙げる暇はありません.まずここまで書きます.