= Multiple Database Support = ''See PreviousMultipleDatabaseBranch for information on a previous attempt at adding this.'' The most recent discussion about multi-db support can be seen on this thread: http://groups.google.com/group/django-developers/browse_thread/thread/9f0353fe0682b73 == Requirements == An ideal solution would address all of the following: * '''Different models/applications living on different databases''', for example a 'blog' application on db1 and a forum application on db2. This should include the ability to assign a different database to an existing application without modifying it, e.g. telling Django where to keep the django.contrib.auth.User table. * '''Master-slave replication''', where writes go to a single master while reads are spread across one or more slaves. Due to replication lag it may sometimes be necessary for reads that directly follow a related write to be directed to the master. * '''Talking to existing or legacy databases''' while still allowing newer functionality to be developed on a different database dedicated solely to Django. * '''Sharding''', where rows within a single model are spread across multiple databases for improved write performance. == Problems to solve == * '''Connection definitions''' - how are multiple database connections defined? Does this new method replace Django's existing DATABASE_* family of settings? * '''Connection selection''' - what is the API for telling Django which database a query should be executed against? * '''Associating connections with models''' - for the common case where a model is assigned to a different database, how is that assignment made? How can existing apps such as contrib.auth be assigned to a different database in a clean way? This is one facet of the connection selection problem. * '''Related managers''' - how do we deal with the case when the User model lives on one database but its related BlogEntrys live on a different database? * '''Joins across different databases''' - do we try to get these working? If not, how do we detect them and what kind of error or warning do we present?