Ny mpamorona OrioleDB dia manolotra ny fanatsarana ny API ho an'ny motera PostgreSQL hafa

Ny mpamorona OrioleDB dia nandinika ny toetry ny API ambany indrindra ampiasaina amin'ny fanitarana hidirana amin'ny latabatra sy ny fanondroana ao amin'ny PostgreSQL (Table/Index Access Method (AM) API) ary nanolotra fomba hanatsarana izany. Hatramin'ny nampidirana ny API toy izany tao amin'ny PostgreSQL 12, ny mpamorona dia afaka namorona rafitra fitahirizana angon-drakitra hafa. Na izany aza, na dia eo aza ny fisian'ity API ity sy ny fetra fantatra amin'ny maotera fitahirizana naorina, dia mbola tsy misy motera fitahirizana transactional miasa tanteraka ampiharina ho fanitarana fotsiny.

Ny endri-javatra malaza indrindra ho an'ny milina latabatra PostgreSQL hafa dia:

  • Fampiharana MVCC hafa, toy ny fivarotana UNDO mifototra amin'ny log.
  • Tabilao voarindra fanondro, izay tsy fanampim-panampiana tsy voatery ho an'ny latabatra manafaingana ny fanontaniana ny fanondroana, fa ny firafitry ny angona voalohany itehirizana ny angon'ny latabatra.

Ny fanovana ilaina ao amin'ny Table / Index AM API hanohanana ny fampiharana MVCC hafa dia resahina amin'ny maso mankany amin'ny fanitarana OrioleDB, izay natao hamahana ireo lesoka fantatra amin'ny motera fitehirizana PostgreSQL naorina. Ny olana dia ny fampidirana feno ny OrioleDB miaraka amin'ny PostgreSQL dia mitaky fanovana amin'ny kaody PostgreSQL, izay manasarotra ny fampiharana ny tetikasa ary manasongadina ny filàna fanavaozana ny Table AM ​​​​API ankehitriny.

Ny Table AM ​​​​API dia tsy mandidy mivantana ny fomba fampiharana ny MVCC. Na izany aza, ny Table AM ​​API sy Index AM API dia manao izao fiheverana manaraka izao: ny TID tsirairay (Tuple/row Identifier) ​​​​dia indexed amin'ny indexes rehetra na tsy misy indexed mihitsy. Na dia manana references maromaro amin'ny TID tokana aza ny Index AM (oh: GIN), ireo fanondroana rehetra ireo dia tsy maintsy sari-tany amin'ny sanda misy tondro mitovy.

 Ny mpamorona OrioleDB dia manolotra ny fanatsarana ny API ho an'ny motera PostgreSQL hafa

Ity fitsipika ity dia voatsikera noho ny fampitomboana ny isan'ny asa fanoratana ("manoratra amplification") - raha misy fanavaozana ny toetra misy index, dia tsy maintsy havaozina ny index rehetra ao amin'ny latabatra. Raha te hanararaotra tanteraka ny UNDO log ianao, na hanorina fomba fitahirizana hafa tsy misy "fanamafisana sora-baventy" (toy ny fomba WARM), dia mila manapaka io fiheverana io ianao.

 Ny mpamorona OrioleDB dia manolotra ny fanatsarana ny API ho an'ny motera PostgreSQL hafa

Ny UNDO-based Table AM ​​​​izay tsy mandika an'io fiheverana io dia mitovy amin'ny fomba HOT (Heap-Only Tuples) efa misy, afa-tsy ny dikan-teny taloha dia voatahiry ao amin'ny log UNDO ary tsy voatery hifanaraka amin'ny pejy iray ihany. Saingy, araka ny filazan'ny mpanoratra, io tombony io dia tsy ampy hanamarinana ny fisian'ny latabatra AM manokana.

Famerana azo ampiharina amin'ny API efa misy:

  • Rehefa nohavaozina ny laharan-databatra iray, dia havaozina amin'ny fototra rehetra na tsia ny fanondroana.
  • Ny Index AM API dia tsy manana fahafahana mamafa ny tuple manokana. Amin'izao fotoana izao dia azo atao ny mamafa tuples amin'ny indexes amin'ny fampiasana ny fomba ambulkdelete sy amvacuumcleanup. Ny fiezahana hampihatra ny famafana toerana amin'ny alalan'ity API ity dia mety hiteraka fahombiazana ambany, satria ny ankamaroan'ny fampiharana amin'izao fotoana izao dia tsy maintsy mijery ny tondro rehetra. Fanampin'izany, ny API dia tsy mamela anao hamaritra hoe inona ny tuples manondro ny TID iray ihany no tokony hofafana. Izy ihany no afaka mamafa azy rehetra.
  • Ny indexes amin'izao fotoana izao dia manondro andalana latabatra amin'ny laharan'ny sakana (32 bits) sy isa offset (16 bits). Ary 11 bits amin'ny isa offset ihany no azo ampitaina soa aman-tsara avy amin'ny tabilao TID mankany amin'ny fomba fidirana rehetra. Ny fampiharana MVCC hafa dia mety mila mitahiry entana fanampiny miaraka amin'ny TID. Ohatra, ny OrioleDB dia mitaky bitika iray na maromaro mba hampiharana ny mari-pamantarana "famafana-marking" na fampahalalana feno fahitana.

Fomba roa handresena ny fetra amin'ny fampiharana no atolotra:

    Fomba 1: Ny Index AM API dia manome safidy ho an'ny fampiharana hafa ny MVCC.

    Na dia mbola tompon'andraikitra amin'ny singa rehetra ao amin'ny MVCC aza ny Table AM, ny Index AM dia manome ny fahaiza-manao ilaina amin'ny fampiharana hafa ny MVCC, izany hoe: fitahirizana entana mpampiasa miaraka amin'ny TID, fomba famafana teboka, ary na dia fomba fanavaozana teboka aza (raha tsy azo ovaina ny TID ao amin'ny index, dia azo atao ny entana mpampiasa). Ho fanampin'izay, satria mila avela hanondro ny TID mitovy ny tuple index, mila havaozina koa ny fomba API ampiasaina mandritra ny scan index.

    Fomba 2: fanondroana MVCC-aware.

    Ny safidy hafa dia ny mamela ny indeksa manohana ny MVCC. Izany hoe, ny "mpanatanteraka" (na angamba ny Table AM) dia miantso fotsiny ny fomba fampidirana () sy famafana () amin'ny Index AM, raha ny Index AM kosa dia manome ny fahaiza-mamaky ny MVCC. Hanamora kokoa ny fitarafana index-only izany. Na ny Table AM ​​manontolo aza dia mety ho lasa sosona manelanelana mitahiry angon-drakitra ao anaty index.

    Ny kisary etsy ambany dia mampiseho ohatra iray. Ny sandan'ny fanondro 2 dia nohavaozin'ny fifanakalozana 11 manomboka amin'ny sanda "A" mankany amin'ny sanda "B". Noho izany, ny sanda "A" dia voamarika ho xmax == 11, ary ny sanda "B" dia voamarika ho xmin == 11. Amin'izany fomba izany, ny index 2 dia azo jerena ary ny tuples hita maso ihany no azo alaina mifanaraka amin'ny MVCC raha tsy misy fisavana. Azo atao ihany koa ny fanangonana fako Index 2 raha tsy mampiasa ny heap.

     Ny mpamorona OrioleDB dia manolotra ny fanatsarana ny API ho an'ny motera PostgreSQL hafa

    Miaraka amin'ireo fanavaozana rehetra voalaza etsy ambony ireo amin'ny fomba fidirana fanondroana API, dia tsy azo inoana fa ny fanondroana rehetra dia ho afaka havaozina miaraka hanohanana ireo endri-javatra vaovao rehetra. Tena zava-misy kokoa ny mamela fampiharana maro ho an'ny fomba fidirana index tokana. Ohatra, ho fanampin'ny hazo B mahazatra, ny fanitarana dia afaka mametraka hazo B hafa miaraka amin'ny fanohanan'ny MVCC ao anatin'ny fanondroana ary manohana ireo famantarana famantarana ny halavany.

     Ny mpamorona OrioleDB dia manolotra ny fanatsarana ny API ho an'ny motera PostgreSQL hafa

    Noho izany, natolotra ny fanavaozana tsy ny Table AM ​​​​API ihany, fa ny Index AM API, izay nanompo tsara ny vondrom-piarahamonina PostgreSQL nandritra ny taona maro. Ankoatr'izay, soso-kevitra ny hizara ny Index AM ho sosona lojika sy sosona fampiharana. Ity maritrano nohavaozina ity dia hamela ny PostgreSQL hanohana modely fitahirizana maro.

    Source: opennet.ru

Add a comment