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

Peter K Chan peter@REDACTED
Tue Nov 6 17:20:18 CET 2007

That's a good question. I wonder about the same thing myself. Here are
some of my immature thoughts at the moment:

- You may not have to use entity-relation; store the entity data
directly in each table.
- Use a local ID generator that generates {node(), ID}
- I am not sure about your first two methods of using the table's size
or ordering for ID generation. What happens if you remove a record?


-----Original Message-----
From: erlang-questions-bounces@REDACTED
[mailto:erlang-questions-bounces@REDACTED] On Behalf Of Dmitri Girenko
Sent: Tuesday, November 06, 2007 8:58 AM
To: erlang-questions@REDACTED
Subject: [erlang-questions] how: mnesia: id/generator in a cluster

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

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
erlang-questions mailing list

More information about the erlang-questions mailing list