Database / Mnesia intermediate to advanced Interview questions
When would you use mnesia:read_lock_table/1 instead of relying on per-record locks?
Table-level locking makes sense specifically when an operation needs a consistent view of, or exclusive access to, the entire table at once — something per-record locks can't provide, since they only protect individual rows from concurrent modification while leaving the rest of the table open.
mnesia:transaction(fun() -> mnesia:read_lock_table(person), %% now guaranteed no concurrent writer can modify ANY record %% in this table until this transaction finishes Total = length(mnesia:all_keys(person)) end).
Good candidates: a bulk migration or schema transformation that needs the whole table to hold still while it works, or a consistency check/report that must see a single, unchanging snapshot across every record rather than potentially observing some records mid-update by other concurrent transactions. It's a deliberate, heavier-weight tool — using it routinely for ordinary operations would erase most of the concurrency benefit Mnesia's per-record locking otherwise provides.
More Related questions...