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

Ladislav Lenart lenartlad@REDACTED
Tue Nov 6 17:55:33 CET 2007

Dmitri Girenko wrote:
> 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?


See mnesia:dirty_update_counter/3 and mnesia:dirty_read/2.
They might be exactly what you are looking for.

Hope this helps,

Ladislav Lenart

More information about the erlang-questions mailing list