Una base de datos SQL distribuida es una única base de datos relacional que replica datos en varios servidores. Las bases de datos SQL distribuidas son muy consistentes y la mayoría admite la coherencia entre bastidores, centros de datos y redes de área amplia , incluidas las zonas de disponibilidad de la nube y las zonas geográficas de la nube. Las bases de datos SQL distribuidas suelen utilizar los algoritmos Paxos o Raft para lograr el consenso entre varios nodos.
A veces, las bases de datos SQL distribuidas se denominan NewSQL , pero NewSQL es un término más inclusivo que incluye bases de datos que no son bases de datos distribuidas .
Spanner de Google popularizó el concepto moderno de base de datos SQL distribuida. Google describió la base de datos y su arquitectura en un informe técnico de 2012 llamado "Spanner: la base de datos distribuida globalmente de Google". El informe describía que Spanner había evolucionado desde un almacén de valores clave similar a una gran tabla a una base de datos temporal de múltiples versiones donde los datos se almacenan en "tablas semirrelacionales esquematizadas". [1]
Spanner utiliza relojes atómicos con el algoritmo Paxos para lograr un consenso con respecto al estado distribuido entre servidores. En 2010, y en una implementación anterior, ClustrixDB (ahora MariaDB Xpand) pasó de ser un dispositivo de hardware a una base de datos de software basada en Paxos [2] y luego fue adquirida por MariaDB [3] y agregada a una oferta de nube SaaS llamada SkySQL . [4] En 2015, dos ingenieros de Google dejaron la empresa para crear Cockroach DB , que logra resultados similares utilizando el algoritmo Raft sin relojes atómicos ni hardware personalizado. [5]
Spanner se utiliza principalmente para casos de uso transaccionales y de series temporales. Sin embargo, Google profundizó esta investigación con un artículo de seguimiento sobre Google F1, que describe como una base de datos de procesamiento transaccional/analítico híbrida construida sobre Spanner. [1]
Las bases de datos SQL distribuidas tienen las siguientes características generales:
De acuerdo con el teorema CAP , las bases de datos SQL distribuidas son "CP" o consistentes y tolerantes a particiones. Algorítmicamente, sacrifican la disponibilidad, ya que una falla de un nodo principal puede hacer que la base de datos no esté disponible para escrituras.
Todas las implementaciones de SQL distribuido requieren algún tipo de sincronización temporal para garantizar la coherencia. Con la excepción de Spanner, la mayoría no utiliza hardware personalizado para proporcionar relojes atómicos. Spanner puede sincronizar escrituras con garantías temporales. Las implementaciones sin hardware personalizado requieren que los servidores comparen los desfases de reloj y, potencialmente, vuelvan a intentar las lecturas. [8]
CockroachDB, YugabyteDB y otras se han referido a sí mismas como bases de datos NewSQL . Algunas de las bases de datos NewSQL, como Citus y Vitess, tienen arquitecturas fundamentalmente diferentes, pero Matthew Aslett, que acuñó el término, las citó como ejemplos de NewSQL. [11] En esencia, las bases de datos SQL distribuidas se construyen desde cero y las bases de datos NewSQL incluyen tecnologías de replicación y fragmentación agregadas a bases de datos relacionales cliente-servidor existentes, como PostgreSQL . [12] Algunos expertos definen las bases de datos DistributedSQL como un subconjunto más específico de las bases de datos NewSQL. [13]