2016年9月30日金曜日

ErlangのETS (Erlang Term Storage)とは?

ErlangETS (Erlang Term Storage)とは? ということで、何もわからなかったので、調べるだけ、調べてみました。いや~、Erlang、奥が深いです。己の無知を痛感せずにはいられません。精進するべし。

このモジュールは、Erlangの長期保存データ用の組み込み関数インタフェースです。 Erlangのランタイムシステム内で、データを大量に保存する機能を提供し、データへのアクセスが可能です。 (「ordered_set」の場合、アクセスは保存されたオブジェクトの数の対数に比例します。)

データは、タプルを格納できる動的テーブルのセットとして構成されています。 各テーブルは、プロセスによって作成されます。 プロセスが終了すると、テーブルは自動的に破棄されます。 各テーブルは、作成時に設定されたアクセス権を持っています。

テーブルは4つの異なるタイプ、「set」、「ordered_set」、「bag」、および「duplicate_bag」に分かれています。 「set」と「ordered_set」テーブルは、各キーに関連付けられた一つのオブジェクトを持つことができます。 「bag」とや「duplicate_bag」テーブルは、各キーに関連付けられている多くのオブジェクトを持つことができます。

1つのErlangノードに格納されるテーブルの数は限られています。 現在のデフォルト制限値は、約1,400テーブルです。 上限は、Erlangのランタイムシステムを起動する前に、環境変数「ERL_MAX_ETS_TABLES」を変更することによって増加させることができます。 実際の制限値は、指定された値よわずかに多いですが、決して制限値を下回ることはありません。

このテーブルには、自動ガベージコレクションが存在しないことに注意してください。 任意のプロセスからテーブルへの参照がない場合でも、オーナープロセスが終了しない限り、データは自動的に破棄されません。 明示的にテーブルを破棄するためには、「delete/1」関数を利用します。 デフォルトのデータ所有者は、テーブルを作成したプロセスです。 プロセスの終了時にテーブルの所有権を譲渡するには、オプション「heir」を使用するか、「give_away/3」を呼び出します。



参考サイト
Erlang Term Storage (ETS) (Elixir School)

0 件のコメント:

コメントを投稿