ETS (Erlang Term Storage) e un database chiave-valore in memoria integrato direttamente nel runtime Erlang/OTP (BEAM).
🔗 Correlato: Foglio di riferimento Linguaggio Elixir
Inizializzazione della tabella e operazioni di base
# Crea una nuova tabella con nome
table = :ets.new(:user_cache, [:set, :public, :named_table])
# Inserisce tuple nella tabella
:ets.insert(:user_cache, {:user_1, "Alice", 30})
:ets.insert(:user_cache, {:user_2, "Bob", 25})
# Cerca record per chiave
result = :ets.lookup(:user_cache, {:user_1})
# => [{:user_1, "Alice", 30}]
# Elimina un record o svuota la tabella
:ets.delete(:user_cache, :user_1)
:ets.delete_all_objects(:user_cache)
# Distrugge completamente la tabella
:ets.delete(:user_cache)
Tipi di tabella (Table Types)
Configura la semantica della tabella tramite le opzioni di creazione:
| Type | Duplicate Keys | Ordering | Notes |
|---|---|---|---|
:set |
No | Unordered | Tipo predefinito; la chiave e il primo elemento; non ordinato |
:ordered_set |
No | Ordered | Chiavi ordinate secondo l'ordinamento Erlang; ricerca O(log N) |
:bag |
Yes | Unordered | Consente chiavi duplicate, ma non tuple esattamente identiche |
:duplicate_bag |
Yes | Unordered | Consente tuple esattamente identiche |
Controlli di accesso (Access Controls)
:protected: Tutti i processi possono leggere; solo il proprietario puo scrivere (Predefinito).:public: Qualsiasi processo puo leggere e scrivere simultaneamente.:private: Solo il processo proprietario puo leggere e scrivere.
Attraversamento su :ordered_set (Traversal)
# Funzioni di navigazione tra le chiavi
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)