Przedstawiono beta-wersję silnika przechowywania OrioleDB beta7 oraz opublikowano wyniki nowych testów, które pokazują znaczną poprawę wydajności w porównaniu do tradycyjnego PostgreSQL. W wersji beta7 wprowadzono optymalizacje mające na celu poprawę wydajności w warunkach obciążenia wielowątkowego oraz przyspieszenie operacji odczytu i zapisu. Pierwsze stabilne wydanie OrioleDB planowane jest na 2025 rok. Silnik został napisany w języku C i jest dystrybuowany na licencji PostgreSQL, podobnej do licencji BSD i MIT.
Projekt OrioleDB rozwija alternatywny silnik przechowywania dla PostgreSQL, zaprojektowany w celu przezwyciężenia ograniczeń standardowego mechanizmu przechowywania i zwiększenia ogólnej efektywności systemu. Na przykład, OrioleDB pozwala na obejście konieczności okresowego wykonywania operacji VACUUM w celu usuwania nieużywanych danych, dzięki wdrożeniu mechanizmu MVCC (Multi-Version Concurrency Control) opartego na logach wycofania (undo logs), działających na poziomie poszczególnych bloków i wierszy, a także systemu automatycznego łączenia stron zawierających dane. OrioleDB wykorzystuje również 64-bitowe identyfikatory transakcji, co rozwiązuje problem przepełnienia liczników.
Aby uprościć wykorzystanie w rozproszonych systemach i zrównoleglić operacje w OrioleDB, zorganizowano prowadzenie dziennika WAL transakcji na poziomie wierszy. Podczas wykonywania operacji UPDATE możliwe jest zastępowanie danych w miejscu (bez uwalniania bieżącego rekordu i tworzenia nowego), co pozytywnie wpływa na wydajność. W OrioleDB zrealizowano również takie możliwości, jak odczyt stron z danymi bez użycia blokad, bezpośrednie powiązanie stron w pamięci operacyjnej ze stronami w pamięci trwałej, zastosowanie mechanizmu CoW (copy-on-write) podczas ustalania punktów kontrolnych w celu tworzenia spójnych zrzutów w dowolnym momencie, oraz tryb przechowywania danych w skompresowanej formie przy użyciu algorytmu ZSTD.
W siódmej wersji beta OrioleDB zauważono ograniczenia, takie jak możliwość używania wyłącznie indeksów w formacie B-drzewo (wsparcie dla wszystkich typów indeksów PostgreSQL pojawi się w przyszłości), a także brak wsparcia dla wstępnie przygotowanych transakcji (PREPARE TRANSACTION) oraz polecenia „REINDEX” w trybie „CONCURRENTLY”. OrioleDB wdrożono w formie rozszerzenia, które wymaga zmian w głównym kodzie PostgreSQL.
W testach wydajności TPC-C, które modelują obciążenie przetwarzania transakcyjnego w warunkach rzeczywistych, siódma wersja beta OrioleDB wykazała znaczną przewagę nad standardowym silnikiem PostgreSQL. Testowanie przeprowadzono z różną liczbą jednocześnie działających klientów, aby ocenić skalowalność i wydajność systemu przy rosnącym obciążeniu.
W testach oceniających przepustowość transakcji, silnik OrioleDB osiągnął wyższą przepustowość, mierzona w transakcjach na minutę (tpmC). Wraz ze wzrostem liczby klientów wydajność OrioleDB nadal rosła liniowo, podczas gdy w silniku Heap w PostgreSQL zauważono tendencję do stagnacji, a nawet spadku po osiągnięciu pewnego progu.



W testach czasu reakcji średni czas odpowiedzi transakcji w OrioleDB był znacząco niższy w porównaniu do PostgreSQL. Tak więc, systemy oparte na OrioleDB mogą obsługiwać więcej transakcji w tym samym okresie czasu, zapewniając szybsze przetwarzanie zapytań. Przy pomiarze wykorzystania zasobów, silnik OrioleDB wykazał bardziej efektywne wykorzystanie CPU i pamięci, dzięki zoptymalizowanemu zarządzaniu zasobami.
Źródło: opennet.ru
