È stato recentemente annunciato che Yandex ha rilasciato il codice sorgente del suo DBMS, "YDB" , che implementa il supporto per il dialetto SQL e le transazioni ACID.
Il DBMS è stato costruito da zero e inizialmente sviluppato con l'obiettivo di garantire tolleranza ai guasti , ripristino automatico in caso di malfunzionamenti e scalabilità. Vale la pena notare che Yandex ha lanciato cluster YDB operativi, comprendenti oltre 10 nodi, in grado di archiviare centinaia di petabyte di dati e gestire milioni di transazioni distribuite al secondo.
Principali novità di YDB
Una delle caratteristiche principali di YDB è l' utilizzo di un modello dati relazionale con tabelle. YQL ( YDB Query Language) viene utilizzato per interrogare e definire lo schema dei dati; si tratta di un dialetto di SQL adattato per lavorare con database distribuiti di grandi dimensioni . Durante la creazione di uno schema di archiviazione, è supportata una struttura ad albero per le tabelle, simile alle directory di un file system. È disponibile un'API per lavorare con dati in formato JSON.
Degna di nota è anche la sua capacità di creare configurazioni tolleranti ai guasti che continuano a funzionare anche in caso di malfunzionamento di dischi, nodi, rack e persino singoli data center. YDB supporta la distribuzione e la replica sincrone su tre zone di disponibilità, mantenendo l'integrità del cluster anche in caso di guasto di una zona.
Compatibilità con l'accesso ai dati tramite query di scansione, progettate per eseguire query analitiche ad hoc sul database, eseguite in modalità di sola lettura e che restituiscono un flusso gRPC.
Inoltre, si distingue anche per la memorizzazione diretta dei dati su dispositivi a blocchi utilizzando il componente nativo PDisk e il livello VDisk. Oltre a VDisk, è presente DSProxy, che analizza la disponibilità e le prestazioni del disco per escluderlo in caso di problemi.
Tra le altre caratteristiche degne di nota si annoverano:
- Un'architettura flessibile che ti consente di creare vari servizi su YDB, fino a dispositivi a blocchi virtuali e code persistenti. Idoneità a diversi tipi di carico di lavoro: OLTP e OLAP (query analitiche).
- Supporto per configurazioni multiutente (multi-tenant) e serverless.
- Possibilità di autenticare i clienti. Gli utenti possono creare i propri cluster e database virtuali su un'infrastruttura condivisa comune, considerando il consumo di risorse in termini di numero di richieste e dimensioni dei dati, oppure noleggiando/riservando determinate risorse di elaborazione e spazio di archiviazione.
- Possibilità di regolare la vita utile delle registrazioni per la cancellazione automatica dei dati obsoleti.
- L'interazione con il DBMS e l'invio delle richieste avviene tramite l'interfaccia della riga di comando, l'interfaccia Web integrata o l'SDK YDB, che fornisce librerie per C++, C# (.NET), Go, Java, Node.js, PHP e Python.
- Ripristino automatico degli errori con il minimo ritardo per le applicazioni e mantenimento automatico della ridondanza specificata durante l'archiviazione dei dati.
- Creazione automatica di indici sulla chiave primaria e possibilità di definire indici secondari per migliorare l'efficienza dell'accesso arbitrario alle colonne.
- Scalabilità orizzontale. Con l'aumento del carico e delle dimensioni dei dati archiviati, il cluster può essere ampliato semplicemente collegando nuovi nodi. I livelli di elaborazione e archiviazione sono separati, consentendoti di scalare separatamente elaborazione e archiviazione. Lo stesso DBMS controlla la distribuzione uniforme dei dati e del carico, tenendo conto delle risorse hardware disponibili. È possibile implementare configurazioni geograficamente distribuite che coprono più data center in diverse parti del mondo.
- Supporto per un modello di coerenza forte e transazioni ACID durante l'elaborazione di query che si estendono su più nodi e tabelle. Per migliorare le prestazioni, puoi disabilitare in modo selettivo il controllo della coerenza.
- Replica automatica dei dati, partizionamento automatico (partizionamento, partizionamento orizzontale) all'aumentare delle dimensioni o del carico e bilanciamento automatico del carico e dei dati tra i nodi.
Infine, è opportuno sottolineare che YDB viene utilizzato nei progetti Yandex, il codice è scritto in C/C++ ed è distribuito con licenza Apache 2.0. Il codice sorgente, così come ulteriori dettagli, sono disponibili al seguente link.