SQLite-prosjektutviklere har begynt å teste den eksperimentelle HCtree-backend-en, som støtter låsing på radnivå og gir et høyt nivå av parallellisme i spørrebehandling. Den nye backend-en tar sikte på å forbedre effektiviteten til SQLite i klient-server-systemer som håndterer et stort antall samtidige databaseskriveforespørsler.
B-trestrukturene som opprinnelig ble brukt i SQLite for datalagring er ikke designet for denne typen arbeidsmengde, noe som begrenser SQLite til enkelttrådede skrivinger. Som et eksperiment begynte utviklerne å utvikle en alternativ løsning ved bruk av HC-trestrukturer for lagring, som er mer egnet for parallellisering av skriveoperasjoner.
For å organisere samtidig utførelse av flere operasjoner bruker HCtree en transaksjonspartisjoneringsmekanisme som benytter sidenivålåser og ligner på MVCC (multi-version concurrency control), men bruker transaksjonskontroller basert på nøkler og nøkkelområder i stedet for sidesett. Lese- og skriveoperasjoner utføres mot et database-øyeblikksbilde, og endringer i disse blir synlige i hoveddatabasen først etter at transaksjonen er fullført.
Klienter kan bruke tre transaksjonsåpningsoperasjoner:
- "BEGIN" – transaksjoner tar ikke hensyn til tilgangsdata fra andre klienter. Hvis skriveoperasjoner utføres i en transaksjon, kan transaksjonen bare utføres hvis ingen andre skriveoperasjoner ble utført i databasen i løpet av tiden den ble utført.
- "BEGIN CONCURRENT" – transaksjoner samler inn informasjon om tilgang fra andre klienter. Hvis skriveoperasjoner utføres i en transaksjon, kan transaksjonen bli iverksatt hvis andre transaksjoner har blitt iverksatt til databasen siden øyeblikksbildet ble opprettet.
- "BEGIN EXCLUSIVE" – etter å ha åpnet en transaksjon, blokkeres operasjoner fra andre transaksjoner inntil den er fullført.
HCtree støtter master-slave-replikering, slik at transaksjoner kan migreres til en annen database og sekundære databaser holdes synkronisert med primærdatabasen. HCtree fjerner også begrensningen på databasestørrelse – i stedet for 32-bits datasideidentifikatorer bruker HCtree 48-bits, noe som øker den maksimale databasestørrelsen fra 16 tebibyte til 1 exbibyte (én million tebibyte). SQLite-ytelsen med HCtree-backend forventes å være sammenlignbar med en klassisk enkelttrådet backend. SQLite-klienter med HCtree-støtte vil kunne få tilgang til både HC-tree-baserte databaser og eldre SQLite-databaser.
Kilde: opennet.ru
