[erlang-questions] how: mnesia: id/generator in a cluster
Dmitri Girenko
Dmitri.Girenko@REDACTED
Tue Nov 6 15:57:36 CET 2007
Hi all,
Having come from J2EE world I find it very difficult to get rid of all
the patterns that I'm used to. There is one that can be named ID
generator.
I have a set of unique objects that have to be stored in the DB
(mnesia). I have to generate short unique numeric ID for those items. In
my previous life usually a DB procedure/generators were used to ensure
ID uniqueness in a cluster environment. But how can I achieve this
functionality in OTP?
Here are a few ideas that come to my mind:
1. use ordered_set and select last.id + 1.
Adds 1 extra select per insert.
2. use table size + 1.
1 extra query, but maybe it's optimized enough?
Both these have runtime overhead + race conditions.
3. create a separate singleton process that initializes counter to
table_size + 1 and dispatches the "next values".
OMG. Singleton in a cluster. Maybe application with failover is
better? But why waste a whole application on just sequence generator.
4. Use phash(Item).
but how to handle collisions then?
Any recommendations?
Best regards,
Dmitri Girenko
More information about the erlang-questions
mailing list