Niedawno ogłoszono, że Yandex udostępnił kod źródłowy swojego systemu DBMS „YDB” , który zapewnia obsługę dialektu SQL i transakcji ACID.
System DBMS został zbudowany od podstaw i początkowo miał na celu zapewnienie odporności na błędy , automatycznego odzyskiwania danych po awariach oraz skalowalności. Warto zauważyć, że Yandex uruchomił operacyjne klastry YDB, obejmujące ponad 10 000 węzłów, przechowujące setki petabajtów danych i obsługujące miliony rozproszonych transakcji na sekundę.
Główne nowości YDB
Jedną z kluczowych cech YDB jest wykorzystanie relacyjnego modelu danych z tabelami. Do tworzenia zapytań i definiowania schematu danych używany jest YQL (YDB Query Language); jest to dialekt języka SQL przystosowany do pracy z dużymi, rozproszonymi bazami danych . Podczas tworzenia schematu pamięci masowej obsługiwane jest drzewiaste grupowanie tabel, podobne do katalogów w systemie plików. Dostępne jest API do pracy z danymi w formacie JSON.
Na uwagę zasługuje również możliwość tworzenia konfiguracji odpornych na awarie , które nadal działają w przypadku awarii dysków, węzłów, szaf, a nawet poszczególnych centrów danych. YDB obsługuje synchroniczne wdrażanie i replikację w trzech strefach dostępności, utrzymując jednocześnie kondycję klastra w przypadku awarii strefy.
Zgodność z dostępem do danych za pomocą zapytań skanujących, zaprojektowanych w celu wykonywania doraźnych zapytań analitycznych w bazie danych, wykonywanych w trybie tylko do odczytu i zwracających przepływ grpc.
Co więcej, wyróżnia się również możliwością przechowywania danych bezpośrednio na urządzeniach blokowych, wykorzystując natywny komponent PDisk i warstwę VDisk. Oprócz VDisk, uruchamiany jest DSProxy, który analizuje dostępność i wydajność dysków, aby wykluczyć je w przypadku wykrycia problemów.
Inne godne uwagi cechy to:
- Elastyczna architektura, która pozwala budować różne usługi na bazie YDB, aż do wirtualnych urządzeń blokowych i trwałych kolejek. Przydatność do różnych typów obciążenia: OLTP i OLAP (zapytania analityczne).
- Obsługa konfiguracji z wieloma użytkownikami (wielu dzierżawców) i konfiguracji bezserwerowych.
- Możliwość uwierzytelniania klientów. Użytkownicy mogą tworzyć własne klastry wirtualne i bazy danych we wspólnej współdzielonej infrastrukturze, uwzględniając zużycie zasobów pod względem liczby żądań i wielkości danych lub wynajmując/rezerwując określone zasoby obliczeniowe i przestrzeń dyskową.
- Możliwość dostosowania okresu użytkowania ewidencji do automatycznego usuwania przestarzałych danych.
- Interakcja z DBMS i przesyłanie żądań odbywa się za pomocą interfejsu wiersza poleceń, zintegrowanego interfejsu internetowego lub zestawu YDB SDK, który zawiera biblioteki dla C++, C# (.NET), Go, Java, Node.js, PHP i Python.
- Automatycznie przywracaj działanie aplikacji po awariach z minimalnym opóźnieniem i automatycznie utrzymuj określoną nadmiarowość podczas przechowywania danych.
- Automatyczne tworzenie indeksów na kluczu podstawowym oraz możliwość definiowania indeksów wtórnych w celu poprawy efektywności dostępu do dowolnych kolumn.
- Skalowalność w poziomie. Wraz ze wzrostem obciążenia i rozmiaru przechowywanych danych klaster można po prostu rozbudowywać, łącząc nowe węzły. Warstwy obliczeniowe i magazynowe są oddzielne, co umożliwia oddzielne skalowanie zasobów obliczeniowych i magazynu. Sam DBMS monitoruje równomierny rozkład danych i obciążenia, biorąc pod uwagę dostępne zasoby sprzętowe. Możliwe jest wdrożenie konfiguracji rozproszonych geograficznie, które obejmują wiele centrów danych w różnych częściach świata.
- Obsługa silnego modelu spójności i transakcji ACID podczas przetwarzania zapytań obejmujących wiele węzłów i tabel. Aby poprawić wydajność, możesz selektywnie wyłączyć sprawdzanie spójności.
- Automatyczna replikacja danych, automatyczne partycjonowanie (partycjonowanie, fragmentowanie) w przypadku wzrostu rozmiaru lub obciążenia oraz automatyczne równoważenie obciążenia i danych między węzłami.
Na koniec warto zauważyć, że YDB jest używany w projektach Yandex, kod napisany jest w C/C++ i jest dystrybuowany na licencji Apache 2.0. Kod źródłowy oraz więcej szczegółów na jego temat można znaleźć pod poniższym linkiem.