Ang mga developer ng SQLite ay bumuo ng HC-tree backend na may suporta para sa mga parallel na pagsusulat

Sinimulan ng mga developer ng proyekto ng SQLite na subukan ang isang pang-eksperimentong HCtree backend na sumusuporta sa row-level na pag-lock at nagbibigay ng mataas na antas ng parallelization kapag nagpoproseso ng mga query. Ang bagong backend ay naglalayong pahusayin ang kahusayan ng paggamit ng SQLite sa mga client-server system na kailangang magproseso ng malaking bilang ng sabay-sabay na mga kahilingan sa pagsulat sa database.

Ang mga istruktura ng b-tree na katutubong ginagamit sa SQLite upang mag-imbak ng data ay hindi idinisenyo para sa ganitong uri ng pag-load, na naglilimita sa SQLite na magsulat sa isang thread lamang. Bilang isang eksperimento, nagsimula ang mga developer na bumuo ng alternatibong solusyon na gumagamit ng mga istruktura ng HC-tree para sa pag-iimbak, na mas angkop para sa parallelizing write operations.

Upang payagan ang maramihang mga operasyon na tumakbo nang sabay-sabay, ang isang HCtree record ay gumagamit ng mekanismo ng paghahati ng transaksyon na gumagamit ng page-level na pag-lock at katulad ng MVCC (Multi-Version Concurrency Control) ngunit gumagamit ng mga pagsusuri sa transaksyon batay sa mga key at key range sa halip na mga page set. Ang mga operasyon sa pagbasa at pagsulat ay isinasagawa kaugnay ng isang snapshot ng database, ang mga pagbabago na makikita lamang sa pangunahing database pagkatapos makumpleto ang transaksyon.

Maaaring gumamit ang mga kliyente ng tatlong bukas na operasyon ng transaksyon:

  • β€œBEGIN”—hindi isinasaalang-alang ng mga transaksyon ang data ng pag-access ng ibang mga kliyente. Kung isinagawa ang mga operasyon sa pagsulat sa loob ng isang transaksyon, ang transaksyon ay maaaring gawin lamang kung sa panahon ng pagpapatupad nito ay walang ibang mga operasyon sa pagsulat sa database.
  • "BEGIN CONCURRENT" - kinokolekta ng mga transaksyon ang impormasyon tungkol sa pag-access ng ibang mga kliyente. Kung isinagawa ang mga operasyon sa pagsulat sa loob ng isang transaksyon, maaaring gawin ang transaksyon kung ang iba pang mga transaksyon ay ginawa sa database mula noong ginawa ang snapshot.
  • "BEGIN EXCLUSIVE" - pagkatapos magbukas ng isang transaksyon, hinaharangan nito ang mga operasyon mula sa iba pang mga transaksyon hanggang sa ito ay makumpleto.

Sinusuportahan ng HCtree ang master-slave replication, na nagbibigay-daan sa iyong mag-migrate ng mga transaksyon sa isa pang database at panatilihing naka-sync ang mga pangalawang database sa pangunahing database. Tinatanggal din ng HCtree ang limitasyon sa laki ng database - sa halip na 32-bit na data page identifier, ang HCtree ay gumagamit ng 48-bit na mga, na nagpapataas ng maximum na laki ng database mula 16 tebibytes hanggang 1 exbibyte (milyong tebibytes). Inaasahan na ang pagganap ng SQLite na may HCtree backend ay hindi bababa sa klasikong single-threaded backend. Ang mga kliyente ng SQLite na may suporta sa HCtree ay magagawang ma-access ang parehong mga database na nakabatay sa HC-tree at mga legacy na database ng SQLite.

Pinagmulan: opennet.ru

Magdagdag ng komento