Programiści SQLite opracowują backend drzewa HC z obsługą zapisu równoległego

Twórcy projektów SQLite rozpoczęli testowanie eksperymentalnego backendu HCtree, który obsługuje blokowanie na poziomie wierszy i zapewnia wysoki poziom równoległości podczas przetwarzania zapytań. Nowy backend ma na celu poprawę efektywności wykorzystania SQLite w systemach klient-serwer, które muszą przetwarzać dużą liczbę jednoczesnych żądań zapisu do bazy danych.

Struktury b-tree używane natywnie w SQLite do przechowywania danych nie są zaprojektowane dla tego typu obciążenia, co ogranicza SQLite do zapisu tylko w jednym wątku. W ramach eksperymentu programiści zaczęli opracowywać alternatywne rozwiązanie, które wykorzystuje do przechowywania struktury drzewa HC, które są bardziej odpowiednie do równoległych operacji zapisu.

Aby umożliwić jednoczesne wykonywanie wielu operacji, rekord HCtree wykorzystuje mechanizm partycjonowania transakcji, który wykorzystuje blokowanie na poziomie strony i jest podobny do MVCC (Multi-Version Concurrency Control), ale wykorzystuje sprawdzanie transakcji w oparciu o klucze i zakresy kluczy zamiast zestawów stron. Operacje odczytu i zapisu wykonywane są w powiązaniu z migawką bazy danych, której zmiany stają się widoczne w głównej bazie danych dopiero po zakończeniu transakcji.

Klienci mogą skorzystać z trzech otwartych operacji transakcyjnych:

  • „BEGIN” – transakcje nie uwzględniają danych dostępowych innych klientów. Jeżeli w ramach transakcji wykonywane są operacje zapisu, transakcja może zostać zatwierdzona tylko wtedy, gdy w trakcie jej wykonywania nie było żadnych innych operacji zapisu w bazie danych.
  • „BEGIN CONCURRENT” – transakcje zbierają informacje o dostępie innych klientów. Jeśli w ramach transakcji wykonywane są operacje zapisu, transakcja może zostać zatwierdzona, jeśli od czasu utworzenia migawki w bazie danych zatwierdzono inne transakcje.
  • „ROZPOCZNIJ WYŁĄCZNIE” – po otwarciu transakcji blokuje operacje z innych transakcji do czasu jej zakończenia.

HCtree obsługuje replikację master-slave, która umożliwia migrację transakcji do innej bazy danych i utrzymywanie synchronizacji drugorzędnych baz danych z podstawową bazą danych. HCtree usuwa również ograniczenie rozmiaru bazy danych - zamiast 32-bitowych identyfikatorów stron danych, HCtree używa 48-bitowych, 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 niższa od klasycznego backendu jednowątkowego. Klienci SQLite z obsługą HCtree będą mogli uzyskiwać dostęp zarówno do baz danych opartych na drzewie HC, jak i do starszych baz danych SQLite.

Źródło: opennet.ru

Dodaj komentarz