Veröffentlichung des verteilten DBMS , inspiriert von den Technologien von Google und . TiDB gehört zur Kategorie der hybriden HTAP-Systeme (Hybrid Transactional/Analytical Processing), die sowohl die Ausführung von Echtzeitanfragen (OLTP) als auch die Verarbeitung von analytischen Abfragen ermöglichen. Das Projekt ist in Go geschrieben und unter der Apache 2.0-Lizenz.
Hauptmerkmale von TiDB:
- SQL-Unterstützung und Bereitstellung einer Client-Schnittstelle, die mit dem MySQL-Protokoll kompatibel ist, was die Anpassung bestehender Anwendungen für TiDB, die für MySQL geschrieben wurden, erleichtert und die Nutzung gängiger Client-Bibliotheken ermöglicht. Neben dem MySQL-Protokoll kann auch eine JSON-basierte API sowie ein Connector für Spark verwendet werden, um auf die DBMS zuzugreifen.
- Über die SQL-Möglichkeiten werden Indizes, Aggregatfunktionen, GROUP BY, ORDER BY, DISTINCT, Joins (LEFT JOIN / RIGHT JOIN / CROSS JOIN), Ansichten, Fensterfunktionen und Unterabfragen unterstützt. Die bereitgestellten Funktionen sind ausreichend, um mit TiDB Webanwendungen wie PhpMyAdmin, und WordPress zu betreiben;
- Horizontale Skalierbarkeit und Ausfallsicherheit: Speichergröße und Rechenleistung lassen sich einfach durch das Hinzufügen neuer Knoten erhöhen. Die Daten werden redundant über die Knoten verteilt, sodass der Betrieb bei Ausfällen einzelner Knoten fortgesetzt werden kann. Ausfälle werden automatisch verarbeitet.
- Das System gewährleistet Konsistenz und erscheint der Client-Software als eine große Datenbank, obwohl tatsächlich Daten von mehreren Knoten für die Ausführung von Transaktionen abgerufen werden.
- Für die physische Speicherung der Daten können verschiedene Backends an den Knoten verwendet werden, wie lokale Speicher-Engines wie GoLevelDB und BoltDB oder die eigene Engine für verteiltes Speichern. .
- Die Möglichkeit zur asynchronen Änderung des Speicherschemas erlaubt es, Spalten und Indizes im laufenden Betrieb hinzuzufügen, ohne die Verarbeitung aktueller Operationen zu stoppen.
Haupt :
- Die Leistung wurde verbessert. Im Sysbench-Test Version 3.0 übertrifft die Performance die Version 2.1 um das 1,5-fache bei den Operationen select und update, und im TPC-C-Test um das 4,5-fache. Die Optimierungen betreffen verschiedene Arten von Abfragen, einschließlich Unterabfragen wie "IN", "DO" und "NOT EXISTS", Join-Operationen, die Nutzung von Indizes und vieles mehr;
- Eine neue Speicher-Engine, TiFlash, wurde hinzugefügt, die eine höhere Leistung bei analytischen Aufgaben (OLAP) ermöglicht, indem sie spaltenbasiertes Speichern nutzt. TiFlash ergänzt das zuvor angebotene TiKV, das Daten zeilenweise im Schlüssel/Wert-Format speichert und besser für Transaktionsverarbeitungsaufgaben (OLTP) geeignet ist. TiFlash arbeitet eng mit TiKV zusammen, und die Daten werden weiterhin wie zuvor in TiKV repliziert, wobei das Raft-Protokoll zur Konsensbildung verwendet wird. Für jede Raft-Replikgruppe wird jedoch eine zusätzliche Replik erstellt, die in TiFlash verwendet wird. Dieser Ansatz ermöglicht eine bessere Ressourcenteilung zwischen OLTP- und OLAP-Aufgaben und macht Transaktionsdaten sofort für analytische Abfragen verfügbar;
- Ein verteiltes Garbage-Collector-System wurde implementiert, das die Geschwindigkeit der Müllabfuhr in großen Clustern erheblich erhöht und die Stabilität der Arbeitsweise verbessert;
- Eine experimentelle Implementierung eines rollenbasierten Zugriffskontrollsystems (RBAC) wurde hinzugefügt. Zudem ist es nun möglich, Zugriffsrechte für die Operationen ANALYZE, USE, SET GLOBAL und SHOW PROCESSLIST festzulegen;
- Die Möglichkeit, SQL-Ausdrücke zur Auswahl aus dem Log der langsamen Abfragen zu verwenden, wurde hinzugefügt;
- Ein Mechanismus zur schnellen Wiederherstellung gelöschter Tabellen wurde implementiert, der es ermöglicht, versehentlich gelöschte Daten wiederherzustellen;
- Das Format der aufgezeichneten Logs wurde vereinheitlicht;
- Die Unterstützung für den pessimistischen Locking-Modus wurde hinzugefügt, der die Verarbeitung von Transaktionen näher an MySQL bringt;
- Unterstützung für Fensterfunktionen (Window-Funktionen oder analytische Funktionen), kompatibel mit MySQL 8.0, hinzugefügt. Fensterfunktionen ermöglichen es, Berechnungen für jede Zeile einer Abfrage unter Nutzung anderer Zeilen durchzuführen. Im Gegensatz zu aggregierten Funktionen, die eine gruppierte Menge von Zeilen in eine einzige Zeile zusammenfassen, aggregieren Fensterfunktionen basierend auf dem Inhalt eines «Fensters», das eine oder mehrere Zeilen aus dem Ergebnis enthält. Zu den implementierten Fensterfunktionen zählen:
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK und ROW_NUMBER; - Experimentelle Unterstützung für Ansichten (VIEW) hinzugefügt;
- Das System zur Partitionierung wurde verbessert; es wurde die Möglichkeit hinzugefügt, Daten basierend auf einem Wertebereich oder Hashes auf Partitionen zu verteilen;
- Ein Framework zur Entwicklung von Plugins hinzugefügt; bereits vorhandene Plugins für die Nutzung von IP-Whitelists oder das Führen von Audit-Protokollen sind verfügbar;
- Experimentelle Unterstützung für die Funktion «EXPLAIN ANALYZE» zur Erstellung eines Ausführungsplans für SQL-Abfragen (SQL Plan Management) bereitgestellt;
- Der Befehl next_row_id zum Abrufen der Identifikationsnummer der nächsten Zeile hinzugefügt;
- Neue integrierte Funktionen wie JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE und NAME_CONST wurden hinzugefügt.
Quelle: opennet.ru
