Краткий справочник

Шпаргалка по Erlang ETS (Erlang Term Storage)

Справочное руководство по Erlang ETS в Elixir и Erlang: инициализация таблиц, контроль доступа, типы таблиц (set/ordered_set/bag) и поиск.

· Опубликовано

ETS (Erlang Term Storage) — встроенная в среду исполнения Erlang/OTP (BEAM) быстрая база данных ключ-значение в оперативной памяти.

🔗 Связанные руководства: Шпаргалка по языку 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 Тип по умолчанию; ключ — первый элемент; неупорядоченная
: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)

Связанные темы