SQLite-utvecklare utvecklar HC-tree-backend med stöd för parallellskrivning

SQLite-projektutvecklare har börjat testa en experimentell HCtree-backend som stöder radnivålåsning och ger en hög nivå av parallellisering vid bearbetning av frågor. Den nya backend är inriktad på att förbättra effektiviteten av att använda SQLite i klient-serversystem som måste behandla ett stort antal samtidiga skrivförfrågningar till databasen.

B-trädstrukturerna som används i SQLite för att lagra data är inte designade för denna typ av belastning, vilket begränsar SQLite att skriva till endast en tråd. Som ett experiment började utvecklarna utveckla en alternativ lösning som använder HC-trädstrukturer för lagring, som är mer lämpade för att parallellisera skrivoperationer.

För att tillåta flera operationer att köras samtidigt använder en HCtree-post en transaktionspartitioneringsmekanism som använder sidnivålåsning och liknar MVCC (Multi-Version Concurrency Control) men använder transaktionskontroller baserade på nycklar och nyckelintervall istället för siduppsättningar. Läs- och skrivoperationer utförs i samband med en ögonblicksbild av databasen, vars ändringar blir synliga i huvuddatabasen först efter att transaktionen är slutförd.

Kunder kan använda tre öppna transaktionsoperationer:

  • "BÖRJA" – transaktioner tar inte hänsyn till åtkomstdata från andra klienter. Om skrivoperationer utförs inom en transaktion, kan transaktionen utföras endast om det under dess exekvering inte fanns några andra skrivoperationer i databasen.
  • "BEGIN CONCURRENT" - transaktioner samlar in information om åtkomst för andra klienter. Om skrivoperationer utförs inom en transaktion kan transaktionen utföras om andra transaktioner har utförts i databasen sedan ögonblicksbilden skapades.
  • "BÖRJA EXKLUSIVT" - efter att ha öppnat en transaktion blockerar den operationer från andra transaktioner tills den är slutförd.

HCtree stöder master-slave replikering, vilket gör att du kan migrera transaktioner till en annan databas och hålla sekundära databaser synkroniserade med den primära databasen. HCtree tar också bort begränsningen för databasstorlek - istället för 32-bitars datasidaidentifierare använder HCtree 48-bitars, vilket ökar den maximala databasstorleken från 16 tebibyte till 1 exbibyte (miljoner tebibyte). Det förväntas att prestanda för SQLite med HCtree-backend inte kommer att vara lägre än den klassiska enkeltrådiga backend. SQLite-klienter med HCtree-stöd kommer att kunna komma åt både HC-trädbaserade databaser och äldre SQLite-databaser.

Källa: opennet.ru

Lägg en kommentar