[development] Why do we avoid auto-incrementing db columns?

Sammy Spets sammys-drupal at synerger.com
Mon Apr 30 07:20:25 UTC 2007


And to clarify, what i've been explaining above is different to what is
explained in this post. This post is about modifing db_next_id() to stop
using the sequences table for MySQL. My post was about PostgreSQL.

The use of db_next_id() or db_insert_id() can't be removed for obvious 
reasons. The implementation can be changed.

Thanks Dries for bringing up these posts.

-- 
Sammy Spets
Synerger Pty Ltd
http://synerger.com

On 26-Apr-07 07:53, Dries Buytaert wrote:
> 
> On 25 Apr 2007, at 18:53, Sammy Spets wrote:
> >Sure there are two different use cases for insertions: those where you
> >need the ID afterwards (e.g node) and those you don't (e.g watchdog).
> >If you want to write code without the use of db_next_id() then do an
> >INSERT and omit the id column. I don't see anyone wanting to spend
> >effort patching Drupal core to gain 0.01% efficiency across the
> >application.
> 
> Overall, I think it would be good if we could get rid of db_next_id 
> ().  Related patches:
> 
>  + http://drupal.org/node/49836
>  + http://drupal.org/node/118066
> 
> * Drupal's db_next_id() was introduced in 2002 by Marco Molinari, who  
> used to be a top-contributor.  Parts of the relevant discussion can  
> be found at:
> 
>   http://lists.drupal.org/archives/development/2002-08/msg00222.html
>   http://lists.drupal.org/archives/development/2002-09/msg00185.html
> 
> We introduced it because it was hard to reproduce the (correct) last  
> ID on non MySQL databases -- we felt this was a more portable way to  
> get the last ID.  As this has been a while, the original motivation  
> might no longer be relevant, or it might have been incorrect all the  
> way.  We had less database expertise/experts than we have now, and  
> lack of experience probably made db_next_id() feel like a portable  
> and safe choice ...
> 
> * I don't think it has been mentioned already but the fact we do not  
> use auto_increment make it difficult/impossible to setup Drupal in a  
> master-master configuration.  MySQL 5 introdeced a  
> "auto_increment_increment" and "auto_increment_offset" which can't be  
> used until we get rid of db_next_id().  See http://dev.mysql.com/doc/ 
> refman/5.0/en/replication-auto-increment.html.
> 
> * The table lock in db_next_id() has been shown to be a problem in  
> certain setups.
> 
> * table locking, as used in db_next_id(), is not always supported by  
> cheap webhosts.
> 
> * http://drupal.org/node/49836#comment-74275 suggests that most/all  
> database support something like auto_increment.
> 
> That's 5 reasons why we could remove db_next_id() ... ;-)
> 
> 
> --
> Dries Buytaert  ::  http://www.buytaert.net/
> 


More information about the development mailing list