ETS (Erlang Term Storage) e um banco de dados chave-valor em memoria embutido no runtime Erlang/OTP (BEAM).
🔗 Relacionado: Folha de dicas da Linguagem Elixir
Inicialização de tabela e operações básicas
# Cria uma nova tabela nomeada
table = :ets.new(:user_cache, [:set, :public, :named_table])
# Insere tuplas na tabela
:ets.insert(:user_cache, {:user_1, "Alice", 30})
:ets.insert(:user_cache, {:user_2, "Bob", 25})
# Busca registros por chave
result = :ets.lookup(:user_cache, {:user_1})
# => [{:user_1, "Alice", 30}]
# Exclui um registro ou limpa a tabela
:ets.delete(:user_cache, :user_1)
:ets.delete_all_objects(:user_cache)
# Destroi a tabela completamente
:ets.delete(:user_cache)
Tipos de tabela (Table Types)
Configura a semantica da tabela nas opcoes de criacao:
| Type | Duplicate Keys | Ordering | Notes |
|---|---|---|---|
:set |
No | Unordered | Tipo padrao; a chave e o primeiro elemento; nao ordenado |
:ordered_set |
No | Ordered | Chaves ordenadas na ordem de termos do Erlang; busca O(log N) |
:bag |
Yes | Unordered | Permite multiplas chaves identicas, proibe tuplas identicas |
:duplicate_bag |
Yes | Unordered | Permite tuplas totalmente identicas |
Controles de acesso (Access Controls)
:protected: Todos os processos podem ler; apenas o proprietario pode escrever (Padrao).:public: Qualquer processo pode ler e escrever simultaneamente.:private: Apenas o processo proprietario pode ler e escrever.
Navegação em tabelas :ordered_set (Traversal)
# Funcoes de navegacao entre chaves
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)