rilascio di un DBMS distribuito , sviluppato sotto l'influenza delle tecnologie di Google e . TiDB appartiene alla categoria dei sistemi ibridi HTAP (Hybrid Transactional/Analytical Processing), in grado di eseguire transazioni in tempo reale (OLTP) e di gestire 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 semplifica l'adattamento delle applicazioni esistenti per TiDB scritte per MySQL, permettendo anche di utilizzare le librerie client più comuni. Oltre al protocollo MySQL, è possibile utilizzare un API basata su JSON e un connettore per Spark per accedere al DBMS.
- Tra le funzionalità SQL supportate ci sono indici, funzioni aggregate, espressioni GROUP BY, ORDER BY, DISTINCT, unioni (LEFT JOIN / RIGHT JOIN / CROSS JOIN), viste, funzioni di finestra e sottoquery. Le funzionalità offerte sono sufficienti per gestire applicazioni web come PhpMyAdmin con TiDB, e WordPress;
- Possibilità di scalabilità orizzontale e di garantire la tolleranza ai guasti: la capacità di archiviazione e la potenza di calcolo possono essere ampliate semplicemente aggiungendo nuovi nodi. I dati sono distribuiti tra i nodi con ridondanza, permettendo il proseguimento delle operazioni in caso di guasto di nodi singoli. I guasti vengono gestiti automaticamente.
- Il sistema garantisce la coerenza e si presenta al software client come un unico grande DBMS, anche se per eseguire la transazione vengono coinvolti dati da molti nodi.
- Per la memorizzazione 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 distribuito .
- Possibilità di modifica asincrona dello schema di archiviazione, che consente di aggiungere colonne e indici al volo senza fermare l'elaborazione delle operazioni correnti.
Principali :
- Sono stati effettuati lavori per aumentare le prestazioni. Nel test Sysbench, la versione 3.0 supera il ramo 2.1 di 1,5 volte nell'esecuzione delle operazioni di selezione e aggiornamento, e nel test TPC-C di 4,5 volte. Le ottimizzazioni hanno toccato diversi tipi di query, comprese le sottoquery 'IN', 'DO' e 'NOT EXISTS', le operazioni di unione delle tabelle (JOIN), l'uso degli indici e molto altro;
- È stato aggiunto un nuovo motore di archiviazione TiFlash, che permette di ottenere prestazioni superiori nella risoluzione di compiti analitici (OLAP), grazie all'archiviazione basata su colonne. TiFlash integra il precedente sistema di archiviazione TiKV, che memorizza i dati in formato chiave/valore riga-per-riga ed è più ottimale per le operazioni di elaborazione delle transazioni (OLTP). TiFlash funziona a fianco di TiKV e i dati continuano a essere replicati in TiKV come prima, utilizzando il protocollo Raft per determinare il consenso, ma per ogni gruppo di repliche Raft viene creata una replica aggiuntiva, che viene utilizzata in TiFlash. Questo approccio consente di ottenere una migliore separazione delle risorse tra compiti OLTP e OLAP, rendendo i dati delle transazioni immediatamente disponibili per le query analitiche.
- È stato implementato un raccoglitore di spazzatura distribuito, che consente di aumentare notevolmente la velocità di raccolta della spazzatura nei grandi cluster e migliorare la stabilità del sistema.
- È stata aggiunta un'implementazione sperimentale di un sistema di controllo degli accessi basato sui ruoli (RBAC). È stata anche fornita la possibilità di definire diritti di accesso per le operazioni ANALYZE, USE, SET GLOBAL e SHOW PROCESSLIST.
- È stata aggiunta la possibilità di utilizzare espressioni SQL per l'estrazione dal log delle query lente.
- È stato implementato un meccanismo di ripristino rapido delle tabelle eliminate, che permette di recuperare i dati eliminati accidentalmente.
- È stato unificato il formato dei log registrati.
- È stata aggiunta la supporto per modalità di blocco pessimistiche, che rende l'elaborazione delle transazioni più simile a quella di MySQL.
- È stato aggiunto il 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 ciascuna riga di una query utilizzando altre righe. A differenza delle funzioni aggregate, che comprimono un insieme di righe raggruppate in una singola riga, le funzioni di finestra aggregano in base al contenuto di una "finestra", che include una o più righe dal set dei 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. - È stato aggiunto il supporto sperimentale per le viste (VIEW).
- È stato migliorato il sistema di partizionamento, aggiungendo la possibilità di distribuire i dati in base a intervalli di valori o hash.
- Aggiunto un framework per lo sviluppo di plugin, ad esempio, sono già disponibili plugin per l'uso di un elenco bianco di IP o per la registrazione di un audit;
- Supporto sperimentale per la funzione «EXPLAIN ANALYZE» per la costruzione del piano di esecuzione delle query SQL (SQL Plan Management);
- Aggiunta del comando next_row_id per ottenere l'identificativo della prossima riga;
- Aggiunte nuove funzioni integrate JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE e NAME_CONST.
Fonte: opennet.ru
