[erlang-questions] mnesia:dirty_update_counter and replicated tables
Serge Aleynikov
serge@REDACTED
Thu Sep 21 17:41:21 CEST 2006
Scott,
The answer is regretfully no. Let's consider an example to illustrate
this point. You have two nodes A and B both running mnesia with a
replicated table.
1. The content of a counter is 1.
2. Node A does a mnesia:dirty_update_counter call to increment the value
of the counter by 2.
3. Very closely in time node B does mnesia:dirty_update_counter call to
increment the counter by 3.
After this the value of that field could be either one of:
a) 3.
b) 4.
c) 6.
No guarantees can be made as to which value the counter would hold
without having cross-node locking involved by using transactions.
Depending on the application you could use transactions to update data
and dirty operations for read-only purposes.
Regards,
Serge
Scott Lystig Fritchie wrote:
> There hasn't been any discussion of mnesia:dirty_update_counter here
> in quite a while.
>
> Looking through my archive, I didn't find a definite answer. Is
> mnesia:dirty_update_counter safe to use when the underlying 'set'
> table is replicated? If I use mnesia:dirty_update_counter on the same
> counter on two different Mnesia nodes, would I ever be unpleasantly
> surprised?
>
> The flow seems to go through the transaction manager, which bodes well
> for multi-node safety? Umrfl, it's too late to be reading Mnesia
> code. It will be a good learning exercise to continue my reading, but
> in the meantime ... is there a quick'ish answer from a kind soul?
>
> Or will a tormenting soul tell me to use tracing and the 'dbg' module
> to trace the path for myself? :-)
>
> -Scott
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
--
Serge Aleynikov
R&D Telecom, MIS, IDT Corp
Tel: +1 (973) 438-3436
Fax: +1 (973) 438-1464
More information about the erlang-questions
mailing list