Database / Mnesia intermediate to advanced Interview questions
Why is batching multiple related writes into a single transaction usually better than many small transactions?
Every transaction carries fixed overhead beyond the actual work it does: acquiring locks, and for replicated tables, coordinating a two-phase commit round-trip with every replica. Running ten related writes as ten separate transactions pays that coordination overhead ten times over; wrapping them in one transaction pays it once, for all ten writes together.
%% worse: 10 separate round-trips of coordination overhead [mnesia:transaction(fun() -> mnesia:write(R) end) || R <- Records]. %% better: one transaction, one round-trip of overhead, for all writes mnesia:transaction(fun() -> [mnesia:write(R) || R <- Records] end).
Batching also means the writes are genuinely atomic together — if you actually need all ten to succeed or fail as a unit, separate transactions can't give you that guarantee at all, on top of the performance cost of the repeated coordination overhead.
More Related questions...