PostgreSQL እና ግንኙነት-ተኮር የጽሑፍ ወጥነት ቅንብሮች

የጽሁፉ ትርጉም የተዘጋጀው በተለይ ለትምህርቱ ተማሪዎች ነው። "መረጃ ቋት". በዚህ አቅጣጫ ለማደግ ይፈልጋሉ? እንጋብዝሃለን። ክፍት ቀን, ስለ ፕሮግራሙ በዝርዝር የምንነጋገርበት, የኦንላይን ቅርጸት ገፅታዎች, ብቃቶች እና ከስልጠና በኋላ ተመራቂዎችን ስለሚጠብቁ የሙያ ተስፋዎች.

PostgreSQL እና ግንኙነት-ተኮር የጽሑፍ ወጥነት ቅንብሮች

PostgreSQL እና ግንኙነት-ተኮር የጽሑፍ ወጥነት ቅንብሮች
Compose ላይ፣ ብዙ የውሂብ ጎታዎችን እንገናኛለን፣ ይህም ተግባራቸውን እና ጉድለቶቻቸውን የበለጠ እንድንተዋወቅ እድል ይሰጠናል። የአዳዲስ የውሂብ ጎታዎችን ባህሪያት መውደድን ስንማር አንዳንድ ጊዜ ተመሳሳይ ባህሪያት ለረጅም ጊዜ በምንሰራባቸው የበሰሉ መሳሪያዎች ውስጥ ቢገኙ ምን ያህል ጥሩ እንደሚሆን ማሰብ እንጀምራለን። በPostgreSQL ውስጥ ማየት ከፈለኳቸው አዲስ ባህሪያት ውስጥ አንዱ በሁሉም ክላስተር ላይ በእያንዳንዱ ግንኙነት ላይ የሚዋቀር ወጥነት ያለው ነው። እና እንደ ተለወጠ, አስቀድመን አለን, እና ዛሬ እንዴት እንደሚጠቀሙበት መረጃን ለእርስዎ ልናካፍልዎ እንፈልጋለን.

ለምን አስፈለገኝ?

ክላስተር እንዴት መሆን እንዳለበት በማመልከቻዎ ላይ የተመሰረተ ነው። ለምሳሌ የክፍያ መጠየቂያ መተግበሪያን እንውሰድ። በክላስተር ውስጥ XNUMX% ወጥነት ያስፈልገዎታል፣ ስለዚህ የውሂብ ጎታዎ ሁሉም ለውጦች እስኪደረጉ ድረስ እንዲጠብቅ የተመሳሰለ ድርጊቶችን ማንቃት አለብዎት። ነገር ግን፣ ማመልከቻዎ በፍጥነት እያደገ ያለ ማህበራዊ አውታረ መረብ ከሆነ፣ ምናልባት እርስዎ ከመቶ በመቶ ወጥነት በላይ ፈጣን ምላሽን ይመርጣሉ። ይህንን ለማግኘት በክላስተርዎ ውስጥ ያልተመሳሰሉ ድርጊቶችን መጠቀም ይችላሉ።

ስምምነትን ያግኙ

በውሂብ ወጥነት እና በአፈፃፀም መካከል ሽግግሮችን ማድረግ አለብዎት። PostgreSQL ከወጥነት ይርቃል ምክንያቱም ነባሪው ውቅረት ሊተነበይ የሚችል እና ያልተጠበቁ ድንቆች ሳይኖር ነው። አሁን ድርድርን እንመልከት።

ንግድ 1፡ አፈጻጸም

የPostgreSQL ክላስተር ወጥነት የማይፈልግ ከሆነ ባልተመሳሰል መልኩ ማሄድ ይችላል። ጽሑፉ የተዘጋጀው ለክላስተር መሪ ነው፣ እና ዝማኔዎች ከጥቂት ሚሊሰከንዶች በኋላ ወደ ቅጂዎቹ ይላካሉ። የPostgreSQL ዘለላ ወጥነት ሲፈልግ፣ በተመሳሰለ ሁኔታ መሮጥ አለበት። ጽሑፉ ለክላስተር መሪ ይጻፋል፣ ይህም ለተገልጋዮቹ ማሻሻያ ይልካል እና እያንዳንዱ የጻፈውን ማረጋገጫ ይጠብቃል ጽሑፉን ለጀመረው ደንበኛ ስኬታማ መሆኑን ማረጋገጫ ከመላክዎ በፊት። በእነዚህ አቀራረቦች መካከል ያለው ተግባራዊ ልዩነት ያልተመሳሰለው ዘዴ ሁለት የኔትወርክ ሆፕ ያስፈልገዋል, የተመሳሰለው ዘዴ ግን አራት ያስፈልገዋል.

ንግድ 2፡ ወጥነት

በእነዚህ ሁለት አካሄዶች ውስጥ መሪ ውድቀት ሲከሰት ውጤቱም የተለየ ይሆናል. ስራው በተመሳሰለ መልኩ ከተሰራ, እንደዚህ አይነት ስህተት ከተከሰተ, ሁሉም መዝገቦች በቅጂዎች አይፈጸሙም. ምን ያህል ይጠፋል? በመተግበሪያው በራሱ እና በማባዛት ውጤታማነት ላይ የተመሰረተ ነው. ማባዛት አንድ ቅጂ ከመሪው 1 ሜባ ያነሰ ከሆነ ፣ ማለትም እስከ 1 ሜባ መዛግብት ባልተመሳሰል ክወና ጊዜ ሊጠፋ የሚችል ከሆነ አንድ ቅጂ መሪ እንዳይሆን ይከላከላል።

ይህ በተመሳሰለ ሁነታ ውስጥ አይከሰትም. መሪው ካልተሳካ፣ ሁሉም ቅጂዎች ተዘምነዋል፣ ምክንያቱም በመሪው ላይ የተረጋገጠ ማንኛውም ጽሁፍ በቅጅቶቹ ላይ መረጋገጥ አለበት። ይህ ወጥነት ነው.

ተመሳሳይነት ያለው ባህሪ በሒሳብ አከፋፈል መተግበሪያ ውስጥ ወጥነት ያለው ወጥነት ባለው ወጥነት እና አፈጻጸም መካከል ባለው የንግድ ልውውጥ ላይ ግልጽ ጠቀሜታ ይኖረዋል። ለእንደዚህ አይነት መተግበሪያ በጣም አስፈላጊው ነገር ትክክለኛ ውሂብ ነው. አሁን ስለ ማህበራዊ አውታረ መረብ አስቡበት ዋናው ተግባር የተጠቃሚውን ትኩረት በተቻለ ፍጥነት ምላሽ በመስጠት የተጠቃሚውን ትኩረት መጠበቅ ነው። በዚህ አጋጣሚ አነስተኛ የአውታረ መረብ ሆፕ ያለው አፈጻጸም እና ለተፈፃሚዎች ብዙ መጠበቅ ቅድሚያ የሚሰጠው ይሆናል። ሆኖም ግን, በአፈፃፀም እና በወጥነት መካከል ያለው የንግድ ልውውጥ እርስዎ ሊያስቡበት የሚገባው ብቸኛው ነገር አይደለም.

ግብይት 3፡ ብልሽቶች

ክላስተር በውድቀት ጊዜ እንዴት እንደሚሠራ መረዳት በጣም አስፈላጊ ነው. አንድ ወይም ከዚያ በላይ ቅጂዎች ያልተሳኩበትን ሁኔታ አስቡበት። ወንጀሎች በማይመሳሰል መልኩ ሲከናወኑ መሪው መስራቱን ይቀጥላል፣ ማለትም መቀበል እና መፃፍ፣ የጎደሉ ቅጂዎችን ሳይጠብቅ። ቅጂዎቹ ወደ ክላስተር ሲመለሱ መሪውን ይይዛሉ። በተመሳሰለ ማባዛት፣ ግልባሾቹ ምላሽ ካልሰጡ፣ መሪው ምንም አማራጭ አይኖረውም እና ቅጂው ወደ ክላስተር እስኪመለስ እና ተቀብሎ መፃፍ እስኪችል ድረስ ማረጋገጫ እስኪያገኝ መቆየቱን ይቀጥላል።

በአንድ ግብይት አንድ ግንኙነት?

እያንዳንዱ መተግበሪያ የተለየ አይነት ወጥነት እና አፈጻጸም ይፈልጋል። እርግጥ ነው፣ ሙሉ በሙሉ ወጥነት ያለው ነው ብለን የምናስበው፣ የክፍያ መጠየቂያ አፕሊኬሽኑ ካልሆነ፣ ወይም የእኛ ከሞላ ጎደል የማህበራዊ አውታረመረብ መተግበሪያችን ካልሆነ በስተቀር። በሌሎች በሁሉም ጉዳዮች፣ አንዳንድ ክንዋኔዎች የተመሳሰለ እና አንዳንዶቹ ያልተመሳሰሉ መሆን ያለባቸው ጊዜያት ይኖራሉ። ወደ ቻቱ የተላከ መልእክት እስኪፈጸም ድረስ ስርዓቱ እንዲቆይ ላይፈልጉ ይችላሉ ነገር ግን ክፍያ በተመሳሳይ መተግበሪያ ውስጥ ከተሰራ, ከዚያ መጠበቅ አለብዎት.

እነዚህ ሁሉ ውሳኔዎች በእርግጥ በመተግበሪያው ገንቢ የተደረጉ ናቸው። እያንዳንዱን አቀራረብ መቼ መጠቀም እንዳለቦት ትክክለኛ ውሳኔ ማድረግ ከጥቅል ውስጥ ምርጡን ለማግኘት ይረዳዎታል። ገንቢው በ SQL ደረጃ ለግንኙነት እና ለንግድ ልውውጥ በመካከላቸው መቀያየር አስፈላጊ ነው።

ቁጥጥርን በተግባር ማረጋገጥ

በነባሪ፣ PostgreSQL ወጥነትን ይሰጣል። ይህ በአገልጋዩ መለኪያ ነው የሚቆጣጠረው። synchronous_commit. በነባሪነት ቦታው ላይ ነው። onግን ሌሎች ሦስት አማራጮች አሉት። local, remote_write ወይም off.

መለኪያውን ሲያቀናብሩ off ሁሉም የተመሳሳይ ድርጊቶች ይቆማሉ፣ በአካባቢው ሥርዓት ላይም ቢሆን። የአካባቢያዊ ግቤት ለአካባቢያዊ ስርዓት የተመሳሰለ ሁነታን ይገልጻል፣ ነገር ግን ቅጂዎች ላይ ይጽፋል በተመሳሰል መልኩ ይከናወናሉ። Remote_write ከዚህም በላይ ይሄዳል፡ ወደ ቅጂዎች የሚጽፈው በማይመሳሰል መልኩ ነው፣ ነገር ግን ቅጂው ጽሑፉን ተቀብሎ ወደ ዲስክ ካልጻፈው ይመለሳሉ።

ያሉትን አማራጮች ግምት ውስጥ በማስገባት, ባህሪን እንመርጣለን እና ያንን ግምት ውስጥ በማስገባት on - እነዚህ የተመሳሰለ ቅጂዎች ናቸው, እኛ እንመርጣለን local በአውታረ መረቡ ላይ ለተመሳሳይ ድርጊቶች፣ ከአካባቢው ሲወጡ ግን የተመሳሰለ ነው።

አሁን፣ ይህንን እንዴት በአንድ አፍታ ማዋቀር እንደሚችሉ እንነግርዎታለን፣ ግን እንዳዘጋጀን አስቡት synchronous_commit в local ለአገልጋዩ. መለኪያውን መቀየር ይቻል እንደሆነ አሰብን። synchronous_commit በበረራ ላይ, እና የሚቻል ብቻ ሳይሆን ይህን ለማድረግ ሁለት መንገዶችም አሉ. የመጀመሪያው የግንኙነትዎን ክፍለ ጊዜ እንደሚከተለው ማዘጋጀት ነው፡-

SET SESSION synchronous_commit TO ON;  
// Your writes go here

በክፍለ-ጊዜው ውስጥ ያሉ ሁሉም ተከታይ ጽሁፎች አወንታዊ ውጤቶችን ለተገናኘው ደንበኛ ከመመለሳቸው በፊት ቅጂዎቹ ላይ መፃፋቸውን ይገነዘባሉ። በእርግጥ ቅንብሩን ካልቀየሩ በስተቀር synchronous_commit እንደገና። ክፍልን መተው ይችላሉ SESSION በትእዛዙ ውስጥ ምክንያቱም በነባሪ እሴት ውስጥ ይሆናል.

ለአንድ ግብይት የተመሳሰለ ማባዛት ማግኘቱን ለማረጋገጥ ሲፈልጉ ሁለተኛው ዘዴ ጥሩ ነው። በብዙ የNoSQL ትውልድ የውሂብ ጎታዎች የግብይቶች ጽንሰ-ሀሳብ የለም፣ ግን በ PostgreSQL ውስጥ አለ። በዚህ አጋጣሚ ግብይት ይጀምሩ እና ከዚያ ያዘጋጁ synchronous_commit в on የግብይቱን ግቤት ከመፈጸሙ በፊት. COMMIT ማንኛውንም የመለኪያ እሴት በመጠቀም ግብይቱን ይፈጽማል synchronous_commitምንም እንኳን ሌሎች ገንቢዎች ፅሁፎች የማይመሳሰሉ መሆናቸውን እንዲረዱ ለማድረግ ተለዋዋጩን በቅድሚያ ማዘጋጀት የተሻለ ቢሆንም በወቅቱ ተቀምጧል።

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

ዳታቤዙ ለተገናኘው ደንበኛ አወንታዊ ምላሽ ከመመለሱ በፊት ሁሉም የግብይቶች ፈፃሚዎች አሁን ወደ ቅጂዎች እንደተፃፉ ይረጋገጣሉ።

PostgreSQL በማዋቀር ላይ

ከዚህ በፊት፣ የ PostgreSQL ስርዓትን አስበን ነበር። synchronous_commit፣ ውስጥ ተጭኗል local. ይህንን በአገልጋዩ በኩል እውን ለማድረግ ሁለት የአገልጋይ ውቅር አማራጮችን ማዘጋጀት ያስፈልግዎታል። አንድ ተጨማሪ መለኪያ synchronous_standby_names መቼ ወደ ራሱ ይመጣል synchronous_commit ውስጥ ይገባል on. የትኛዎቹ ቅጂዎች ለተመሳሰሉ ድርጊቶች ብቁ እንደሆኑ ይወስናል፣ እና እኛ እናስቀምጠዋለን *, ይህም ማለት ሁሉም ቅጂዎች ተካተዋል ማለት ነው. እነዚህ እሴቶች ብዙውን ጊዜ የሚዋቀሩት በ ውስጥ ነው። የማዋቀር ፋይል በማከል፡-

synchronous_commit = local  
synchronous_standby_names='*'

መለኪያውን በማዘጋጀት synchronous_commit ወደ ትርጉም localየአካባቢ ዲስኮች ተመሳስለው የሚቆዩበት ሥርዓት እንፈጥራለን፣ ነገር ግን የአውታረ መረብ ቅጂዎች በነባሪነት የማይመሳሰሉ ናቸው። እርግጥ ነው፣ ከላይ እንደተገለጸው እነዚህን ድርጊቶች ተመሳሳይ ለማድረግ ካልወሰንን በቀር።

ልማቱን እየተከታተሉ ከነበሩ ገዥው ፕሮጀክትአንዳንድ የቅርብ ጊዜ ለውጦችን አስተውለህ ይሆናል (1, 2), ይህም ገዥ ተጠቃሚዎች እነዚህን መለኪያዎች እንዲሞክሩ እና ወጥነታቸውን እንዲቆጣጠሩ አስችሏቸዋል.

ጥቂት ተጨማሪ ቃላት...

ልክ ከሳምንት በፊት፣ PostgreSQLን በጥሩ ሁኔታ ማስተካከል እንደማይቻል እነግርዎታለሁ። ያኔ ነው የፅሁፍ አዘጋጅ መድረክ ቡድን አባል የሆነው ኩርት እንደዚህ አይነት እድል መኖሩን አጥብቆ የተናገረው። ተቃውሞዬን አረጋጋው እና በPostgreSQL ሰነድ ውስጥ አገኘ የሚከተለው:

PostgreSQL እና ግንኙነት-ተኮር የጽሑፍ ወጥነት ቅንብሮች

ይህ ቅንብር በማንኛውም ጊዜ ሊቀየር ይችላል። የማንኛውም ግብይት ባህሪ የሚወሰነው በተፈፀመበት ጊዜ ላይ ባለው ቅንብር ነው። ስለዚህ፣ ለአንዳንድ ግብይቶች በተመሣሣይ ሁኔታ እና ለሌሎችም ባልተመሳሰል መልኩ ለመፈጸም የሚቻል እና ጠቃሚ ነው። ለምሳሌ አንዱን ማስገደድ multistatement የመለኪያው ነባሪ እሴት ተቃራኒ ሲሆን ተቀናጅቶ ሲሰራ ግብይት የማይመሳሰል ይሆናል። SET LOCAL synchronous_commit TO OFF በግብይት ውስጥ.

በዚህ ትንሽ ማሻሻያ በማዋቀር ፋይሉ ላይ ለተጠቃሚዎች ወጥነት እና አፈፃፀማቸው ላይ ቁጥጥር ሰጥተናል።

ምንጭ: hab.com

አስተያየት ያክሉ