erlangestテーブル

ETSはErlangTerm Storageの略で、大容量のデータストレージと効率的なクエリをサポートするメモリベースのKV(キー値)テーブルです。

ETSテーブルの基本:
1。ETSテーブルを使用して大量のerlangデータを効率的に保存でき、ETSは大きなKey-Valueルックアップテーブルを提供します
。2。ETSは非常に効率的です。大量のデータを保存するために使用できます。(十分なメモリがある限り)、最も一般的に使用されるテーブル操作は挿入とルックアップです
。3。ETSテーブルのデータはメモリに格納され、揮発性です。ETSテーブルが破棄されるか、それを制御するプロセスが終了すると、データは削除されます
。4。ETSテーブルは基盤となるランタイムシステムに実装されます。ETSテーブルにはガベージコレクションメカニズムがありません。ETSテーブルが巨大であっても、ごみはありませんが、リサイクルの負担はありますが、ETSオブジェクトの作成とアクセスにはまだ少しオーバーヘッドがあります。

1.新しいETSテーブルを作成します
ets:new(name、option)。name
:ETS table name
option:オプションのリスト
1)set | Ordered_set | bag | duplicate_bag指定されたタイプのテーブルを
作成します2)privateプライベートテーブルを作成します。スーパーバイザープロセスのみが読み取りと書き込みを行うことができます
3)publicはパブリックテーブルを作成し、プロセスはこのテーブルの識別子を知っている場合は読み取りと書き込みを行うことができます
4)protectedは保護されたテーブルを作成し、プロセスはこのテーブルの識別子を知っていますいつでも読み取ることができますが、スーパーバイザプロセスと既存の書き込み権限のみです
。5)named_tableこのオプションを設定すると、名前を後続のテーブル操作に使用できます
。6){keypos、K}キー位置としてKを使用します。このオプションを使用するには、Erlangレコードを保存し、レコードの最初の要素にレコード名が含まれます。


2.要素
ets:insert(Tab、ObjectOrObjects)-> true
追加して、オブジェクトデータまたはオブジェクトリストデータObjectOrObjectsをETSテーブルのタブに挿入します。
テーブルがセットタイプのテーブルであり、挿入されたオブジェクトデータのキーをテーブル内で照合してデータを取得できる場合、古いオブジェクトデータが置き換えられます。
テーブルがordered_setタイプのテーブルであり、テーブルに挿入されたオブジェクトデータと同じキーがある場合、古いオブジェクトデータが置き換えられます。
挿入されたオブジェクトリストデータに複数の同一キーがあり、そのテーブルがセットタイプのテーブルである場合、挿入できるオブジェクトデータは1つだけですが、どれがどれかはわかりません。
順序集合型テーブルの場合、キーが同じであれば、操作は上記と同じです。複数のオブジェクトデータが挿入されている場合でも、操作全体で原子性と独立性が維持されます。

3. estリストを返す
ets:tab2list(Tab)-> [Object]:ETSテーブル内のすべてのオブジェクトデータのリストを返します。

4.キーで値を取得します
ets:lookup(Tab、Key)-> [Object]:
キーがKeyであるテーブルTab内のすべてのオブジェクトデータのリストを返します。ここおよび他のフィールドの照合にはキーを使用する必要があることに注意してください。使用できません。
set、bag、duplicate_bagテーブルでは、キーKeyに一致するオブジェクトデータのみが返されます。
それがordered_setタイプのテーブルである場合、キーが等しい場合にのみ返されます。2つの違いは==と==のようなものです。
setまたはordered_setタイプのテーブルの場合、これらのタイプのテーブルに同じキーを持つ複数のオブジェクトデータを含めることはできないため、関数は空のリストまたは要素のリストを返します。
それがbagまたはduplicate_bagタイプのテーブルである場合、関数は任意の長さのリストを返します。
データ挿入の順序は保持され、最初に挿入されたデータも返されるときに最初にランク付けされます。
セット、bag、duplicate_bagテーブルでは、テーブルのサイズに関係なく、挿入時間と検索時間は一定です。Ordered_setタイプのテーブルの場合、挿入時間と検索時間はテーブルのサイズに比例します。

5. ets:i(Tab)-> 'ok':指定したETSテーブルのタブ情報を出力端末に出力して表示します
ets:i()-> 'ok':すべてのETSテーブルの情報を印刷して表示します出力端子

6. ets:delete_all_objects(Tab)-> true
は、テーブルTab内のすべてのオブジェクトデータを削除します。この操作により、データの原子性と分離が維持されます。

7.ErlangのETSはRecordとシームレスに組み合わせることができます

 

-record(account, {account_id, name, sex, email}).%%定义一个记录
shell命令窗口载入记录:rd(account, {account_id, name, sex, email}).
%% 创建账户表  |  以account的id作为记录对象的键.
account = ets:new(account, [named_table, set, {keypos, #account.account_id}]).
%% 模式匹配查询
ets:match_object(account, {'_', '_', '_',1, '_'}). %% 非record方式
ets:match_object(account, #account{sex = 1, _='_'}).   %% 使用RECORD,通用匹配部分为: _='_' %%
更新
ets:update_element(account, 1, {#account.name, "jason"}).  %% 更新一个值
ets:update_element(account, 1, [{#account.name, "jason"}, {#account.email, "[email protected]"}]).   %% 更新多个值
%% 插入 创建一个记录,然后把记录的项式插入到ets表中
AccountRecordA = #account{account_id = 1, name = "jason", sex = 1, email = "[email protected]"}.
AccountRecordB = #account{account_id = 2, name = "tlc", sex = 2, email = "[email protected]"}.
ets:insert(account, AccountRecordA).
ets:insert(account, AccountRecordB).

 

おすすめ

転載: blog.csdn.net/qq513036862/article/details/87184446