[ノート]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:
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}]を使用したのと同じです.
本の内容もこれだけですが、マッチングで削除する方法については例を挙げる暇はありません.まずここまで書きます.
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}]を使用したのと同じです.
本の内容もこれだけですが、マッチングで削除する方法については例を挙げる暇はありません.まずここまで書きます.