lançamento do SGBD distribuído , desenvolvido sob a influência das tecnologias do Google e . TiDB é classificada como um sistema híbrido HTAP (Hybrid Transactional/Analytical Processing), capaz de realizar transações em tempo real (OLTP) e processar consultas analíticas. O projeto é escrito na linguagem Go e estão sob a licença Apache 2.0.
Recursos do TiDB:
- Suporte a SQL e fornecimento de uma interface de cliente compatível com o protocolo MySQL, facilitando a adaptação de aplicações existentes para TiDB que foram escritas para MySQL, além de permitir o uso de bibliotecas de cliente populares. Além do protocolo MySQL, é possível acessar o SGBD através de uma API baseada em JSON e conector para Spark.
- Entre os recursos suportados pelo SQL estão índices, funções agregadas, expressões GROUP BY, ORDER BY, DISTINCT, junções (LEFT JOIN / RIGHT JOIN / CROSS JOIN), visões, funções de janela e subconsultas. As capacidades fornecidas são suficientes para operar com TiDB em web-aplicações como PhpMyAdmin, e WordPress;
- Capacidade de escalonamento horizontal e garantia de alta disponibilidade: o tamanho do armazenamento e a potência computacional podem ser aumentados simplesmente conectando novos nós. Os dados são distribuídos entre os nós com redundância, permitindo a continuidade do funcionamento em caso de falhas de nós individuais. Falhas são tratadas automaticamente.
- O sistema garante consistência e para o software cliente parece um único grande SGBD, apesar de que, para executar uma transação, são utilizados dados de vários nós.
- Para o armazenamento físico de dados em nós, podem ser utilizados diferentes backends, como os motores de armazenamento locais GoLevelDB e BoltDB ou o próprio motor de armazenamento distribuído .
- Capacidade de alteração assíncrona do esquema de armazenamento, permitindo a adição de colunas e índices em tempo real sem interromper a execução de operações atuais.
Principais :
- Foi realizado um trabalho para aumentar o desempenho. No teste Sysbench, a versão 3.0 supera a versão 2.1 em 1,5 vezes ao executar operações select e update, e no teste TPC-C, em 4,5 vezes. As otimizações afetaram vários tipos de consultas, incluindo subconsultas ‘IN’, ‘DO’ e ‘NOT EXISTS’, operações de junção de tabelas (JOIN), uso de índices e muito mais;
- Adicionado um novo mecanismo de armazenamento TiFlash, que proporciona um desempenho superior na execução de tarefas analíticas (OLAP) devido ao armazenamento em formato de colunas. O TiFlash complementa o armazenamento anteriormente oferecido, TiKV, que armazena dados em formato de linha chave/valor e é mais otimizado para tarefas de processamento de transações (OLTP). O TiFlash opera em conjunto com o TiKV, e os dados continuam a ser replicados no TiKV utilizando o protocolo Raft para determinar o consenso, mas para cada grupo de réplicas Raft, uma réplica adicional é criada para ser usada no TiFlash. Essa abordagem permite uma melhor divisão de recursos entre tarefas OLTP e OLAP, além de tornar os dados das transações imediatamente disponíveis para consultas analíticas;
- Implementado um coletor de lixo distribuído que aumenta significativamente a velocidade de coleta de lixo em grandes clusters e melhora a estabilidade operacional;
- Adicionada uma implementação experimental do sistema de controle de acesso baseado em funções (RBAC). Também foi garantida a possibilidade de definir permissões de acesso para operações ANALYZE, USE, SET GLOBAL e SHOW PROCESSLIST;
- Adicionada a capacidade de usar expressões SQL para seleção de registros do log de consultas lentas;
- Implementado um mecanismo rápido de recuperação de tabelas deletadas, que permite restaurar dados acidentalmente excluídos;
- Formatos de logs gravados unificados;
- Adicionado suporte ao modo de bloqueio pessimista, que torna o tratamento de transações mais semelhante ao MySQL;
- Adicionado suporte a funções de janela (funções de análise) compatíveis com MySQL 8.0. As funções de janela permitem que, para cada linha da consulta, sejam realizadas cálculos utilizando outras linhas. Ao contrário das funções de agregação, que condensam um conjunto de linhas agrupadas em uma única linha, as funções de janela realizam agregação com base no conteúdo da "janela", que inclui uma ou mais linhas do conjunto de resultados. Entre as funções de janela implementadas estão:
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK e ROW_NUMBER; - Adicionada suporte experimental para visões (VIEW);
- Aprimorado o sistema de particionamento, permitindo a distribuição de dados em seções com base em intervalos de valores ou hashes;
- Adicionado um framework para desenvolvimento de plugins, como plugins já preparados para usar uma lista de IPs permitidos ou para manter um log de auditoria;
- Suporte experimental para a função "EXPLAIN ANALYZE" foi implementado para a construção do plano de execução de consulta SQL (SQL Plan Management);
- Adicionada a comando next_row_id para obter o identificador da próxima linha;
- Novas funções embutidas JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE e NAME_CONST foram adicionadas.
Fonte: opennet.ru
