Kürzlich wurde bekannt gegeben, dass Yandex den Quellcode für sein DBMS „YDB“ veröffentlicht hat , das Unterstützung für den SQL-Dialekt und ACID-Transaktionen implementiert.
Das DBMS wurde von Grund auf neu entwickelt und ursprünglich mit dem Ziel der Fehlertoleranz , der automatischen Fehlerbehebung und der Skalierbarkeit konzipiert. Bemerkenswert ist, dass Yandex operative YDB-Cluster mit über 10 Knoten in Betrieb genommen hat, die Hunderte von Petabytes an Daten speichern und Millionen verteilter Transaktionen pro Sekunde verarbeiten.
Hauptneuheiten von YDB
Eine der Hauptfunktionen von YDB ist die Verwendung eines relationalen Datenmodells mit Tabellen. YQL ( YDB Query Language) dient zum Abfragen und Definieren des Datenschemas; es handelt sich um einen SQL-Dialekt, der für die Arbeit mit großen, verteilten Datenbanken angepasst ist . Beim Erstellen eines Speicherschemas wird eine baumartige Gruppierung von Tabellen unterstützt, ähnlich den Verzeichnissen in einem Dateisystem. Eine API ermöglicht die Arbeit mit Daten im JSON-Format.
Besonders hervorzuheben ist die Fähigkeit, fehlertolerante Konfigurationen zu erstellen , die auch bei Ausfall von Festplatten, Knoten, Racks und sogar einzelnen Rechenzentren weiterhin funktionieren. YDB unterstützt die synchrone Bereitstellung und Replikation über drei Verfügbarkeitszonen hinweg und gewährleistet gleichzeitig die Integrität des Clusters im Falle eines Zonenausfalls.
Kompatibilität mit dem Datenzugriff über Scan-Abfragen, die für die Durchführung von Ad-hoc-Analyseabfragen an die Datenbank entwickelt wurden, im Nur-Lese-Modus ausgeführt werden und einen gRPC-Flow zurückgeben.
Darüber hinaus zeichnet es sich auch dadurch aus , dass es Daten mithilfe der nativen PDisk-Komponente und der VDisk-Schicht direkt auf Blockgeräten speichert . Zusätzlich zu VDisk läuft DSProxy, das die Verfügbarkeit und Leistung der Festplatten analysiert und diese bei Problemen ausschließt.
Zu den weiteren bemerkenswerten Merkmalen gehören:
- Eine flexible Architektur, mit der Sie verschiedene Dienste auf YDB aufbauen können, bis hin zu virtuellen Blockgeräten und dauerhaften Warteschlangen. Eignung für verschiedene Arten von Workload: OLTP und OLAP (analytische Abfragen).
- Unterstützung für Multi-User- (Multi-Tenant) und serverlose Konfigurationen.
- Fähigkeit, Clients zu authentifizieren. Benutzer können ihre eigenen virtuellen Cluster und Datenbanken auf einer gemeinsam genutzten Infrastruktur erstellen und dabei den Ressourcenverbrauch in Bezug auf die Anzahl der Anfragen und die Datengröße berücksichtigen oder bestimmte Rechenressourcen und Speicherplatz mieten/reservieren.
- Möglichkeit, die Nutzungsdauer der Aufzeichnungen für die automatische Löschung veralteter Daten anzupassen.
- Die Interaktion mit dem DBMS und das Senden von Anfragen erfolgt über die Befehlszeilenschnittstelle, die integrierte Webschnittstelle oder das YDB SDK, das Bibliotheken für C++, C# (.NET), Go, Java, Node.js, PHP und Python bereitstellt.
- Automatische Wiederherstellung nach Ausfällen mit minimaler Verzögerung für Anwendungen und Aufrechterhaltung der angegebenen Redundanz beim Speichern von Daten.
- Automatische Erstellung von Indizes für den Primärschlüssel und die Möglichkeit, Sekundärindizes zu definieren, um die Effizienz des Zugriffs auf beliebige Spalten zu verbessern.
- Horizontale Skalierbarkeit. Wenn die Last und Größe der gespeicherten Daten wächst, kann der Cluster einfach erweitert werden, indem neue Knoten verbunden werden. Datenverarbeitungs- und Speicherebenen sind getrennt, sodass Sie Datenverarbeitung und Speicher separat skalieren können. Das DBMS selbst überwacht die gleichmäßige Verteilung von Daten und Last unter Berücksichtigung der verfügbaren Hardware-Ressourcen. Es ist möglich, geografisch verteilte Konfigurationen zu implementieren, die mehrere Rechenzentren in verschiedenen Teilen der Welt abdecken.
- Unterstützung für ein starkes Konsistenzmodell und ACID-Transaktionen bei der Verarbeitung von Abfragen, die sich über mehrere Knoten und Tabellen erstrecken. Um die Leistung zu verbessern, können Sie die Konsistenzprüfung selektiv deaktivieren.
- Automatische Datenreplikation, automatische Partitionierung (Partitionierung, Sharding) bei steigender Größe oder Last sowie automatischer Last- und Datenausgleich zwischen Knoten.
Abschließend sei noch erwähnt, dass YDB in Yandex-Projekten verwendet wird, der Code in C/C++ geschrieben ist und unter der Apache-2.0-Lizenz veröffentlicht wird. Den Quellcode sowie weitere Details finden Sie unter folgendem Link.