Zhvilluesit e OrioleDB propozojnë përmirësimin e API për motorët alternativë PostgreSQL

Zhvilluesit e OrioleDB analizuan gjendjen aktuale të API-t të nivelit të ulët, të përdorur për aksesin e zgjerimeve në tabela dhe indekse në PostgreSQL (Table/Index Access Method (AM) API), dhe propozuan mënyra për përmirësimin e tij. Që nga shfaqja e këtij API në PostgreSQL 12, zhvilluesit morën mundësinë të krijojnë mekanizma alternativë për ruajtjen e të dhënave. Megjithatë, pavarësisht nga ekzistenca e këtij API dhe kufizimeve të njohura të mekanizmit të ruajtjes të integruar, akoma nuk kanë lindur motorë të ruajtjes transaksionale plotë-funksionalë, të realizuar gjithmonë në formë zgjerimesh.

Funksionet më të kërkuara për motorët alternativë të tabelave PostgreSQL janë:

  • Implementime alternative tĂ« MVCC, pĂ«r shembull, ruajtjet tĂ« bazuara nĂ« ditarin UNDO.
  • Tabela tĂ« organizuara nĂ« indeks, ku indeksi nuk Ă«shtĂ« njĂ« shtesĂ« e opcionale pĂ«r tabelĂ«n qĂ« shpejton kĂ«rkesat, por pĂ«rfaqĂ«son strukturĂ«n kryesore tĂ« tĂ« dhĂ«nave, nĂ« tĂ« cilĂ«n ruhen tĂ« dhĂ«nat e tabelĂ«s.

Modifikimet, të nevojshme në API-në Table/Index AM për të mbështetur implementimet alternative të MVCC, shqyrtohen me referencë në zgjerimin OrioleDB, që është zhvilluar për të eliminuar të metat e njohura të mekanizmit të ruajtjes të integruar të PostgreSQL. Problemi është se për integrimin e plotë të OrioleDB me PostgreSQL kërkohen ndryshime në kodin e PostgreSQL, çka e komplikon zbatimin e projektit dhe thekson nevojën për modernizimin e aktualit API Table AM.

API Table AM nuk imponon drejtpërdrejt mënyrën e implementimit të MVCC. Megjithatë, API Table AM dhe API Index AM bëjnë këtë supozim: çdo TID (Tuple/row Identifier) është ose indeksohet nga të gjitha indekset, ose nuk indeksohet fare. Madje edhe nëse Index AM ka disa referenca për një TID (p.sh., GIN), të gjitha këto referenca duhet të korrespondohen me një vlerë të indeksuar të njëjtë.

Zhvilluesit e OrioleDB propozojnë përmirësimin e API për motorët alternativë PostgreSQL

Ky parim Ă«shtĂ« kritikuar pĂ«r rritjen e numrit tĂ« operacioneve tĂ« shkrimit («write amplification») — nĂ«se azhurnohet njĂ« atribut i indeksuar, Ă«shtĂ« e nevojshme tĂ« azhurnohet çdo indekse nĂ« tabelĂ«. NĂ«se Ă«shtĂ« e nevojshme tĂ« shfrytĂ«zohen plotĂ«sisht pĂ«rfitimet e ditarit UNDO ose tĂ« ndĂ«rtohet njĂ« metodĂ« tjetĂ«r ruajtjeje pa «pĂ«rforcim tĂ« shkrimit» (p.sh., metoda WARM), Ă«shtĂ« e nevojshme tĂ« shkelet ky supozim.

Zhvilluesit e OrioleDB propozojnë përmirësimin e API për motorët alternativë PostgreSQL

Table AM i bazuar në UNDO, që nuk do të shkelë këtë supozim, i ngjan metodës ekzistuese HOT (Heap-Only Tuples), përveç që versionet e vjetra të rreshtave ruhen në ditarin UNDO dhe nuk duhet të ngjiten në të njëjtën faqe. Por, sipas autorëve, këtij avantazhi i mungon e drejta për të justifikuar ekzistencën e një Table AM të veçantë.

Kufizimet praktike të API-t aktual:

  • GjatĂ« azhurnimit tĂ« rreshtit tĂ« tabelĂ«s, indekset azhurnohen sipas parimit «tĂ« gjitha ose asgjë».
  • Mungesa nĂ« API-nĂ« Index AM tĂ« mundĂ«sisĂ« pĂ«r fshirjen e pikave tĂ« caktuara tĂ« caktueseve. Tani Ă«shtĂ« e mundur tĂ« fshihen rreshtat nga indekset nĂ« mĂ«nyrĂ« masive pĂ«rmes metodave ambulkdelete dhe amvacuumcleanup. PĂ«rpjekja pĂ«r tĂ« realizuar fshirjen e pikave tĂ« caktuara pĂ«rmes kĂ«tij API do tĂ« sillte efikasitet tĂ« ulĂ«t, pasi shumica e implementimeve aktuale duhet tĂ« skanojnĂ« tĂ« gjithĂ« indeksin. PĂ«rveç kĂ«saj, API nuk lejon tĂ« specifikohet se cilat nga caktuese tĂ« lidhur me tĂ« njĂ«jtin TID duhet tĂ« fshihen. Ai mund tĂ« fshijĂ« vetĂ«m tĂ« gjithĂ«.
  • Indekset tani i referohen rreshtave tĂ« tabelĂ«s sipas numrit tĂ« bllokut (32 bit) dhe numrit tĂ« offsetit (16 bit). Dhe vetĂ«m 11 bit tĂ« numrit tĂ« offsetit mund tĂ« kalohen sigurtĂ«sisht nga TID i tabelĂ«s nĂ« tĂ« gjitha metodat e aksesit tĂ« indeksit. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, implementimet alternative tĂ« MVCC mund tĂ« kenĂ« nevojĂ« pĂ«r tĂ« ruajtur ngarkesĂ« shtesĂ« (payload) sĂ« bashku me TID. PĂ«r shembull, nĂ« OrioleDB kĂ«rkohen njĂ« ose disa bit pĂ«r tĂ« realizuar indekset «delete-marking» apo informacionin e plotĂ« pĂ«r dukshmĂ«rinĂ«.

Janë propozuar dy mënyra për të kapërcyer kufizimet në praktikë:

    Qasja 1: API Index AM ofron mundësi për implementimin alternativ të MVCC.

    NdĂ«rsa Table AM vazhdon tĂ« pĂ«rgjigjet pĂ«r tĂ« gjithĂ« komponentĂ«t e MVCC, Index AM ofron mundĂ«sitĂ« e nevojshme pĂ«r implementimin alternativ tĂ« MVCC, pikĂ«risht: ruajtjen e ngarkesĂ«s sĂ« pĂ«rdoruesit (payload) sĂ« bashku me TID, metodĂ«n e fshirjes sĂ« pikave dhe madje metodĂ«n e azhornimit tĂ« pikave (nĂ«se TID nĂ« indeks nuk mund tĂ« ndryshohet, ngarkesa e pĂ«rdoruesit – mund tĂ« ndryshohet). PĂ«r mĂ« tepĂ«r, pasi Ă«shtĂ« e nevojshme tĂ« lejohet qĂ« disa caktuese tĂ« indekseve tĂ« referohen nĂ« tĂ« njĂ«jtin TID, metodat e API-t qĂ« pĂ«rdoren gjatĂ« skanimit tĂ« indeksit gjithashtu kanĂ« nevojĂ« pĂ«r pĂ«rditĂ«sim.

    Qasja 2: Indekset që mbështesin MVCC.

    Një alternativë do të ishte të lejohej indekset që mbështesin MVCC. Pra, «executor» (ose ndoshta Table AM) thjesht thërret metodat insert() dhe delete() në Index AM, ndërsa Index AM ofron mundësinë e skanimit duke marrë parasysh MVCC. Kjo do të thjeshtonte në mënyrë të konsiderueshme skanimin duke përdorur vetëm indekset (index-only). Edhe i gjithë Table AM në këtë rast mund të bëhej një shtresë ndërmjetëse, e cila ruan të dhënat në indeks.

    Në diagramin më poshtë është një shembull. Vlera e indeksit 2 përditësohet nga transaksioni 11 nga vlera «A» në vlerën «B». Prandaj, vlera «A» shënohet si xmax == 11, ndërsa vlera «B» shënohet si xmin == 11. Kështu mund të skanohet indeksi 2 dhe të merrni vetëm tuple të dukshme sipas MVCC pa kontrolle në heap. Pastrimi i mbeturinave në indeksin 2 gjithashtu mund të bëhet pa përdorimin e heap.

    Zhvilluesit e OrioleDB propozojnë përmirësimin e API për motorët alternativë PostgreSQL

    Me implementimin e të gjitha risive të përmendura në API-në e metodave të indeksit për qasje, është shumë e pamundur që të përfundojnë të gjitha indiket për mbështetje të gjitha mundësive të reja njëherësh. Më realiste është të lejohet disa realizime për një metodë të vetme qasjeje në indeks. Për shembull, në përveç të B-tree standarde, zgjerimi do të ishte në gjendje të implementonte një B-tree alternativ me mbështetje për MVCC brenda indeksit dhe mbështetje për identifikatorë regjistrimesh në gjatësi të rastësishme.

    Zhvilluesit e OrioleDB propozojnë përmirësimin e API për motorët alternativë PostgreSQL

    Prandaj, propozohet rishikimi jo vetëm i API Table AM, por edhe i API Index AM, i cili ka shërbyer besnikërisht komunitetit PostgreSQL për shumë vjet. Më tepër, propozohet ndarja e Index AM në një shtresë logjike dhe një shtresë implementimi. Kjo arkitekturë e ripensuar do të lejojë PostgreSQL të mbështesë modele të ndryshme ruajtjeje.

    Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster