SQLite kūrėjai kuria HC-tree backend palaikydami lygiagretų rašymą

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

Добавить комментарий