Last modified: 2013-09-25 14:38:15 UTC
This is related to bug#26994 where Brion says: > If the mapping of '''site key name''' <-> '''database name''' can be > abstracted, this at least some of that may become easier.
For comparison, here's how we do it in StatusNet: * Each site has a 'nickname' used as an internal identifier, which never changes. This is used in multi-site data structures such as job queues. * Local configuration, or a 'status_network' table for multi-site farms, can provide additional mapping between nickname, database hostname & database name, and domain name or URL path * domain names or URL paths are used as the primary user- and admin-visible identifier for choosing which site to work with (via vhost on web or -sidenti.ca parameter on command-line scripts) So to handle the Wikimedia-style cases, a central site mapping table might list for each row at *minimum*: * database name ("enwiki") * site family ("wiki"/"wikipedia") * language/section subkey ("en") * hostname ("en.wikipedia.org") If we're actually using a mapping table instead of trying to manually break apart or build up from prefix/suffixes all the time, that might actually be plenty. That would allow continuing to use the dbname as an internal key, while allowing language codes or domains to be altered. However, in places where we expose db names (such as cross-wiki user management), we should consider displaying and selecting from canonical hostnames ('en.wikipedia.org') or language+family ('en.wikipedia') as a UI-friendly form, so that things that look like they don't match are no longer an issue.
This sounds a lot like Toolserver's wiki database. Which is one of the reasons cross-wiki tools are relatively easy to make there. A wikified dump of that MySQL table can be seen here: https://wiki.toolserver.org/view/Wiki_server_assignments