SQLite projekto kūrėjai pradėjo bandyti eksperimentinę HCtree vidinę sistemą, kuri palaiko užrakinimą eilutės lygiu ir užtikrina aukštą lygiagretumo lygį apdorojant užklausas. Nauja backend skirta pagerinti SQLite naudojimo efektyvumą kliento-serverio sistemose, kurios turi apdoroti daug vienu metu pateikiamų duomenų bazės rašymo užklausų.
B-medžio struktūros, natūraliai naudojamos SQLite duomenims saugoti, nėra skirtos tokio tipo apkrovai, todėl SQLite gali rašyti tik į vieną giją. Kaip eksperimentą kūrėjai pradėjo kurti alternatyvų sprendimą, kuriame saugojimui naudojamos HC-medžio struktūros, kurios labiau tinka rašymo operacijoms lygiagretinti.
Kad vienu metu būtų vykdomos kelios operacijos, HCtree įrašas naudoja operacijų skaidymo mechanizmą, kuris naudoja puslapio lygio užrakinimą ir yra panašus į MVCC (kelių versijų lygiagretumo valdymą), bet naudoja operacijų patikrinimus, pagrįstus raktais ir raktų diapazonais, o ne puslapių rinkiniais. Skaitymo ir rašymo operacijos atliekamos kartu su duomenų bazės momentine nuotrauka, kurios pakeitimai pagrindinėje duomenų bazėje tampa matomi tik užbaigus operaciją.
Klientai gali naudoti tris atviras operacijos operacijas:
- „PRADĖTI“ – atliekant operacijas neatsižvelgiama į kitų klientų prieigos duomenis. Jei transakcijos metu atliekamos rašymo operacijos, operacija gali būti įvykdyta tik tuo atveju, jei jos vykdymo metu duomenų bazėje nebuvo kitų įrašymo operacijų.
- „PRADĖTI LYGIAUTIS“ – operacijos renka informaciją apie kitų klientų prieigą. Jei operacijos metu atliekamos rašymo operacijos, operacija gali būti atlikta, jei nuo momentinės nuotraukos sukūrimo duomenų bazėje buvo įvykdytos kitos operacijos.
- „BEGIN EXCLUSIVE“ – atidarius operaciją, ji blokuoja kitų operacijų operacijas, kol ji bus baigta.
HCtree palaiko pagrindinio-pavaldžio replikaciją, kuri leidžia perkelti operacijas į kitą duomenų bazę ir sinchronizuoti antrines duomenų bazes su pagrindine duomenų baze. HCtree taip pat pašalina duomenų bazės dydžio apribojimą – vietoj 32 bitų duomenų puslapių identifikatorių, HCtree naudoja 48 bitų, todėl maksimalus duomenų bazės dydis nuo 16 tebibaitų padidėja iki 1 eksbibaitų (milijonas tebibaitų). Tikimasi, kad SQLite su HCtree backend našumas bus ne mažesnis nei klasikinės vienos gijos backend. SQLite klientai su HCtree palaikymu galės pasiekti tiek HC-medžiu pagrįstas duomenų bazes, tiek senąsias SQLite duomenų bazes.
Šaltinis: opennet.ru