udgivelse af den distribuerede DBMS , udviklet inspireret af teknologierne fra Google og . TiDB tilhører kategorien hybrid HTAP-systemer (Hybrid Transactional/Analytical Processing), som både kan håndtere realtids-transaktioner (OLTP) og udføre analytisk forespørgselbehandling. Projektet er skrevet i Go-sprog og er under Apache 2.0-licensen.
Egenskaber ved TiDB:
- Understøttelse af SQL og tilbydelse af et klientgrænseflade, der er kompatibelt med MySQL-protokollen, hvilket gør det lettere for eksisterende MySQL-applikationer at tilpasse sig TiDB og muliggør brugen af almindelige klientbiblioteker. Udover MySQL-protokollen kan der bruges et JSON-baseret API til at tilgå DBMS og en connector til Spark.
- Fra SQL-funktionerne understøttes indekser, aggregatfunktioner, GROUP BY, ORDER BY, DISTINCT, sammenførelser (LEFT JOIN / RIGHT JOIN / CROSS JOIN), visninger, vinduesfunktioner og underforespørgsler. De tilgængelige funktioner er tilstrækkelige til at organisere anvendelsen af TiDB i webapplikationer som PhpMyAdmin, og WordPress;
- Mulighed for horisontal skalering og sikring af fejltolerance: størrelsen på lageret og beregningskraften kan øges ved nemt at tilføje nye noder. Data fordeles på noderne med redundans, hvilket gør det muligt at fortsætte driften i tilfælde af fejl på enkelte noder. Fejl håndteres automatisk.
- Systemet garanterer konsistens og fremstår for klientsoftwaren som én stor DBMS, selvom der i praksis hentes data fra mange noder for at udføre en transaktion.
- Til fysisk lagring af data på noderne kan der anvendes forskellige backends, såsom de lokale lagermotorer GoLevelDB og BoltDB eller den egenudviklede motor til distribueret lagring. .
- Mulighed for asynkron ændring af lagerskemaet, der muliggør tilføjelse af kolonner og indekser uden at stoppe behandlingen af aktuelle operationer.
Vigtige :
- Der er udført forbedringer for at øge ydeevnen. I Sysbench-testen 3.0 overgår den version 2.1 med 1,5 gange ved udførelse af select- og update-operationer, og i TPC-C-testen er det 4,5 gange. Optimeringerne har omfattet forskellige typer forespørgsler, herunder underforespørgsler som 'IN', 'DO' og 'NOT EXISTS', tabel-sammenførselsoperationer (JOIN), brug af indekser og meget mere.
- Den nye lagermotor TiFlash er tilføjet, hvilket muliggør højere ydeevne ved analytiske opgaver (OLAP) ved at lagre data i kolonneformat. TiFlash supplerer det tidligere foreslåede lager TiKV, som opbevarer data i rækkeformat som nøgle/værdi og er mere optimal til transaktionsbehandlingsopgaver (OLTP). TiFlash arbejder side om side med TiKV, og data fortsætter med at blive replikeret i TiKV ved hjælp af Raft-protokollen for at definere konsensus, men for hver Raft-replikationsgruppe oprettes en ekstra replik, som anvendes i TiFlash. Denne tilgang gør det muligt at opnå bedre ressourceadskillelse mellem OLTP- og OLAP-opgaver samt gør transaktionsdata øjeblikkeligt tilgængelige for analytiske forespørgsler.
- En distribueret affaldsindsamler er implementeret, hvilket væsentligt øger hastigheden af affaldsindsamlingen i store klynger og forbedrer stabiliteten.
- Der er tilføjet en eksperimentel implementering af et rollebaseret adgangskontrolsystem (RBAC). Derudover er det muligt at angive adgangsrettigheder for operationerne ANALYZE, USE, SET GLOBAL og SHOW PROCESSLIST.
- Muligheden for at anvende SQL-udtryk til at vælge fra loggen over langsomme forespørgsler er blevet tilføjet.
- Der er implementeret en mekanisme til hurtig gendannelse af slettede tabeller, som gør det muligt at gendanne ved et uheld slettede data.
- Formatet for de gemte logfiler er blevet standardiseret.
- Der er tilføjet støtte for en pessimistisk blokkeringsmetode, som gør transaktionsbehandlingen mere lig MySQL.
- Der er tilføjet støtte til vinduesfunktioner (window-funktioner eller analytiske funktioner), som er kompatible med MySQL 8.0. Vinduesfunktioner giver mulighed for at udføre beregninger for hver række i forespørgslen ved hjælp af andre rækker. I modsætning til aggregatfunktioner, der reducerer et grupperet sæt rækker til én række, udfører vinduesfunktioner aggregering baseret på indholdet af et 'vindue', der inkluderer en eller flere rækker fra resultatsættet. Blandt de implementerede vinduesfunktioner er:
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK og ROW_NUMBER; - Der er tilføjet eksperimentel støtte til visninger (VIEW);
- Systemet til partitionering er blevet forbedret, og muligheden for at fordele data i partitioner baseret på værdiområder eller hashes er tilføjet;
- Der er tilføjet et framework til udvikling af plugins, for eksempel er der allerede forberedt plugins til brug af en hvidliste for IP-adresser eller til at føre en auditlog;
- Eksperimentel støtte til funktionen 'EXPLAIN ANALYZE' til opbygning af en plan for udførelse af SQL-forespørgsler (SQL Plan Management) er blevet tilvejebragt;
- Der er tilføjet kommandoen next_row_id til at få identifikatoren for den næste række;
- Nye indbyggede funktioner JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE og NAME_CONST er blevet tilføjet.
Kilde: opennet.ru
