CockroachDB es un sistema de base de datos SQL distribuido, transaccional, relacional y nativo de la nube.
El objetivo de CockroachDB es aprovecha tanto los puntos fuertes de la generación anterior de sistemas de bases de datos relacionales como la consistencia, SQL y el modelo de datos relacional como los puntos fuertes de los principios modernos de la nube distribuida.
De esta forma CockroachDB es una base de datos compatible con otras bases de datos transaccionales basadas en SQL (Postgresql), pero que ofrece una escalabilidad y disponibilidad mucho mayores.
Origen de CockroachDB
Con Spanner, Google demostró de forma convincente la utilidad de una base de datos distribuida y consistente. Sin embargo, Spanner está vinculada a la plataforma de Google Cloud.
El proyecto Spanner se inició como un intento de construir una base de datos distribuida, similar al sistema BigTable de Google, que pudiera soportar tanto la consistencia estricta como la alta disponibilidad. Spanner se benefició de la red redundante de Google, que redujo la probabilidad de problemas de disponibilidad basados en la red, pero la característica realmente novedosa de Spanner fue su sistema TrueTime. Las bases de datos distribuidas se esfuerzan por devolver información coherente de las réplicas mantenidas en todo el sistema. Los bloqueos son el principal mecanismo para evitar que se cree información inconsistente en la base de datos, mientras que las instantáneas son el principal mecanismo para devolver información consistente.
Google Spanner simplifica el mecanismo de instantáneas utilizando receptores GPS y relojes atómicos instalados en cada centro de datos. El GPS proporciona una marca de tiempo validada externamente, mientras que el reloj atómico proporciona una hora de alta resolución entre las "fijaciones" del GPS. El resultado es que todos los servidores de Spanner en el mundo tienen una hora muy cercana a la del reloj. Esto permite que Spanner ordene las transacciones y las consultas de forma precisa sin requerir una excesiva comunicación entre nodos.
*** Translated with www.DeepL.com/Translator (free version) ***
Había una necesidad evidente de que las tecnologías promovidas por Spanner estuvieran más disponibles. En 2015, un trío de exalumnos de Google -Spencer Kimball, Peter Mattis y Ben Darnell- fundó Cockroach Labs con la intención de crear una base de datos de código abierto, geoescalable y ACID. Spencer, Peter y Ben eligieron el nombre "CockroachDB" en honor a la humilde cucaracha que, según cuentan, es tan resistente que sobreviviría incluso a una guerra nuclear
Objetivos de diseño de CockroachDB
CockroachDB fue diseñado para soportar:
- Escalabilidad: la arquitectura distribuida de CockroachDB permite que un clúster escale sin problemas a medida que la carga de trabajo aumenta o disminuye. Se pueden añadir nodos a un clúster sin necesidad de un reequilibrio manual, y el rendimiento se escalará de forma predecible a medida que aumente el número de nodos.
- Alta disponibilidad: Un clúster de CockroachDB no tiene ningún punto de fallo. CockroachDB puede seguir funcionando si un nodo, zona o región sin comprometer la disponibilidad.
- Consistencia: CockroachDB proporciona el mayor nivel práctico de aislamiento y consistencia transaccional. Las transacciones operan independientemente unas de otras y, una vez consignadas, se garantiza que sean duraderas y visibles para todas las sesiones.
- Rendimiento: La arquitectura de CockroachDB está diseñada para soportar cargas de trabajo transaccionales de baja latencia y alto rendimiento. Se ha hecho todo lo posible para adoptar las mejores prácticas de la base de datos en lo que respecta a la indexación, el almacenamiento en caché y otras estrategias de optimización de la base de datos.
- Geo-partición: CockroachDB permite ubicar físicamente los datos en localidades específicas para mejorar el rendimiento de las aplicaciones "localizadas" y respetar los requisitos de soberanía de datos.
- Compatibilidad: CockroachDB implementa el SQL estándar ANSI y es compatible con el protocolo de PostgreSQL. Esto significa que la gran mayoría de los conectoresde bases de datos y frameworks que funcionan con PostgreSQL también funcionarán con CockroachDB. Muchas aplicaciones PostgreSQL pueden ser portadas a CockroachDB sin requerir cambios significativos de codificación.
- Portabilidad: CockroachDB se ofrece como un servicio de base de datos totalmente gestionado, que en muchos casos es el modo de implementación más fácil y rentable. Pero también es capaz de funcionar en prácticamente cualquier plataforma que pueda imaginar, desde el portátil de un desarrollador hasta un despliegue masivo en la nube. En particular, la arquitectura de CockroachDB está muy bien alineada con las opciones de despliegue en contenedores, y en particular con Kubernetes. CockroachDB proporciona un operador de Kubernetes que elimina gran parte de la complejidad que implica un despliegue de Kubernetes. .
Algunas consideraciones
Dicho lo anterior podríamos pensar que CockroachDB puede hacer de todo!". Sin embargo, CockroachDB no pretende ser todo para todos:
- CockroachDB prioriza la consistencia sobre la disponibilidad. El teorema CAP establece que hay que elegir entre la consistencia o la disponibilidad cuando se enfrenta a una partición de la red. A diferencia de las bases de datos "eventualmente" consistentes como DynamoDB o Cassandra, CockroachDB garantiza la consistencia a toda costa. Esto significa que hay circunstancias en las que un nodo de CockroachDB se negará a atender las solicitudes si está aislado de sus compañeros. Un nodo Cassandra, en circunstancias similares, podría aceptar una solicitud incluso si existe la posibilidad de que los datos de la solicitud tengan que ser descartados posteriormente.
- La arquitectura de CockroachDB da prioridad a las cargas de trabajo transaccionales. CockroachDB incluye las construcciones SQL para emitir agregaciones y las funciones analíticas "Windowing" de SQL 2003, y CockroachDB es ciertamente capaz de integrarse con herramientas populares de Business Intelligence como Tableau. No hay ninguna razón específica por la que CockroachDB no pueda utilizarse para aplicaciones analíticas, sin embargo, las características únicas de CockroachDB están más orientadas a las cargas de trabajo transaccionales. Para las cargas de trabajo exclusivamente analíticas que no requieren transacciones, otras plataformas de bases de datos podrían ofrecer un mejor rendimiento.
Comparando CockroachDB, Postgresql y MongoDB
En la propia web de CockroachDB aparece esta comparativa:
CockroachDB in Comparison | CockroachDB Docs (cockroachlabs.com)
Podéis seguir leyendo sobre esta interesante base de datos en su Portal de Documentación: CockroachDB Docs | CockroachDB Docs (cockroachlabs.com)
Un abrazo,
LuisMi Gracia