OrioleDB arendajad pakuvad alternatiivsete PostgreSQL-i mootorite API tÀiustamist

OrioleDB arendajad analĂŒĂŒsisid PostgreSQL-i tabelitele ja indeksitele juurdepÀÀsetavate laienduste jaoks kasutatava madala taseme API praegust olekut ja soovitasid selle tĂ€iustamiseks. Alates sellise API kasutuselevĂ”tust PostgreSQL 12-s on arendajad suutnud luua alternatiivseid andmesalvestusmehhanisme. Siiski, hoolimata selle API olemasolust ja sisseehitatud salvestusmootori teadaolevatest piirangutest, pole ikka veel tĂ€ielikult funktsionaalseid tehingusalvestusmootoreid, mida oleks rakendatud ainult laiendustena.

Alternatiivsete PostgreSQL-i tabelimootorite kÔige populaarsemad funktsioonid on:

  • Alternatiivsed MVCC-rakendused, nĂ€iteks UNDO logipĂ”hised poed.
  • Indeksiga organiseeritud tabelid, kus indeks ei ole tabeli valikuline lisand, mis kiirendab pĂ€ringuid, vaid on esmane andmestruktuur, kuhu tabeli andmed salvestatakse.

Alternatiivsete MVCC rakenduste toetamiseks vajalikke muudatusi Table/Index AM API-s kĂ€sitletakse OrioleDB laienduse poole, mis oli mĂ”eldud sisseehitatud PostgreSQL-i salvestusmootori teadaolevate puuduste kĂ”rvaldamiseks. Probleem on selles, et OrioleDB tĂ€ielik integreerimine PostgreSQL-iga nĂ”uab muudatusi PostgreSQL-koodis, mis raskendab projekti rakendamist ja tĂ”stab esile vajaduse moderniseerida praegust Table AM ​​​​API-d.

Tabel AM ​​API ei mÀÀra otseselt, kuidas MVCC-d tuleks rakendada. Tabeli AM ​​API ja Index AM API eeldavad aga jĂ€rgmist: iga TID (korteeĆŸi/rea identifikaator) on kas kĂ”igi indeksite poolt indekseeritud vĂ”i ĂŒldse mitte indekseeritud. Isegi kui indeksil AM on mitu viidet ĂŒhele TID-le (nt GIN), peavad kĂ”ik need viited olema seotud sama indekseeritud vÀÀrtusega.

 OrioleDB arendajad pakuvad alternatiivsete PostgreSQL-i mootorite API tÀiustamist

Seda pĂ”himĂ”tet on kritiseeritud kirjutamisoperatsioonide arvu suurendamise ("kirjutusvĂ”imenduse") pĂ€rast – ĂŒhe indekseeritud atribuudi uuendamisel tuleb uuendada iga indeksit tabelis. Kui soovite UNDO logi tĂ€ielikult Ă€ra kasutada vĂ”i luua mĂ”ne muu salvestusmeetodi ilma "kirjutusvĂ”imenduseta" (nĂ€iteks meetod WARM), peate selle eelduse murdma.

 OrioleDB arendajad pakuvad alternatiivsete PostgreSQL-i mootorite API tÀiustamist

UNDO-pÔhine tabel AM, mis seda eeldust ei riku, meenutab olemasolevat HOT (Heap-Only Tuples) meetodit, vÀlja arvatud see, et vanad reaversioonid salvestatakse UNDO logi ja need ei pea samale lehele mahtuma. Kuid autorite sÔnul ei piisa sellest eelisest eraldi tabeli AM olemasolu Ôigustamiseks.

Olemasoleva API praktilised piirangud:

  • Tabelirea vĂ€rskendamisel vĂ€rskendatakse indekseid pĂ”himĂ”ttel "kĂ”ik vĂ”i mitte midagi".
  • Index AM API-l puudub vĂ”imalus konkreetseid kortereid valikuliselt kustutada. Praegu on vĂ”imalik indeksitest kortereid hulgi kustutada, kasutades meetodit ambulkdelete ja amvacuumcleanup. Kui proovite selle API kaudu punktkustutusi rakendada, vĂ€heneb tĂ”husus, kuna enamik praeguseid rakendusi peavad skannima kogu indeksi. Lisaks ei vĂ”imalda API teil mÀÀrata, millised samale TID-le viitavad korteeĆŸid tuleks kustutada. Ta saab ainult need kĂ”ik kustutada.
  • Praegu viitavad indeksid tabeli ridadele ploki numbri (32 bitti) ja nihkenumbri (16 bitti) jĂ€rgi. Ja ainult 11 bitti nihkearvust saab ohutult edastada tabelist TID kĂ”igile indeksi juurdepÀÀsumeetoditele. Alternatiivsed MVCC-rakendused vĂ”ivad siiski vajada tĂ€iendavat kasulikku koormust koos TID-ga. NĂ€iteks nĂ”uab OrioleDB ĂŒht vĂ”i mitut bitti, et rakendada "kustutamismĂ€rgistuse" indekseid vĂ”i tĂ€ielikku nĂ€htavuse teavet.

Praktikas pakutakse vĂ€lja kaks vĂ”imalust piirangute ĂŒletamiseks:

    1. lÀhenemisviis: Index AM API pakub vÔimalusi MVCC alternatiivseks rakendamiseks.

    Kuigi tabel AM vastutab jÀtkuvalt kÔigi MVCC komponentide eest, pakub Index AM vajalikke vÔimalusi MVCC alternatiivseks juurutamiseks, nimelt: kasutaja kasuliku koormuse salvestamine koos TID-ga, punktide kustutamise meetod ja isegi punkti vÀrskendamise meetod (kui indeksi TID-d ei saa muuta, saab kasutaja kasulikku koormust). Lisaks, kuna samale TID-le tuleb lubada viidata mitmel indeksikorpusel, tuleb uuendada ka indeksi skaneerimisel kasutatavaid API meetodeid.

    2. lÀhenemisviis: MVCC-teadlikud indeksid.

    Alternatiiviks oleks MVCC-d toetavate indeksite lubamine. See tÀhendab, et "tÀitur" (vÔi vÔib-olla tabel AM) kutsub lihtsalt Index AM-i meetodeid insert() ja delete(), samas kui Index AM pakub MVCC-teadlikke skannimisvÔimalusi. See muudaks ainult registripÔhise skannimise palju lihtsamaks. Isegi kogu AM-tabel vÔib muutuda vahekihiks, mis salvestab andmeid indeksis.

    Allolev diagramm nĂ€itab nĂ€idet. Indeksi 2 vÀÀrtust vĂ€rskendatakse tehinguga 11 vÀÀrtuselt "A" vÀÀrtusele "B". SeetĂ”ttu on vÀÀrtus "A" tĂ€histatud kui xmax == 11 ja vÀÀrtus "B" on tĂ€histatud kui xmin == 11. Nii saab indeksit 2 skannida ja ilma kuhjade kontrollimiseta saab MVCC-ga kooskĂ”las ilma vaadata ainult nĂ€htavaid kortereid. Indeks 2 prĂŒgivedu saab teostada ka ilma hunnikut kasutamata.

     OrioleDB arendajad pakuvad alternatiivsete PostgreSQL-i mootorite API tÀiustamist

    KĂ”igi ĂŒlaltoodud uuendustega indeksi juurdepÀÀsumeetodite API-s on ebatĂ”enĂ€oline, et kĂ”iki indekseid saab ĂŒheaegselt vĂ€rskendada, et toetada kĂ”iki uusi funktsioone. Reaalsem on lubada ĂŒhe indeksi juurdepÀÀsumeetodi jaoks mitut rakendust. NĂ€iteks saab laiendus lisaks tavalisele B-puule rakendada alternatiivset B-puud, millel on indeksi sees MVCC tugi ja suvalise pikkusega kirjeidentifikaatorite tugi.

     OrioleDB arendajad pakuvad alternatiivsete PostgreSQL-i mootorite API tÀiustamist

    Seega tehakse ettepanek vaadata ĂŒle mitte ainult Table AM ​​​​API, vaid ka Index AM API, mis on PostgreSQL-i kogukonda aastaid hĂ€sti teenindanud. Lisaks tehakse ettepanek jagada indeks AM loogiliseks kihiks ja rakenduskihiks. See ĂŒmberkujundatud arhitektuur vĂ”imaldab PostgreSQL-il toetada mitut salvestusmudelit.

    Allikas: opennet.ru

Lisa kommentaar