[erlang-questions] how: mnesia: id/generator in a cluster

Dmitri Girenko <>
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