OrioleDB ገንቢዎች በPostgreSQL (ሠንጠረዥ/ኢንዴክስ የመዳረሻ ዘዴ (AM) ኤፒአይ) ውስጥ ሰንጠረዦችን እና ኢንዴክሶችን ለማግኘት ለቅጥያዎች ጥቅም ላይ የሚውለውን ዝቅተኛ ደረጃ ኤፒአይ ያለውን ወቅታዊ ሁኔታ ተንትነዋል እና ለማሻሻል መንገዶችን ጠቁመዋል። እንደዚህ ያለ ኤፒአይ በ PostgreSQL 12 ውስጥ ከገባ በኋላ ገንቢዎች አማራጭ የመረጃ ማከማቻ ዘዴዎችን መፍጠር ችለዋል። ነገር ግን ይህ ኤፒአይ ቢኖርም እና አብሮገነብ የማጠራቀሚያ ሞተር ውስንነት ቢታወቅም እንደ ማራዘሚያ ብቻ የተተገበረ ሙሉ ለሙሉ የሚሰራ የግብይት ማከማቻ ሞተሮች አሁንም የሉም።
ለአማራጭ PostgreSQL ሰንጠረዥ ሞተሮች በጣም ታዋቂዎቹ ባህሪዎች የሚከተሉት ናቸው
- እንደ UNDO ሎግ ላይ የተመሰረቱ መደብሮች ያሉ ተለዋጭ የMVCC ትግበራዎች።
- በመረጃ ጠቋሚ የተደራጁ ሠንጠረዦች፣ መረጃ ጠቋሚው በሠንጠረዡ ላይ እንደ አማራጭ ተጨማሪ ጥያቄዎችን የሚያፋጥን ሳይሆን የሠንጠረዡ መረጃ የሚከማችበት ቀዳሚ የመረጃ መዋቅር ነው።
አማራጭ MVCC አተገባበርን ለመደገፍ በሰንጠረዥ/ኢንዴክስ AM ኤፒአይ ውስጥ የሚያስፈልጉት ለውጦች ከኦሪዮዲቢ ቅጥያ ጋር ተብራርተዋል፣ይህም አብሮ የተሰራው የPostgreSQL ማከማቻ ሞተር የታወቁ ድክመቶችን ለመፍታት ነው። ችግሩ የ OrioleDBን ከ PostgreSQL ጋር ሙሉ ለሙሉ ማቀናጀት በPostgreSQL ኮድ ላይ ለውጦችን የሚፈልግ ሲሆን ይህም የፕሮጀክቱን አተገባበር የሚያወሳስብ እና የአሁኑን ሠንጠረዥ AM API የማዘመን አስፈላጊነትን ያሳያል።
ሠንጠረዡ AM API MVCC እንዴት መተግበር እንዳለበት በቀጥታ አይገልጽም። ሆኖም የሠንጠረዥ AM ኤፒአይ እና ማውጫ AM ኤፒአይ የሚከተለውን ግምት ይሰጣሉ፡ እያንዳንዱ TID (Tuple/row Identifier) በሁሉም ኢንዴክሶች ተጠቁሟል ወይም ጨርሶ አልተጠቆመም። ምንም እንኳን ኢንዴክስ AM ለአንድ TID (ለምሳሌ ጂአይኤን) በርካታ ማጣቀሻዎች ቢኖረውም ሁሉም እነዚህ ማጣቀሻዎች በተመሳሳዩ ኢንዴክስ እሴት ላይ ማተም አለባቸው።

ይህ መርህ የጽህፈት ስራዎችን ቁጥር በመጨመር ("ማጉላት ፃፍ") ተችቷል - አንድ የተጠቆመ ባህሪ ከተዘመነ በሠንጠረዡ ውስጥ ያለው እያንዳንዱ መረጃ ጠቋሚ መዘመን አለበት. የ UNDO ሎግ ሙሉ በሙሉ ለመጠቀም ከፈለጉ ወይም ሌላ የማከማቻ ዘዴ ያለ "መጻፍ ማጉላት" (እንደ WARM ዘዴ) ለመገንባት ከፈለጉ ይህን ግምት ማፍረስ አለብዎት.

ይህንን ግምት የማይጥስ በ UNDO ላይ የተመሰረተ ሠንጠረዥ AM ነባሩን HOT (Heap-only Tuples) ዘዴን ይመስላል፣ የድሮ የረድፍ ስሪቶች በ UNDO ምዝግብ ማስታወሻ ውስጥ ካልተቀመጡ እና በተመሳሳይ ገጽ ላይ መገጣጠም የለባቸውም። ነገር ግን, እንደ ደራሲዎቹ ከሆነ, ይህ ጥቅም የተለየ ሰንጠረዥ AM መኖሩን ለማረጋገጥ በቂ አይደለም.
የነባሩ ኤፒአይ ተግባራዊ ገደቦች፡-
- የሰንጠረዥ ረድፍ ሲዘምን ኢንዴክሶች በሁሉም ወይም በምንም መሰረት ይዘምናሉ።
- የኢንዴክስ ኤኤም ኤፒአይ የተወሰኑ ቱፕልሎችን በመምረጥ የመሰረዝ ችሎታ የለውም። በአሁኑ ጊዜ አምቡልክዴሌት እና የ amvacuumcleanup ዘዴዎችን በመጠቀም ቱፕሎችን ከመረጃ ጠቋሚዎች በጅምላ ማጥፋት ይቻላል። በዚህ ኤፒአይ አማካኝነት ስፖት ማጥፋትን ለመተግበር መሞከር ዝቅተኛ ቅልጥፍናን ያስከትላል፣ ምክንያቱም አብዛኛዎቹ የአሁን ትግበራዎች አጠቃላይ መረጃን መቃኘት አለባቸው። በተጨማሪም፣ ተመሳሳይ ቲአይዲ የሚጠቅሱት የትኞቹ ቱፕልሎች መሰረዝ እንዳለባቸው እንዲገልጹ ኤፒአይ አይፈቅድልዎም። ሁሉንም ብቻ ነው የሚሰርዛቸው።
- ኢንዴክሶች በአሁኑ ጊዜ የሰንጠረዥ ረድፎችን በብሎክ ቁጥር (32 ቢት) እና በማካካሻ ቁጥር (16 ቢት) ይጠቅሳሉ። እና የማካካሻ ቁጥሩ 11 ቢት ብቻ ከሠንጠረዥ TID ወደ ሁሉም የመረጃ ጠቋሚ መዳረሻ ዘዴዎች በደህና ሊተላለፉ ይችላሉ። ተለዋጭ የ MVCC አተገባበር ግን ከቲአይዲ ጋር ተጨማሪ ክፍያ ማከማቸት ያስፈልጋቸው ይሆናል። ለምሳሌ፣ OrioleDB የ"Dele-marking" ኢንዴክሶችን ወይም ሙሉ የታይነት መረጃን ለመተግበር አንድ ወይም ከዚያ በላይ ቢት ያስፈልገዋል።
በተግባር ላይ ያሉ ገደቦችን ለማሸነፍ ሁለት መንገዶች ቀርበዋል-
አቀራረብ 1፡ ጠቋሚ AM ኤፒአይ ለኤምቪሲሲ ተለዋጭ ትግበራ አማራጮችን ይሰጣል።
ሠንጠረዥ AM ለሁሉም የ MVCC አካላት ተጠያቂ ሆኖ ቢቀጥልም ኢንዴክስ ኤኤም ለ MVCC አማራጭ ትግበራ አስፈላጊ የሆኑትን ችሎታዎች ያቀርባል ይህም የተጠቃሚን ጭነት ከ TID ጋር ማከማቸት, የነጥብ መሰረዝ ዘዴ እና ሌላው ቀርቶ የነጥብ ማሻሻያ ዘዴ (በመረጃ ጠቋሚው ውስጥ TID መቀየር ካልተቻለ, የተጠቃሚው ጭነት ይችላል). በተጨማሪም፣ በርካታ ኢንዴክስ ቱፕሎች ተመሳሳዩን TID እንዲጠቅሱ መፍቀድ ስላለባቸው፣ በመረጃ ጠቋሚ ፍተሻ ወቅት ጥቅም ላይ የዋሉ የኤፒአይ ዘዴዎችም መዘመን አለባቸው።
አቀራረብ 2፡ MVCC የሚያውቁ ኢንዴክሶች።
አማራጭ ማለት MVCCን የሚደግፉ ኢንዴክሶችን መፍቀድ ነው። ማለትም “አስፈፃሚው” (ወይም ምናልባት ሠንጠረዥ AM) በቀላሉ አስገባ() እና ሰርዝ() ዘዴዎችን በ Index AM ላይ ይደውላል፣ ኢንዴክስ AM ደግሞ MVCCን የሚያውቅ የመቃኘት ችሎታዎችን ይሰጣል። ይህ መረጃ ጠቋሚ-ብቻ ቅኝትን በጣም ቀላል ያደርገዋል። አጠቃላይ ሠንጠረዥ AM እንኳን በመረጃ ጠቋሚ ውስጥ መረጃን የሚያከማች መካከለኛ ንብርብር ሊሆን ይችላል።
ከታች ያለው ንድፍ ምሳሌ ያሳያል. የኢንዴክስ 2 ዋጋ በግብይት 11 ከ "A" ወደ እሴት "B" ተዘምኗል። ስለዚህ እሴት "A" በ xmax == 11, እና "B" እሴት xmin == 11. በዚህ መንገድ, ኢንዴክስ 2 ይቃኛል እና የሚታዩ tuples ብቻ MVCC ያለ ክምር ቼኮች መሠረት ማግኘት ይቻላል. ኢንዴክስ 2 የቆሻሻ ማጠራቀሚያ ክምርን ሳይጠቀሙ ሊከናወን ይችላል.

በመረጃ ጠቋሚ የመዳረሻ ዘዴዎች ኤፒአይ ውስጥ ከላይ በተጠቀሱት ሁሉም ፈጠራዎች አማካኝነት ሁሉንም አዲሶቹን ባህሪያት ለመደገፍ ሁሉም ኢንዴክሶች በአንድ ጊዜ መዘመን መቻል የማይመስል ነገር ነው። ለአንድ ኢንዴክስ መዳረሻ ዘዴ ብዙ አተገባበርን መፍቀድ የበለጠ እውነታዊ ነው። ለምሳሌ፣ ከመደበኛው ቢ-ዛፍ በተጨማሪ፣ ቅጥያው በመረጃ ጠቋሚው ውስጥ ካለው የ MVCC ድጋፍ እና የዘፈቀደ-ርዝመት መዝገብ መለያዎችን የሚደግፍ አማራጭ ቢ-ዛፍ መተግበር ይችላል።

ስለዚህ የሠንጠረዥ AM ኤፒአይን ብቻ ሳይሆን የ PostgreSQL ማህበረሰብን ለብዙ አመታት በጥሩ ሁኔታ ያገለገለውን ኢንዴክስ AM ኤፒአይንም ለማሻሻል ታቅዷል። ከዚህም በላይ ኢንዴክስ ኤኤምን ወደ ሎጂካዊ ንብርብር እና የአተገባበር ንብርብር ለመከፋፈል ታቅዷል. ይህ እንደገና የታሰበው አርክቴክቸር PostgreSQL በርካታ የማከማቻ ሞዴሎችን እንዲደግፍ ያስችለዋል።
ምንጭ: opennet.ru
