NewSQL
# NewSQL

NewSQL es una clase de sistemas modernos de gestión de bases de datos relacionales que tratan de conseguir el mismo rendimiento escalable de sistemas NoSQL para el procesamiento de transacciones en línea (lectura-escritura), manteniendo durante las cargas de trabajo las garantías ACID de un sistema de base de datos tradicional.

## Historia

El término fue utilizado por primera vez por el analista Matthew Aslett de 451 Group en un trabajo de investigación en 2011, discutiendo la aparición de nuevos sistemas de base de datos como aspirantes a los vendors establecidos. Muchos sistemas empresariales que manejan datos de alto perfil (por ejemplo, financieras) también debían ser capaces de escalar, pero no son capaces de utilizar las soluciones NoSQL porque no pueden renunciar a los altos requerimientos transaccionales y de consistencia.

Las únicas opciones disponibles anteriormente para estas organizaciones eran adquirir una máquina de un solo nodo más potente o desarrollar middleware personalizado para distribuir las consultas por más nodos DBMS tradicionales. Ambos enfoques resultan excesivamente caros para la mayoría, y por ello, en este trabajo, Aslett analiza las posibilidades de NewSQL para competir con otros proveedores comerciales, y en particular con Oracle.

## Sistemas

Aunque los sistemas de NewSQL varían mucho en sus arquitecturas internas, sus dos señas de identidad comunes son el apoyo al modelo de datos relacionales y el uso de SQL como su interfaz principal. Uno de los sistemas NewSQL más conocidos es el H-Store.

Los sistemas NewSQL pueden ser agrupados en tres categorías:

### Nuevas arquitecturas

El primer tipo de sistemas NewSQL son plataformas de bases de datos completamente nuevas. Están diseñadas para funcionar en un clúster distribuido shared-nothing, en el que cada nodo posee un subconjunto de los datos. Aunque en muchas de las nuevas bases de datos se han usado diferentes enfoques de diseño, hay dos categorías principales en evolución.

El primer tipo envía la ejecución de transacciones y consultas a los nodos que contienen los datos necesarios. Las consultas SQL se dividen en fragmentos y se envían a los nodos, que son los que procesan y contienen los datos. Estas bases de datos son capaces de escalar linealmente a medida que se agregan nodos adicionales.

* Bases de datos de uso general: Estas mantienen la funcionalidad completa de bases de datos tradicionales y el manejo de todo tipo de consultas. Estas bases de datos se escriben a menudo a partir de cero con una arquitectura distribuida en mente, e incluyen componentes como el control distribuido de concurrencia, el control de flujo, y el procesamiento de consultas distribuidas. Entre ellas están LeanXcale Google Spanner, Clustrix, NuoDB, y TransLattice.
* Base de datos en memoria: Las solicitudes dirigidas por estos sistemas NewSQL se caracterizan por tener un gran número de transacciones de corta duración (es decir, sin puestos de usuario), que tocan un pequeño subconjunto de datos utilizando las búsquedas de índice (es decir, no hay recorridos de tablas completos o grandes joins distribuidos) y repetitivas (es decir, ejecutan las mismas consultas con diferentes entradas). Estos sistemas NewSQL logran un alto rendimiento y escalabilidad al evitar que gran parte de la arquitectura sea heredada del diseño original del Sistema R, tales como los algoritmos de recuperación o de control de concurrencia. Dos sistemas de ejemplo de esta categoría son VoltDB y SQLFire de GoPivotal.

### Motores MySQL

La segunda categoría está optimizada como motor de almacenamiento de SQL. Estos sistemas proporcionan la misma interfaz de programación que MySQL, pero con mejor escala incorporada en los motores, como InnoDB. Varios ejemplos de estos nuevos motores son: TokuDB, MemSQL y Akiban.

### Protección transparente

Estos sistemas proporcionan una capa protectora intermedia para dividir automáticamente las bases de datos a través de múltiples nodos. Algunos ejemplos de este tipo de sistema son dbShards, Scalearc, Scalebase y MySQL Cluster.

