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)