Erlang / Erlang Basics Interview questions
When should you use ETS instead of process state?
Keeping data inside a single process's state works fine when only that process needs it, or when access is naturally serialized through that process's mailbox. ETS becomes the better fit once many processes need concurrent read/write access to the same data, because going through one process's mailbox would turn it into a bottleneck that every reader has to queue behind.
Typical ETS use cases: a shared cache read by hundreds of request-handling processes, a session table, or a routing table that changes occasionally but is read constantly. Process state is the better fit when the data is truly private to one actor's logic, or when you want writes serialized one-at-a-time as a deliberate correctness guarantee (e.g. a bank account balance).
The tradeoff: ETS reads/writes bypass message-passing isolation, so multiple processes can race on the same
key unless you design your access pattern (or use ets:update_counter/3 style atomic ops)
carefully.
More Related questions...