Udviklerne af SQLite-projektet er begyndt at teste en eksperimentel backend, HCtree, som understøtter låsning på række-niveau og sikrer et højt niveau af parallelisering ved behandling af forespørgsler. Den nye backend sigter mod at forbedre effektiviteten af SQLite i klient-serversystemer, hvor der skal behandles et stort antal samtidige databaseanmodninger for skrivning.
B-tree strukturer, der oprindeligt blev brugt i SQLite til at gemme data, er ikke designet til denne type belastning, hvilket begrænser SQLite til at kunne skrive kun i en enkelt tråd. Som et eksperiment begyndte udviklerne at udvikle en alternativ løsning, der bruger HC-tree strukturer til lagring, som er bedre egnet til parallelisering af skriveoperationer.
For at muliggøre samtidig udførelse af flere operationer i HCtree-rekorder anvendes mekanismen til opdeling af transaktioner, der benytter sidetaske-låsninger og ligner MVCC (Multi-Version Concurrency Control), men bruger nøgle- og nøgleintervalbaserede transaktionskontroller i stedet for sidemængder. Læs- og skriveoperationer udføres i tilknytning til en database snapshot, hvis ændringer kun bliver synlige i hoveddatabasen efter afslutningen af transaktionen.
Kunder kan bruge tre operationer til at åbne transaktioner:
- «BEGIN» — transaktioner tager ikke hensyn til adgangsdata fra andre kunder. I tilfælde af at transaktionen udfører skriveoperationer, kan transaktionen kun blive bekræftet, hvis der ikke har været andre skriveoperationer i databasen i løbet af dens udførelse.
- «BEGIN CONCURRENT» — transaktioner indsamler oplysninger om adgang fra andre kunder. I tilfælde af at transaktionen udfører skriveoperationer, kan transaktionen bekræftes, hvis der siden oprettelsen af snapshotet i databasen har været bekræftede andre transaktioner.
- «BEGIN EXCLUSIVE» — efter åbning af transaktionen blokerer den operationer fra andre transaktioner indtil sin afslutning.
HCtree understøtter master-slave replikation, som muliggør overførsel af transaktioner til en anden database og holder sekundære databaser synkroniseret med den primære database. HCtree fjerner også begrænsningen for databasestørrelse — i stedet for 32-bit datalæsnings-id'er anvendes 48-bit i HCtree, hvilket øger den maksimale database størrelse fra 16 tebibyte til 1 eksbibyte (million tebibyte). Det forventes, at ydeevnen i SQLite med HCtree backenden ikke vil være mindre end den klassiske enkeldrejede backend. SQLite-klienter med HCtree-support vil kunne få adgang til både databaser baseret på HC-tree-strukturen samt gamle SQLite-databaser.
Kilde: opennet.ru
