[Chicago] auto incrementing - what options do we have?

David Durham, Jr. david.durham.jr at gmail.com
Fri Oct 10 19:23:11 CEST 2008


On 10/10/08, Lukasz Szybalski <szybalski at gmail.com> wrote:
> On Fri, Oct 10, 2008 at 11:43 AM, David Durham, Jr.
>  <david.durham.jr at gmail.com> wrote:
>  > On 10/10/08, Kumar McMillan <kumar.mcmillan at gmail.com> wrote:
>  >>  Actually, you might have to explicitly declare table level locks as
>  >>  opposed to row level locks.  Most dbs support LOCK TABLES, i.e. for
>  >>  myql : http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html which
>  >>  is what you want in this case.
>  >
>  > Right, but locking is not the only way to ensure transaction
>  > integrity.  It's better to stick with simply setting transaction
>  > isolation to what you need and letting the db deal with whether or not
>  > it will use locking or something like MVCC.
>
>
> So what would be the transaction isolation in this case? Is that
>  session option or do I change it only on first insert?

I think you want repeatable read or read serializable.  Here's a
Google feeling lucky for read serializable:

http://www.devx.com/getHelpOn/10MinuteSolution/16488/1954

With that said, you may find that dealing with id concurrency issues
within your database doesn't match your use-case, which would most
likely be high-volume distributed stuff (so far as I know).  In such
cases, it's perfectly reasonable to generate your own universally
unique id's and there are known algorithms for doing so (I think they
often rely on a mac address and timestamp to seed the algorithm).
UUIDs are not, in my experience, auto-incremented values, but if you
absolutely need auto-incremented values in a distributed high-volume
app then you or someone you know is probably just being weird :).

HTH,
Dave


More information about the Chicago mailing list