rilascio di un database distribuito , sviluppato ispirandosi alle tecnologie di Google e . TiDB appartiene alla categoria dei sistemi ibridi HTAP (Hybrid Transactional/Analytical Processing), in grado di gestire sia transazioni in tempo reale (OLTP) che l'elaborazione di query analitiche. Il progetto è scritto in Go e sotto licenza Apache 2.0.
Caratteristiche di TiDB:
- Supporto per SQL e fornitura di un'interfaccia client compatibile con il protocollo MySQL, che facilita l'adattamento per le applicazioni esistenti scritte per MySQL e consente di utilizzare librerie client comuni. Oltre al protocollo MySQL, è possibile utilizzare un'API basata su JSON e un connettore per Spark per accedere al database.
- Tra le funzionalità supportate da SQL ci sono indici, funzioni di aggregazione, espressioni GROUP BY, ORDER BY, DISTINCT, join (LEFT JOIN / RIGHT JOIN / CROSS JOIN), viste, funzioni di finestra e subquery. Le funzionalità fornite sono sufficienti per l'organizzazione di web-app come PhpMyAdmin, e WordPress;
- Scalabilità orizzontale e tolleranza ai guasti: la dimensione dello storage e la potenza di calcolo possono essere aumentate semplicemente aggiungendo nuovi nodi. I dati vengono distribuiti tra i nodi con ridondanza, consentendo il proseguimento delle operazioni in caso di guasto di nodi singoli. I guasti vengono gestiti automaticamente.
- Il sistema garantisce coerenza e per il software client appare come un grande database, nonostante i dati necessari per eseguire le transazioni provengano da più nodi.
- Per l'archiviazione fisica dei dati sui nodi possono essere utilizzati diversi backend, come i motori di archiviazione locali GoLevelDB e BoltDB o il proprio motore di archiviazione distribuita. .
- Possibilità di modificare in modo asincrono lo schema di archiviazione, consentendo di aggiungere colonne e indici al volo senza interrompere l'elaborazione delle operazioni attuali.
Principali :
- Il lavoro di ottimizzazione delle performance è stato completato. Nei test con Sysbench versione 3.0, si registra un miglioramento di 1,5 volte rispetto alla versione 2.1 per le operazioni di select e update, e un incremento di 4,5 volte nel test TPC-C. Le ottimizzazioni hanno interessato vari tipi di query, inclusi i sottoquery «IN», «DO» e «NOT EXISTS», le operazioni di join tra le tabelle, l'uso degli indici e molto altro.
- È stato aggiunto un nuovo motore di archiviazione, TiFlash, che garantisce prestazioni superiori per le attività analitiche (OLAP), grazie all'archiviazione basata su colonne. TiFlash si affianca al precedente sistema di archiviazione TiKV, che memorizza i dati come righe in formato chiave/valore ed è più ottimale per le operazioni di transazione (OLTP). TiFlash lavora in sinergia con TiKV e i dati vengono ancora replicati in TiKV utilizzando il protocollo Raft per determinare il consenso; per ogni gruppo di repliche Raft viene creata una replica aggiuntiva utilizzata in TiFlash. Questo approccio permette una migliore separazione delle risorse tra le attività OLTP e OLAP, rendendo i dati delle transazioni immediatamente disponibili per le query analitiche.
- È stato implementato un raccoglitore di rifiuti distribuito che consente di aumentare significativamente la velocità di raccolta dei rifiuti in ampi cluster e migliorare la stabilità operativa.
- È stata aggiunta un'implementazione sperimentale di un sistema di controllo degli accessi basato su ruoli (RBAC). Inoltre, è stata garantita la possibilità di definire i diritti di accesso per le operazioni ANALYZE, USE, SET GLOBAL e SHOW PROCESSLIST.
- È stata introdotta la possibilità di utilizzare espressioni SQL per la selezione dal log delle query lente.
- È stato implementato un meccanismo di ripristino rapido delle tabelle eliminate, che consente di recuperare dati cancellati per errore.
- Il formato dei log registrati è stato unificato.
- È stata aggiunta la supporto per la modalità di blocco pessimistica, che rende l'elaborazione delle transazioni più simile a MySQL.
- È stata aggiunta la supporto per le funzioni di finestra (funzioni di finestra o funzioni analitiche) compatibili con MySQL 8.0. Le funzioni di finestra consentono di eseguire calcoli per ogni riga della query utilizzando altre righe. A differenza delle funzioni aggregate, che comprimono un insieme di righe raggruppate in una sola riga, le funzioni di finestra producono aggregazioni basate sul contenuto della "finestra", che include una o più righe del set di risultati. Tra le funzioni di finestra implementate ci sono:
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK e ROW_NUMBER; - È stata aggiunta il supporto sperimentale per le viste (VIEW);
- È migliorato il sistema di partizionamento, aggiungendo la possibilità di distribuire i dati in base a intervalli di valori o hash;
- È stato aggiunto un framework per lo sviluppo di plugin, ad esempio, sono già disponibili plugin per l'uso di una lista bianca di IP o per la registrazione di audit;
- È stato garantito il supporto sperimentale per la funzione "EXPLAIN ANALYZE" per la creazione di un piano di esecuzione delle query SQL (SQL Plan Management);
- È stato aggiunto il comando next_row_id per ottenere l'identificativo della prossima riga;
- Sono state aggiunte nuove funzioni integrate JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE e NAME_CONST.
Fonte: opennet.ru
