Page MenuHomePhabricator

Completely de-couple the DB name
Open, MediumPublic


This is related to T28994 (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.



Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 11:16 PM
bzimport added a project: Wikimedia-Rdbms.
bzimport set Reference to bz27002.
bzimport added a subscriber: Unknown Object (MLST).

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 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 ("")

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 ('') 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: