Database / Mnesia intermediate to advanced Interview questions
What is the difference between mnesia:transaction/1 and mnesia:sync_transaction/1?
Both give the same atomicity and locking guarantees, but they differ in when they return control to the
caller relative to replication. mnesia:transaction/1 can return as soon as the commit is decided
locally, while replication to other nodes finishes asynchronously in the background.
mnesia:sync_transaction/1 waits until the commit has actually been acknowledged by every involved
replica before returning.
mnesia:sync_transaction(fun() -> mnesia:write(#session{id = 1, user = "ada"}) end).
The practical difference shows up under load: with plain transaction/1, a caller could get
{atomic, ok} back and, in theory, briefly race ahead of replication actually landing everywhere.
sync_transaction/1 removes that gap at the cost of waiting longer per call, which matters when a
caller needs a hard guarantee that a subsequent read from any node in the cluster will already see the write
it just made.
More Related questions...