Opublikowano wydanie otwartej bazy danych Nebula Graph 3.2, przeznaczonej do efektywnego przechowywania dużych zbiorów powiązanych danych, tworzących grafikę, która może obejmować miliardy węzłów i tryliony powiązań. Projekt napisany jest w języku C++ i udostępniany na licencji Apache 2.0. Biblioteki klienckie do interakcji z bazą danych zostały przygotowane dla języków Go, Python i Java.
W bazie danych zastosowana jest rozproszona architektura bez podziału zasobów (shared-nothing), która zakłada uruchamianie niezależnych i samowystarczalnych procesów przetwarzania zapytań graphd oraz procesów przechowywania storaged. Orkiestracją przenoszenia danych i zapewnieniem metainformacji o grafie zajmuje się serwis meta. Aby zapewnić spójność danych, używany jest protokół oparty na algorytmie RAFT.
Główne cechy Nebula Graph:
- Zapewnienie bezpieczeństwa poprzez udostępnienie dostępu tylko uwierzytelnionym użytkownikom, a ich uprawnienia są określane przez system zarządzania dostępem oparty na rolach (RBAC).
- Możliwość podłączenia różnych typów silników przechowywania. Wsparcie dla rozszerzeń języka zapytań o nowe algorytmy.
- Zapewnienie minimalnych opóźnień przy odczycie lub zapisie danych oraz utrzymywanie wysokiej przepustowości. Podczas testowania w klastrze składającym się z jednego węzła graphd i trzech węzłów storaged bazy danych o rozmiarze 632 GB, obejmującej grafikę z 1,2 miliarda węzłów i 8,4 miliarda krawędzi, opóźnienia były na poziomie kilku milisekund, a przepustowość wyniosła do 140 tysięcy zapytań na sekundę.
- Linowa skalowalność.
- Język zapytań podobny do SQL, wystarczająco potężny i prosty w użyciu. Obsługiwane są takie operacje jak GO (dwukierunkowe przechodzenie węzłów grafu), GROUP BY, ORDER BY, LIMIT, UNION, UNION DISTINCT, INTERSECT, MINUS, PIPE (wykorzystanie wyniku z poprzedniego zapytania). Obsługiwane są indeksy oraz definowane przez użytkownika zmienne.
- Zapewnienie wysokiej dostępności oraz odporności na awarie.
- Wsparcie dla tworzenia migawkowych stanów bazy danych w celu uproszczenia tworzenia kopii zapasowych.
- Gotowość do zastosowań przemysłowych (już wykorzystywana w infrastrukturze firm JD, Meituan i Xiaohongshu).
- Możliwość zmiany schematu przechowywania i aktualizacji danych bez zatrzymywania ani wpływu na trwające operacje.
- Wsparcie dla TTL w celu ograniczenia czasu życia danych.
- Komendy do zarządzania ustawieniami i hostami przechowywania.
- Narzędzia do zarządzania zadaniami i planowania uruchamiania zadań (w tej chwili wspierane są zadania COMPACT i FLUSH).
- Operacje wyszukiwania pełnej i najkrótszej drogi między zadanymi wierzchołkami.
- Interfejs OLAP do integracji z zewnętrznymi platformami analitycznymi.
- Narzędzia do importu danych z plików CSV lub z Spark.
- Eksport metryk do monitorowania za pomocą Prometheus i Grafana.
- Interfejs webowy Nebula Graph Studio do wizualizacji operacji na grafie, nawigacji po grafie, projektowania schematów przechowywania i ładowania danych.
W nowym wydaniu:
- Dodano wsparcie dla funkcji extract() do wyodrębniania podciągu, odpowiadającego danemu wyrażeniu.
- Optymalizowane ustawienia w pliku konfiguracyjnym.
- Dodano zasady optymalizacji do usuwania zbędnego operatora AppendVertices oraz wyłączenia stosowania filtrów krawędzi i węzłów.
- Zredukowano objętość danych kopiowanych do operacji JOIN, a także dla operatorów Traverse i AppendVertices.
- Optymalizowana wydajność SHORTEST PATH i SUBGRAPH.
- Poprawione zarządzanie pamięcią (zastosowano Arena Allocator).
Źródło: opennet.ru
