On Aug 20, 2009, at 3:59 PM, Johannes Knopp wrote:

>
> Hi *,
> I am currently working on a Wikipedia API which means that we have a
> database for each language we want to use. The structure of each
> database is identical, they only differ in their language. The only
> place where this information is stored is in the name of the database.
>
> When starting with one language the straight forward approach to use a
> mapping between the tables to needed classes (e.g. Page) looked fine.
> We defined an engine and corresponding metadata. When we added a
> second
> database with its own setup for engine and metadata we ran into the
> following error:
>
> ------
> ArgumentError: Class '<class 'wp.orm.types.pages.Page'>' already has a
> primary mapper defined. Use non_primary=True to create a non primary
> Mapper.  clear_mappers() will remove *all* current mappers from all
> classes.
> ------
>
> I found an email saying that there must be at least one primary
> mapper,
> so using this option for all databases doesn't seem feasible. [1]

if you'd like distinct classes to indicate that they "belong" in a  
different database, and you have very clear lines as to how this is  
performed, use the "entity_name" concept described at 
http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName 
  .  this sounds very much like your use case.

> The next idea is to use sharding. For that we need a way to
> distinguish
> between the databases from the perspective of an instance, as noted in
> the docs [2]:
> "You need a function which can return a single shard id, given an
> instance to be saved; this is called "shard_chooser"

horizontal sharding is a method of storing many *homogeneous*  
instances across multiple databases, with the implication that you're  
creating one big "virtual" database among partitions - the main  
concept is that an individual instance gets placed in different  
partitions based on some ruleset.    This is a little like your use  
case as well but since you have a very simple delineation i think the  
"entity name" approach is easier.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to