SQLite-ontwikkelaars ontwikkelen HC-tree-backend met ondersteuning voor parallelle schrijfbewerkingen

SQLite-projectontwikkelaars zijn begonnen met het testen van een experimentele HCtree-backend die vergrendeling op rijniveau ondersteunt en een hoog niveau van parallellisatie biedt bij het verwerken van query's. De nieuwe backend is gericht op het verbeteren van de efficiëntie van het gebruik van SQLite in client-serversystemen die een groot aantal gelijktijdige schrijfverzoeken naar de database moeten verwerken.

De b-tree-structuren die standaard in SQLite worden gebruikt om gegevens op te slaan, zijn niet ontworpen voor dit type belasting, waardoor SQLite slechts naar één thread kan schrijven. Bij wijze van experiment begonnen de ontwikkelaars een alternatieve oplossing te ontwikkelen die gebruikmaakt van HC-boomstructuren voor opslag, die geschikter zijn voor het parallelliseren van schrijfbewerkingen.

Om meerdere bewerkingen tegelijkertijd uit te voeren, gebruikt een HCtree-record een transactiepartitioneringsmechanisme dat gebruikmaakt van vergrendeling op paginaniveau en vergelijkbaar is met MVCC (Multi-Version Concurrency Control), maar gebruikt transactiecontroles op basis van sleutels en sleutelbereiken in plaats van paginasets. Lees- en schrijfbewerkingen worden uitgevoerd in verband met een database-snapshot, waarvan wijzigingen pas zichtbaar worden in de hoofddatabase nadat de transactie is voltooid.

Klanten kunnen drie open transactiebewerkingen gebruiken:

  • “BEGIN” – transacties houden geen rekening met toegangsgegevens van andere klanten. Als er binnen een transactie schrijfbewerkingen worden uitgevoerd, kan de transactie alleen worden doorgevoerd als er tijdens de uitvoering ervan geen andere schrijfbewerkingen in de database hebben plaatsgevonden.
  • "BEGIN CONCURRENT" - transacties verzamelen informatie over de toegang van andere klanten. Als er binnen een transactie schrijfbewerkingen worden uitgevoerd, kan de transactie worden vastgelegd als er sinds het maken van de momentopname andere transacties in de database zijn vastgelegd.
  • “BEGIN EXCLUSIEF” - na het openen van een transactie worden de bewerkingen van andere transacties geblokkeerd totdat deze zijn voltooid.

HCtree ondersteunt master-slave-replicatie, waardoor u transacties naar een andere database kunt migreren en secundaire databases gesynchroniseerd kunt houden met de primaire database. HCtree verwijdert ook de beperking op de databasegrootte - in plaats van 32-bits gegevenspagina-ID's gebruikt HCtree 48-bits, waardoor de maximale databasegrootte toeneemt van 16 tebibytes naar 1 exbibyte (miljoen tebibytes). De verwachting is dat de prestaties van SQLite met de HCtree-backend niet lager zullen zijn dan die van de klassieke single-threaded backend. SQLite-clients met HCtree-ondersteuning hebben toegang tot zowel op HC-tree gebaseerde databases als oudere SQLite-databases.

Bron: opennet.ru

Voeg een reactie