Vývojári projektu SQLite začali testovanie experimentálneho backendu HCtree, ktorý podporuje zamykanie na úrovni riadkov (row) a zabezpečuje vysokú úroveň paralelizácie pri spracovaní požiadaviek. Nový backend má za cieľ zlepšiť efektívnosť využitia SQLite v klient-serverových systémoch, kde je potrebné spracovávať veľké množstvo súbežných požiadaviek na zápis do DB.
Štruktúry b-tree, pôvodne používané v SQLite na ukladanie údajov, nie sú prispôsobené na takýto typ zaťaženia, čo obmedzuje SQLite na zápis len v jednom vlákne. Ako experiment sa vývojári začali zaoberať alternatívnym riešením, ktoré používa na ukladanie štruktúru HC-tree, vhodnejšiu na paralelizáciu zapisovacích operácií.
Na organizáciu súbežného vykonávania viacerých operácií v HCtree zapisuje sa mechanizmus rozdelenia transakcií, ktorý používa zamykanie na úrovni strán a je podobný MVCC (multi-version concurrency control), ale používa kontroly transakcií založené na kľúčoch a intervaloch kľúčov namiesto množín strán. Operácie čítania a zápisu sú vykonávané v súvislosti so snapshotom DB, ktorých zmeny sú viditeľné v hlavnej DB len po dokončení transakcie.
Klienti môžu používať tri operácie na otvorenie transakcií:
- „BEGIN“ — transakcie nezohľadňujú údaje o prístupe iných klientov. V prípade vykonávania zápisových operácií v rámci transakcie môže byť transakcia potvrdená iba ak sa počas jej vykonávania nevyskytli iné zápisové operácie do DB.
- „BEGIN CONCURRENT“ — transakcie zhromažďujú informácie o prístupe iných klientov. V prípade vykonávania zápisových operácií v rámci transakcie môže byť transakcia potvrdená, ak od vytvorenia snapshotu v DB boli potvrdené iné transakcie.
- „BEGIN EXCLUSIVE“ — po otvorení transakcie blokuje operácie z iných transakcií až do jej dokončenia.
HCtree podporuje replikáciu v štýle „master-slave“, ktorá umožňuje prenášať transakcie do inej databázy a udržiavať sekundárne databázy v stave synchronizovanom s hlavnou databázou. HCtree tiež odstraňuje obmedzenie veľkosti databázy — namiesto 32-bitových identifikátorov stránok dát v HCtree sa používajú 48-bitové, čo zvyšuje maximálnu veľkosť databázy z 16 tebibyte na 1 exbibyt (milión tebibyte). Očakáva sa, že výkon SQLite s backendom HCtree nebude nižší ako klasický jednovláknový backend. Klienti SQLite s podporou HCtree môžu pristupovať k databáze založenej na štruktúre HC-tree, ako aj k starým databázam SQLite.
Zdroj: opennet.ru
