クイックリファレンス

Erlang ETS (Erlang Term Storage) チートシート

ElixirおよびErlangにおけるインメモリKVS Erlang ETSのクイックリファレンス:テーブル初期化、アクセス制御、テーブル種別(set/ordered_set/bag)、走査。

· 公開日

ETS(Erlang Term Storage)は、Erlang/OTPランタイム(BEAM)にネイティブ統合された高速なインメモリキーバリューストアであり、Elixirからも直接利用できます。

🔗 関連ドキュメント: Elixir 言語基本チートシート

テーブル初期化と基本操作

# 新しい名前付きテーブルを作成
table = :ets.new(:user_cache, [:set, :public, :named_table])

# タプルをテーブルに挿入
:ets.insert(:user_cache, {:user_1, "Alice", 30})
:ets.insert(:user_cache, {:user_2, "Bob", 25})

# キーによるレコード検索
result = :ets.lookup(:user_cache, {:user_1})
# => [{:user_1, "Alice", 30}]

# 特定レコードの削除またはテーブル内オブジェクトの全削除
:ets.delete(:user_cache, :user_1)
:ets.delete_all_objects(:user_cache)

# テーブルを完全に破棄
:ets.delete(:user_cache)

テーブルの種類(Table Types)

作成オプションでテーブルの動作セマンティクスを指定:

Type Duplicate Keys Ordering Notes
:set No Unordered デフォルトのテーブル型。第1要素がキー。順序なし
:ordered_set No Ordered Erlang項の順序でキーがソートされる。O(log N) の検索性能
:bag Yes Unordered 同一キーの重複を許可するが、完全に同一のタプルは除外
:duplicate_bag Yes Unordered 完全に同一のタプルの重複格納を許可

アクセス制御(Access Controls)

  • :protected: すべてのプロセスが読み取り可能。書き込みは所有プロセスのみ(デフォルト)。
  • :public: すべてのプロセスが並行して読み取り・書き込み可能。
  • :private: 所有プロセスのみが読み取り・書き込み可能。

:ordered_set での走査(Traversal)

# キーの順次ナビゲーション関数
first_key = :ets.first(:user_cache)
next_key  = :ets.next(:user_cache, first_key)
prev_key  = :ets.prev(:user_cache, next_key)
last_key  = :ets.last(:user_cache)

関連テーマ