Ndị mmepe OrioleDB nyochara ọnọdụ API dị ala dị ugbu a ejiri maka ndọtị iji nweta tebụl na ndeksi na PostgreSQL (Table/Index Access Method (AM) API) wee tụọ aro ụzọ isi melite ya. Kemgbe mmalite nke API dị otú ahụ na PostgreSQL 12, ndị mmepe enweela ike ịmepụta usoro nchekwa data ọzọ. Agbanyeghị, n'agbanyeghị ịdị adị nke API a yana oke ama ama nke igwe nchekwa etinyere n'ime ya, a ka nwere igwe nchekwa nchekwa azụmahịa na-arụ ọrụ nke ọma naanị dị ka ndọtị.
Ihe kacha ewu ewu maka igwe tebụl PostgreSQL ọzọ bụ:
- Mmejuputa MVCC ọzọ, dị ka ụlọ ahịa gbadoro ụkwụ na UNDO.
- Tebụl ahaziri index, ebe ndeksi abụghị ihe mgbakwunye nhọrọ na tebụl nke na-eme ka ajụjụ dị ngwa ngwa, kama ọ bụ usoro data bụ isi nke echekwara data tebụl.
A na-atụle mgbanwe ndị achọrọ na Tebụl/Index AM API iji kwado mmejuputa iwu MVCC ọzọ na anya na mgbakwunye OrioleDB, nke e mere iji dozie adịghị ike ama ama nke igwe nchekwa PostgreSQL wuru. Nsogbu a bụ na ijikọ OrioleDB zuru ezu na PostgreSQL chọrọ mgbanwe na koodu PostgreSQL, nke na-eme ka mmejuputa ọrụ ahụ pụta ìhè ma na-egosipụta mkpa ọ dị ime ka tebụl AMAPI dị ugbu a dị ọhụrụ.
Okpokoro AM API anaghị ekwu kpọmkwem ka ekwesịrị isi tinye MVCC. Agbanyeghị, Tebụl AM API na Index AM API na-eme echiche ndị a: TID ọ bụla (Tuple/row Identifier) bụ nke index niile depụtara ma ọ bụ na-edepụtaghị ya ma ọlị. Ọbụlagodi na Index AM nwere ọtụtụ ntụaka na otu TID (dịka GIN), ntụaka ndị a niile ga-edorịrị otu uru indexedpụtara.

A katọrọ ụkpụrụ a maka ịbawanye ọnụ ọgụgụ nke ọrụ ide ("dee nkwalite") - ọ bụrụ na emelite otu njirimara indexed, index ọ bụla na tebụl ga-emelite. Ọ bụrụ na ị chọrọ iji ohere nke UNDO log nke ọma, ma ọ bụ wuo usoro nchekwa ọzọ na-enweghị "dee nkwalite" (dị ka usoro WARM), ịkwesịrị imebi echiche a.

Okpokoro UNDO dabere na AM nke na-agaghị emebi echiche a yiri usoro HOT (Heap-Only Tuples) dị, belụsọ na a na-echekwa ụdị ahịrị ochie n'ime ndekọ UNDO na agaghị adabara n'otu ibe ahụ. Ma, dị ka ndị edemede si kwuo, uru a ezughị iji kwado ịdị adị nke tebụl AM dị iche.
Oke bara uru nke API dị ugbu a:
- Mgbe emelitere ahịrị okpokoro, a na-emelite ndenye aha n'enweghị ihe ọ bụla.
- Index AM API enweghị ikike iji họrọ ihichapụ ụfọdụ tuples. Ọ ga-ekwe omume ugbu a ihichapụ tuples na indexes n'ọtụtụ buru ibu site na iji ambulkdelete na amvacuumcleanup. Ịgbalị imejuputa nchapụta ntụpọ site na API a ga-ebute arụmọrụ dị ala, ebe ọ bụ na ọtụtụ mmejuputa iwu ugbu a ga-enyocharịrị ndepụta ndeksi niile. Na mgbakwunye, API anaghị ekwe ka ị kọwapụta nke tuples na-ekwu maka otu TID kwesịrị ihichapụ. Ọ nwere ike ihichapụ ha niile.
- Ndekọ ndenye ugbu a na-ezo aka ahịrị tebụl site na nọmba ngọngọ (bits 32) yana ọnụọgụ akwụ ụgwọ (bit 16). Na naanị 11 ibe n'ibe nke ọnụọgụ akwụ ụgwọ ka enwere ike ịfefe na tebụl TID n'enweghị nsogbu ọ bụla gaa na ụzọ ịnweta ndeksi niile. Mmejuputa MVCC ọzọ nwere ike, agbanyeghị, ọ ga-adị mkpa ịchekwa ibu ụgwọ ọrụ yana TID. Dịka ọmụmaatụ, OrioleDB chọrọ otu ibe n'ibe ma ọ bụ karịa iji mejuputa ndenye aha "ehichapụ" ma ọ bụ ozi visibiliti zuru oke.
A na-atụpụta ụzọ abụọ ị ga-esi merie njedebe na omume:
Ụzọ 1: Index AM API na-enye nhọrọ maka mmejuputa ọzọ nke MVCC.
Ọ bụ ezie na tebụl AM na-aga n'ihu na-ahụ maka ihe niile dị na MVCC, Index AM na-enye ike dị mkpa maka mmejuputa ọzọ nke MVCC, ya bụ: ịchekwa ụgwọ ọrụ onye ọrụ yana TID, usoro nkwụsịtụ, na ọbụna usoro mmelite isi (ọ bụrụ na TID na ndeksi enweghị ike ịgbanwe, onye ọrụ nwere ike ịkwụ ụgwọ). Na mgbakwunye, ebe ọ bụ na ekwesịrị ịhapụ ọtụtụ tuple index ka ha na-ezo aka n'otu TID, usoro API ndị a na-eji n'oge nyocha index dịkwa mkpa ka emelitekwa.
Ụzọ 2: MVCC-mmara index.
Nhọrọ ọzọ ga-abụ ikwe ka ndeksi na-akwado MVCC. Ya bụ, "executor" (ma ọ bụ ikekwe Table AM) na-akpọ nnọọ ntinye () na ihichapụ () ụzọ na Index AM, ebe Index AM na-enye MVCC-aware scanning ike. Nke a ga-eme ka nyocha naanị index dị mfe karị. Ọbụlagodi tebụl AM niile nwere ike bụrụ akwa oyi akwa na-echekwa data na ndeksi.
Eserese dị n'okpuru na-egosi ihe atụ. A na-emelite uru nke index 2 site na azụmahịa 11 site na uru "A" ruo uru "B". Ya mere, uru "A" ka akara dị ka xmax == 11, na uru "B" ka akara dị ka xmin == 11. N'ụzọ dị otú a, index 2 nwere ike scanned na naanị tuples a na-ahụ anya ka enwere ike iweghachite dị ka MVCC si kwuo na-enweghị ego nlele. Enwere ike ịme nchịkọta mkpofu index 2 na-ejighi obo ahụ.

Site na ihe ọhụrụ ndị a dị n'elu na usoro ịnweta index API, ọ gaghị ekwe omume na index niile ga-enwe ike imelite n'otu oge iji kwado njirimara ọhụrụ niile. Ọ bụ ihe ezi uche dị na ya ikwe ka ọtụtụ mmejuputa iwu maka otu usoro ịnweta index. Dịka ọmụmaatụ, na mgbakwunye na osisi B mgbe niile, ndọtị ahụ ga-enwe ike mejuputa osisi B ọzọ nwere nkwado MVCC n'ime index na nkwado maka ihe nchọpụta ndekọ ogologo aka ike.

Ya mere, a na-atụ aro ka ịgbanwee ọ bụghị naanị Table AM API, kamakwa Index AM API, nke jerela obodo PostgreSQL nke ọma ruo ọtụtụ afọ. Ọzọkwa, a na-atụ aro ka kewaa Index AM ka ọ bụrụ oyi akwa ezi uche dị na ya na oyi akwa mmejuputa. Ihe owuwu a echegharịrị ga-ekwe ka PostgreSQL kwado ọtụtụ ụdị nchekwa.
isi: opennet.ru
