Automattic / HyperDB

HyperDB is an advanced database class that supports replication, failover, load balancing, and partitioning.
104 stars 22 forks source link
database wordpress

=== HyperDB === Contributors: matt, andy, ryan, mdawaffe, vnsavage, barry, westi, automattic, wpcomvip Tags: mysql, scaling, performance, availability, WordPress.com Requires at least: 4.2 Tested up to: 6.0.2 Stable tag: 1.9 License: GPLv2 or later

HyperDB is an advanced database class that supports replication, failover, load balancing, and partitioning.

== Description ==

HyperDB is a very advanced database class that replaces a few of the WordPress built-in database functions. The main differences are:

It supports:

It is based on the code currently used in production on WordPress.com with many MySQL servers spanning multiple datacenters.

== Installation ==

Nothing goes in the plugins directory.

  1. Enter a configuration in db-config.php.

  2. Deploy db-config.php in the directory that holds wp-config.php. This may be the WordPress root or one level above. It may also be anywhere else the web server can see it; in this case, define DB_CONFIG_FILE in wp-config.php.

  3. Deploy db.php to the /wp-content/ directory. Simply placing this file activates it. To deactivate it, move it from that location or move the config file.

Any value of WP_USE_MULTIPLE_DB will be ignored by HyperDB.

== Frequently Asked Questions ==

= What can I do with HyperDB that I can't do with WPDB? =

WordPress.com, the most complex HyperDB installation, manages millions of tables spanning thousands of databases. Dynamic configuration logic allows HyperDB to compute the location of tables by querying a central database. Custom scripts constantly balance database server resources by migrating tables and updating their locations in the central database.

Stretch your imagination. You could create a dynamic configuration using persistent caching to gather intelligence about the state of the network. The only constant is the name of the configuration file. The rest, as they say, is PHP.

= How does HyperDB support replication? =

HyperDB does not provide replication services. That is done by configuring MySQL servers for replication. HyperDB can then be configured to use these servers appropriately, e.g. by connecting to master servers to perform write queries.

= How does HyperDB support load balancing? =

HyperDB randomly selects database connections from priority groups that you configure. The most advantageous connections are tried first. Thus you can optimize your configuration for network topology, hardware capability, or any other scheme you invent.

= How does HyperDB support failover? =

Failover describes how HyperDB deals with connection failures. When HyperDB fails to connect to one database, it tries to connect to another database that holds the same data. If replication hasn't been set up, HyperDB tries reconnecting a few times before giving up.

= How does HyperDB support partitioning? =

HyperDB allows tables to be placed in arbitrary databases. It can use callbacks you write to compute the appropriate database for a given query. Thus you can partition your site's data according to your own scheme and configure HyperDB accordingly.

= Is there any advantage to using HyperDB with just one database server? =

None that has been measured. HyperDB does at least try again before giving up connecting, so it might help in cases where the web server is momentarily unable to connect to the database server.

One way HyperDB differs from WPDB is that HyperDB does not attempt to connect to a database until a query is made. Thus a site with sufficiently aggressive persistent caching could remain read-only accessible despite the database becoming unreachable.

= What if all database servers for a dataset go down? =

Since HyperDB attempts a connection only when a query is made, your WordPress installation will not kill the site with a database error, but will let the code decide what to do next on an unsuccessful query. If you want to do something different, like setting a custom error page or kill the site, you need to define the 'db_connection_error' callback in your db-config.php.

== Changelog == = 1.9 =

= 1.8 =

= 1.7 =

= 1.6 =

= 1.5 =

= 1.4 =

= 1.3 =

= 1.2 =

= 1.1 =

= 1.0 =