Zhvilluesit e projektit SQLite filluan testimin e një backend-i eksperimental HCtree, i cili mbështet bllokimin në nivelin e rreshtave (row) dhe siguron një nivel të lartë të paralelizmit gjatë përpunimit të kërkesave. Backend-i i ri synon të rrisë efikasitetin e përdorimit të SQLite në sistemet klient-server, ku duhet të përpunohen shumë kërkesa të njëkohshme për shkruarje në bazën e të dhënave.
Strukturat b-tree, që në fillim ishin përdorur në SQLite për ruajtjen e të dhënave, nuk janë të dizajnuara për këtë lloj ngarkese, çka e kufizon SQLite në mundësinë e shkruarjes vetëm në një rrjedhë. Si një eksperiment, zhvilluesit filluan të zhvillojnë një zgjidhje alternative që përdor strukturën HC-tree për ruajtjen, e cila është më e përshtatshme për paralelizmin e operacioneve të shkruarjes.
Për të organizuar ekzekutimin e shumicës së operacioneve në HCtree, aplikohet një mekanizëm për ndarjen e transaksioneve, i cili përdor bllokime në nivelin e faqeve dhe është i ngjashëm me MVCC (menaxhimi me shumë versione i qasjes konkuruese), por përdor kontrollin e transaksioneve të bazuara në çelësa dhe grupe çelësash në vend të grupeve të faqeve. Operacionet e leximit dhe shkrimit kryhen në lidhje me snapshot-in e DB-së, ndërsa ndryshimet bëhen të dukshme në DB-në kryesore vetëm pas përfundimit të transaksionit.
Klientët mund të përdorin tre operacione për hapjen e transaksioneve:
- «BEGIN» — transaksionet nuk kanë parasysh të dhënat mbi qasjen e klientëve të tjerë. Në rast se gjatë ekzekutimit të operacioneve të shkrimit brenda një transaksioni, transaksioni mund të konfirmohet vetëm nëse gjatë zhvillimit të tij nuk ka pasur operacione të tjera shkrimi në DB.
- «BEGIN CONCURRENT» — transaksionet grumbullojnë informacione mbi qasjen e klientëve të tjerë. Në rast se gjatë ekzekutimit të operacioneve të shkrimit brenda një transaksioni, transaksioni mund të konfirmohet nëse që nga momenti i krijimit të snapshot-it në DB janë konfirmuar transaksione të tjera.
- «FILLON EKSKLUZIV» — pas hapjes transaksioni bllokon operacionet nga transaksione të tjera deri në përfundimin e saj.
HCtree mbështet replikimin në stilin «master-slave», duke lejuar transferimin e transaksioneve në një DB tjetër dhe mbështetje të DB-ve sekondare në një gjendje të sinkronizuar me DB-në kryesore. HCtree gjithashtu heq kufizimin mbi madhësinë e DB-së — në vend të identifikuesve të faqeve të dhënash 32-bit, HCtree përdor identifikues 48-bit, gjë që rrit madhësinë maksimale të DB-së nga 16 tebibajt në 1 eksbibajt (million tebibajt). Pritet që performanca e SQLite me backend-in HCtree të jetë të paktën e njëjtë me backend-in klasik një-fije. Klientët e SQLite me mbështetje për HCtree do të kenë mundësi të qasje në të njëjtën kohë si në DB-në mbi strukturën HC-tree ashtu edhe në DB-të e vjetra SQLite.
Burimi: opennet.ru
