ሰላም ሁላችሁም! በጃቫ + ስፕሪንግ ውስጥ ማይክሮ አገልገሎቶችን የምጽፍ ደጋፊ ገንቢ ነኝ። በ Tinkoff ውስጥ በአንዱ የውስጥ ምርት ልማት ቡድን ውስጥ እሰራለሁ።
በቡድናችን ውስጥ በዲቢኤምኤስ ውስጥ መጠይቆችን የማመቻቸት ጥያቄ ብዙ ጊዜ ይነሳል። ሁልጊዜ ትንሽ ፈጣን መሆን ትፈልጋለህ፣ ነገር ግን ሁል ጊዜ በአሳቢነት በተገነቡ ኢንዴክሶች ማግኘት አትችልም - አንዳንድ መፍትሄዎችን መፈለግ አለብህ። ከመረጃ ቋቶች ጋር በሚሰሩበት ጊዜ ምክንያታዊ ማሻሻያዎችን ለመፈለግ ከእነዚህ አንዱ በድር ዙሪያ በሚንከራተቱበት ወቅት አገኘሁ
የማርከስ አጭር መጣጥፍ ልተረጎምልህ እፈልጋለሁ። በ SQL መስፈርት መሰረት ወደ አሮጌው ነገር ግን አሁንም አግባብነት ያለው የማካካሻ ስራ አፈጻጸም ችግር ላይ ትኩረትን ለመሳብ የሚፈልግ ማኒፌስቶ በተወሰነ ደረጃ ሊጠራ ይችላል.
በአንዳንድ ቦታዎች ለጸሐፊው ማብራሪያ እና አስተያየት እጨምራለሁ. እንደ “በግምት” ያሉ ሁሉንም ቦታዎች እጠቅሳለሁ። ለበለጠ ግልጽነት
አነስተኛ መግቢያ
ብዙ ሰዎች በማካካሻ በኩል ከገጽ ምርጫዎች ጋር መሥራት ምን ያህል ችግር እንዳለበት እና ቀርፋፋ እንደሆነ የሚያውቁ ይመስለኛል። ይበልጥ ቀልጣፋ በሆነ ንድፍ በቀላሉ ሊተካ እንደሚችል ያውቃሉ?
ስለዚህ, የማካካሻ ቁልፍ ቃሉ የውሂብ ጎታውን በጥያቄው ውስጥ የመጀመሪያውን n መዝገቦች እንዲዘለል ይነግረዋል. ሆኖም የውሂብ ጎታው አሁንም እነዚህን የመጀመሪያ n መዝገቦች ከዲስክ ማንበብ ያስፈልገዋል, በተሰጠው ቅደም ተከተል (ማስታወሻ: ከተገለፀ መደርደርን ይተግብሩ), እና ከዚያ በኋላ ብቻ ከ n+1 ጀምሮ መዝገቦችን መመለስ ይቻላል. በጣም የሚያስደንቀው ነገር ችግሩ በዲቢኤምኤስ ውስጥ በተለየ አተገባበር ላይ አይደለም ፣ ግን በዋናው ትርጓሜ በመደበኛው መሠረት-
... ረድፎቹ መጀመሪያ የተደረደሩት በ እና ከዚያ በ ውስጥ የተገለጹትን የረድፎች ብዛት በመጣል የተገደበ ከመጀመሪያው...
-SQL፡2016፣ ክፍል 2፣ 4.15.3 የወጡ ሠንጠረዦች (ማስታወሻ፡ በአሁኑ ጊዜ በጣም ጥቅም ላይ የዋለው መደበኛ)
እዚህ ያለው ቁልፍ ነጥብ ማካካሻ አንድ ነጠላ መለኪያ ይወስዳል - ለመዝለል የመዝገቦች ብዛት ፣ እና ያ ነው። ይህን ፍቺ ተከትሎ፣ ዲቢኤምኤስ ሁሉንም መዝገቦች ብቻ ሰርስሮ ማውጣት እና ከዚያም አላስፈላጊ የሆኑትን መጣል ይችላል። ግልጽ ነው፣ ይህ የማካካሻ ፍቺ ተጨማሪ ስራ እንድንሰራ ያስገድደናል። እና SQL ወይም NoSQL ቢሆን ምንም አይደለም.
ትንሽ ተጨማሪ ህመም
የማካካሻ ችግሮች በዚህ አያበቁም እና ምክንያቱ እዚህ ጋር ነው። ሁለት ገጾችን ከዲስክ በማንበብ መካከል ሌላ ክዋኔ አዲስ መዝገብ ካስገባ, በዚህ ጉዳይ ላይ ምን ይሆናል?
ማካካሻ ካለፉት ገፆች መዝገቦችን ለመዝለል ጥቅም ላይ በሚውልበት ጊዜ በተለያዩ ገጾች ንባብ መካከል አዲስ መዝገብ በሚጨምርበት ጊዜ ብዙ ቅጂዎች ሊያገኙ ይችላሉ (ማስታወሻ-ይህ የሚቻለው በግንባታ ቅደም ተከተል በመጠቀም ገጽ በገጽ ስናነብ ነው ፣ ከዚያ በውጤታችን መካከል አዲስ ግቤት ሊያገኝ ይችላል).
ስዕሉ ይህንን ሁኔታ በግልፅ ያሳያል. መሠረቱ የመጀመሪያዎቹን 10 መዝገቦች ያነባል ፣ ከዚያ በኋላ አዲስ መዝገብ ተካቷል ፣ ይህም ሁሉንም የተነበቡ መዝገቦች በ 1 ያካክላል ። ከዚያም መሰረቱ ከቀጣዮቹ 10 መዛግብት አዲስ ገጽ ይወስዳል እና ከ 11 ኛው ይጀምራል ፣ እንደ አስፈላጊነቱ ፣ ግን ከ 10ኛ፣ ይህንን መዝገብ ማባዛት። ከዚህ አገላለጽ አጠቃቀም ጋር የተያያዙ ሌሎች ያልተለመዱ ነገሮች አሉ, ግን ይህ በጣም የተለመደ ነው.
አስቀድመን እንዳወቅነው፣ እነዚህ የአንድ የተወሰነ ዲቢኤምኤስ ወይም የትግበራቸው ችግሮች አይደሉም። ችግሩ ያለው በ SQL መስፈርት መሰረት ፔጅሽንን በመግለጽ ላይ ነው። የትኛውን ገጽ እንደሚያመጣ ወይም ስንት መዝገቦችን መዝለል እንዳለብን ለዲቢኤምኤስ እንነግረዋለን። ለዚህ በጣም ትንሽ መረጃ ስላለ የውሂብ ጎታው በቀላሉ እንዲህ ዓይነቱን ጥያቄ ማመቻቸት አልቻለም።
ይህ በአንድ የተወሰነ ቁልፍ ቃል ላይ ሳይሆን በጥያቄው ፍቺ ላይ ችግር አለመሆኑንም ግልጽ ማድረግ ተገቢ ነው። በችግር ተፈጥሮአቸው ተመሳሳይ የሆኑ ብዙ ተጨማሪ አገባቦች አሉ።
- የማካካሻ ቁልፍ ቃል ቀደም ሲል እንደተጠቀሰው ነው.
- የሁለት ቁልፍ ቃላት ግንባታ ገደብ [ማካካሻ] (ምንም እንኳን ገደብ በራሱ በጣም መጥፎ ባይሆንም).
- በረድፍ ቁጥር (ለምሳሌ የረድፍ ቁጥር() ረድፍ፣ ወዘተ) ላይ በመመስረት በዝቅተኛ ወሰኖች ማጣራት።
እነዚህ ሁሉ አገላለጾች በቀላሉ ምን ያህል መስመሮች እንደሚዘለሉ ይነግሩዎታል፣ ምንም ተጨማሪ መረጃ ወይም አውድ የለም።
በኋላ በዚህ ጽሑፍ ውስጥ፣ የማካካሻ ቁልፍ ቃል የእነዚህ ሁሉ አማራጮች ማጠቃለያ ሆኖ ያገለግላል።
ያለ OFFSET ሕይወት
አሁን እነዚህ ሁሉ ችግሮች ባይኖሩ ዓለማችን ምን እንደሚመስል እናስብ። ያለማካካሻ ሕይወት በጣም አስቸጋሪ እንዳልሆነ ተገለጠ: በተመረጠው, እስካሁን ያላየናቸው ረድፎችን ብቻ መምረጥ ይችላሉ (ማስታወሻ: ማለትም በቀዳሚው ገጽ ላይ ያልነበሩ) ፣ የት ሁኔታን በመጠቀም።
በዚህ አጋጣሚ መርጦዎች የሚፈጸሙት በታዘዘ ስብስብ ላይ ነው (ጥሩ የድሮ ትእዛዝ በ) ከማለት እንጀምራለን። የታዘዘ ስብስብ ስላለን ካለፈው ገጽ የመጨረሻ መዝገብ በስተጀርባ ያለውን ውሂብ ብቻ ለማግኘት ቀላል ማጣሪያን መጠቀም እንችላለን፡-
SELECT ...
FROM ...
WHERE ...
AND id < ?last_seen_id
ORDER BY id DESC
FETCH FIRST 10 ROWS ONLY
የዚህ አካሄድ አጠቃላይ መርህ ያ ነው። እርግጥ ነው፣ በብዙ አምዶች ሲደረደሩ ነገሮች የበለጠ አስደሳች ይሆናሉ፣ ግን ሀሳቡ አሁንም አንድ ነው። ይህ ንድፍ ለብዙዎች ተግባራዊ መሆኑን ልብ ሊባል የሚገባው ጉዳይ ነው
ይህ አካሄድ መፈለግ ዘዴ ወይም የቁልፍ ማስያዣ ገጽ ይባላል። ተንሳፋፊውን የውጤት ችግር ይፈታል (ማስታወሻ: ቀደም ብሎ በተገለጸው ገጽ መካከል በመጻፍ መካከል ያለው ሁኔታ) እና በእርግጥ, ሁላችንም የምንወደው, ከጥንታዊው ማካካሻ የበለጠ ፈጣን እና የተረጋጋ ይሰራል. መረጋጋት የጥያቄው ሂደት ጊዜ ከተጠየቀው ሰንጠረዥ ቁጥር ጋር በተመጣጣኝ መጠን የማይጨምር በመሆኑ ነው (ማስታወሻ: ስለ የተለያዩ የአቀራረብ ስራዎች የበለጠ ለማወቅ ከፈለጉ ወደ pagination, ይችላሉ.
ከስላይድ አንዱ
ስለ መሳሪያዎቹስ?
ለዚህ ዘዴ የመሳሪያ ድጋፍ ባለመኖሩ ብዙውን ጊዜ በቁልፍ ላይ መፃፍ ተስማሚ አይደለም. የተለያዩ ማዕቀፎችን ጨምሮ አብዛኛዎቹ የማዳበሪያ መሳሪያዎች ፔጃኒሽን እንዴት እንደሚከናወን በትክክል እንዲመርጡ አይፈቅዱም.
ከዲቢኤምኤስ ጀምሮ በአሳሹ ውስጥ ማለቂያ በሌለው ማሸብለል የ AJAX ጥያቄን እስከ አፈፃፀም ድረስ የተገለጸው ዘዴ ከጫፍ እስከ ጫፍ ድጋፍ የሚያስፈልገው በመሆኑ ሁኔታው ተባብሷል። የገጹን ቁጥር ብቻ ከመግለጽ ይልቅ አሁን ለሁሉም ገጾች ቁልፎችን በአንድ ጊዜ መግለጽ አለቦት።
ነገር ግን በቁልፍ ሰሌዳዎች ላይ ማተምን የሚደግፉ የማዕቀፎች ብዛት ቀስ በቀስ እያደገ ነው። በአሁኑ ጊዜ ያለን እነሆ፡-
jOOQ ለጃቫ;ትዕዛዝ_ጥያቄ ለ Ruby;chunkator иDjango ማለቂያ የሌለው ጥቅልል ፔጅ ለጃንጎ;SQL Alchemy sqlakeyset ለፓይዘን;ነበልባል-ጽናት - መስፈርት API ለጃፓ አተገባበር;DBIx :: ክፍል :: መጠቅለያ:: ለፐርል;ግዙፍ.js , ካርታ ለ Node.jsየቁልፍ ስብስብ ሰነድ .
(ማስታወሻ፡ አንዳንድ አገናኞች የተወገዱት በትርጉም ጊዜ አንዳንድ ቤተ-መጻሕፍት ከ2017-2018 ጀምሮ ያልተዘመኑ በመሆናቸው ነው። ፍላጎት ካሎት ዋናውን ምንጭ መመልከት ይችላሉ።)
የእርስዎ እርዳታ የሚያስፈልገው በዚህ ጊዜ ነው። ማንኛውንም የፓጂኔሽን አጠቃቀምን የሚጠቅም ማዕቀፍ ካዘጋጁ ወይም ከደገፉ፣ እጠይቃለሁ፣ እጠይቃለሁ፣ በቁልፍ ላይ ለገጽ ማተም ቤተኛ ድጋፍ እንድትሰጡ እጠይቃለሁ። ጥያቄዎች ካሉዎት ወይም እርዳታ ከፈለጉ፣ ለመርዳት ደስተኛ ነኝ (
በቁልፍ መፃፍ ድጋፍ ማግኘት ይገባቸዋል ብለው ያሰቡትን ዝግጁ-የተዘጋጁ መፍትሄዎችን ከተጠቀሙ፣ ከተቻለ ጥያቄ ይፍጠሩ ወይም ደግሞ ዝግጁ የሆነ መፍትሄ ያቅርቡ። እንዲሁም ከዚህ ጽሑፍ ጋር ማገናኘት ይችላሉ.
መደምደሚያ
ቀላል እና ጠቃሚ አቀራረብ እንደ መቆለፊያ ቁልፎች ያልተስፋፋበት ምክንያት በቴክኒካል ለመተግበር አስቸጋሪ ወይም ከፍተኛ ጥረት የሚጠይቅ አይደለም. ዋናው ምክንያት ብዙዎች ማየትና ማካካሻ መሥራት ስለለመዱ ነው - ይህ አካሄድ በራሱ ስታንዳርድ የታዘዘ ነው።
በውጤቱም, ጥቂት ሰዎች ወደ ፓጂኔሽን አቀራረብ ስለመቀየር ያስባሉ, እና በዚህ ምክንያት, ከማዕቀፎች እና ከቤተ-መጻህፍት የመሳሪያ ድጋፍ ደካማ ነው. ስለዚህ፣ ከጥቅም ነጻ የሆነ ፔጅኔሽን ሃሳብ እና ግብ ለእርስዎ ቅርብ ከሆነ፣ እንዲሰራጭ ያግዙ!
ምንጭ:
ደራሲ: ማርከስ ዊናንድ
ምንጭ: hab.com