Programiści SQLite rozwijają backend HC-tree z obsługą równoległych operacji zapisu

Twórcy projektu SQLite rozpoczęli testowanie eksperymentalnego backendu HCtree, który wspiera blokady na poziomie wierszy i zapewnia wysoki poziom równoległego przetwarzania zapytań. Nowy backend ma na celu zwiększenie efektywności wykorzystania SQLite w systemach kliencko-serwerowych, które muszą obsługiwać dużą liczbę równoczesnych zapisów do bazy danych.

Struktury b-drzew, które pierwotnie były wykorzystywane w SQLite do przechowywania danych, nie są przystosowane do tego typu obciążenia, co ogranicza SQLite do zapisu tylko w jednym wątku. W ramach eksperymentu, twórcy zaczęli rozwijać alternatywne rozwiązanie, które stosuje strukturę HC-tree, bardziej odpowiednią do równoległego przetwarzania operacji zapisu.

Aby zorganizować równoczesne wykonywanie wielu operacji w HCtree, została zastosowana mechanizm podziału transakcji, wykorzystujący blokady na poziomie stron, podobny do MVCC (wielowersyjnego zarządzania dostępem współbieżnym), jednak oparty na weryfikacjach transakcji w oparciu o klucze i zakresy kluczy, a nie zestawy stron. Operacje odczytu i zapisu są związane z migawką bazy danych, a ich zmiany stają się widoczne w głównej bazie danych dopiero po zakończeniu transakcji.

Klienci mogą korzystać z trzech operacji otwierania transakcji:

  • „BEGIN” — transakcje nie uwzględniają danych o dostępie innych klientów. W przypadku wykonywania operacji zapisu w transakcji, transakcja może zostać zatwierdzona tylko wtedy, gdy w czasie jej trwania nie było innych operacji zapisu w bazie danych.
  • „BEGIN CONCURRENT” — transakcje zbierają informacje o dostępie innych klientów. W przypadku wykonywania operacji zapisu w transakcji, transakcja może zostać zatwierdzona, jeśli od momentu utworzenia migawki w bazie danych zostały zatwierdzone inne transakcje.
  • „BEGIN EXCLUSIVE” — po otwarciu transakcji blokuje operacje z innych transakcji do czasu jej zakończenia.

HCtree obsługuje replikację w stylu „master-slave”, co pozwala na przenoszenie transakcji do innej bazy danych oraz utrzymywanie wtórnych baz danych w stanie zsynchronizowanym z bazą główną. HCtree również znosi ograniczenie dotyczące rozmiaru bazy danych — zamiast 32-bitowych identyfikatorów stron danych, w HCtree stosowane są 48-bitowe, co zwiększa maksymalny rozmiar bazy danych z 16 tebibajtów do 1 eksbibajta (milion tebibajtów). Oczekuje się, że wydajność SQLite z backendem HCtree nie będzie gorsza niż klasycznego jednoprądowego backendu. Klienci SQLite z obsługą HCtree będą mogli uzyskiwać dostęp zarówno do baz danych opartych na strukturze HC-tree, jak i do starych baz danych SQLite.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster