lanzamiento de base de datos distribuida , desarrollada inspirándose en tecnologías de Google y . TiDB pertenece a la categoría de sistemas híbridos HTAP (Procesamiento Híbrido Transaccional/Analítico), capaces de llevar a cabo tanto transacciones en tiempo real (OLTP) como procesamiento de consultas analíticas. El proyecto está escrito en el lenguaje Go y bajo la licencia Apache 2.0.
Características de TiDB:
- Soporte para SQL y una interfaz de cliente compatible con el protocolo MySQL, lo que facilita la adaptación de las aplicaciones existentes para TiDB escritas para MySQL, y permite utilizar bibliotecas de clientes ampliamente utilizadas. Además del protocolo MySQL, se puede usar una API basada en JSON y un conector para Spark para acceder a la base de datos.
- Entre las capacidades de SQL se incluyen índices, funciones de agregación, expresiones GROUP BY, ORDER BY, DISTINCT, uniones (LEFT JOIN / RIGHT JOIN / CROSS JOIN), vistas, funciones de ventana y subconsultas. Las capacidades ofrecidas son suficientes para implementar aplicaciones web que trabajen con TiDB, como PhpMyAdmin, y WordPress;
- Posibilidad de escalabilidad horizontal y garantizar la tolerancia a fallos: el tamaño del almacenamiento y la potencia computacional se pueden aumentar fácilmente al conectar nuevos nodos. Los datos se distribuyen entre nodos con redundancia, lo que permite continuar funcionando en caso de fallos de nodos individuales. Los fallos se gestionan automáticamente.
- El sistema garantiza la coherencia y se presenta como una gran base de datos para el software cliente, a pesar de que, de hecho, para llevar a cabo una transacción se obtienen datos de múltiples nodos.
- Para el almacenamiento físico de datos en los nodos se pueden aplicar diferentes backends, como los motores de almacenamiento locales GoLevelDB y BoltDB o su propio motor de almacenamiento distribuido .
- Habilidad para realizar cambios en el esquema de almacenamiento de forma asíncrona, permitiendo agregar columnas e índices sobre la marcha sin detener el procesamiento de operaciones actuales.
Principales :
- Se ha trabajado en aumentar el rendimiento. En la prueba Sysbench, la versión 3.0 supera a la rama 2.1 en 1.5 veces al realizar operaciones de selección y actualización, y en la prueba TPC-C en 4.5 veces. Las optimizaciones han abarcado diferentes tipos de consultas, incluidas subconsultas 'IN', 'DO' y 'NOT EXISTS', operaciones de unión de tablas (JOIN), uso de índices y mucho más;
- Se ha añadido un nuevo motor de almacenamiento TiFlash, que permite lograr un mayor rendimiento en tareas analíticas (OLAP) gracias al almacenamiento en columnas. TiFlash complementa el almacenamiento TiKV, que almacena datos en filas en formato de clave/valor y es más óptimo para el procesamiento de transacciones (OLTP). TiFlash funciona junto a TiKV, y los datos siguen replicándose en TiKV utilizando el protocolo Raft para determinar el consenso. Sin embargo, para cada grupo de réplicas Raft se crea una réplica adicional que se utiliza en TiFlash. Este enfoque permite una mejor división de recursos entre tareas OLTP y OLAP, y hace que los datos de transacciones estén disponibles instantáneamente para consultas analíticas.
- Se ha implementado un recolector de basura distribuido que permite aumentar significativamente la velocidad de recolección de basura en grandes clústeres y mejorar la estabilidad del sistema.
- Se ha añadido una implementación experimental de un sistema de control de acceso basado en roles (RBAC). También se ha proporcionado la posibilidad de establecer permisos de acceso para las operaciones ANALYZE, USE, SET GLOBAL y SHOW PROCESSLIST.
- Se ha añadido la opción de usar expresiones SQL para seleccionar del registro de consultas lentas.
- Se ha implementado un mecanismo para la recuperación rápida de tablas eliminadas, que permite restaurar datos eliminados accidentalmente.
- Se ha unificado el formato de los registros escritos.
- Se ha añadido soporte para un modo de bloqueo pesimista, que hace que el procesamiento de transacciones sea más similar al de MySQL.
- Se ha añadido soporte para funciones de ventana (funciones de ventana o funciones analíticas) que son compatibles con MySQL 8.0. Las funciones de ventana permiten realizar cálculos para cada fila de la consulta utilizando otras filas. A diferencia de las funciones agregadas, que reducen un conjunto de filas agrupadas a una sola fila, las funciones de ventana agregan en función del contenido de una "ventana" que incluye una o más filas del conjunto de resultados. Entre las funciones de ventana implementadas se encuentran:
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK y ROW_NUMBER. - Se ha añadido soporte experimental para vistas (VIEW).
- Se ha mejorado el sistema de particionado (particionamiento), añadiendo la posibilidad de distribuir datos en secciones según rangos de valores o hashes.
- Se ha añadido un marco para el desarrollo de plugins, por ejemplo, ya hay plugins preparados para usar listas blancas de IP o para llevar un registro de auditoría;
- Se ha proporcionado soporte experimental para la función "EXPLAIN ANALYZE" para la gestión de planes de ejecución de consultas SQL (SQL Plan Management);
- Se ha añadido el comando next_row_id para obtener el identificador de la siguiente fila;
- Se han añadido nuevas funciones integradas JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE y NAME_CONST.
Fuente: opennet.ru
