በMongoDB ከመጀመሬ በፊት ባውቃቸው 14 ነገሮች

የጽሁፉ ትርጉም የተዘጋጀው በትምህርቱ መጀመሪያ ዋዜማ ላይ ነው። "ተዛማጅ ያልሆኑ የውሂብ ጎታዎች".

በMongoDB ከመጀመሬ በፊት ባውቃቸው 14 ነገሮች

ዋና ዋና ዜናዎች

  • ምንም እንኳን በሞንጎዲቢ ውስጥ አማራጭ ቢሆንም ንድፍ ማዘጋጀት እጅግ በጣም አስፈላጊ ነው.
  • በተመሳሳይ፣ ኢንዴክሶች ከእርስዎ እቅድ እና የመዳረሻ ቅጦች ጋር መዛመድ አለባቸው።
  • ትላልቅ ነገሮችን እና ትላልቅ ድርድሮችን ከመጠቀም ይቆጠቡ.
  • በተለይ ከደህንነት እና አስተማማኝነት ጋር በተያያዘ በMongoDB ቅንብሮች ይጠንቀቁ።
  • MongoDB የመጠይቅ አመቻች የለውም፣ ስለዚህ የመጠይቅ ስራዎችን ሲሰሊ መጠንቀቅ አለብዎት።

ከመረጃ ቋቶች ጋር በጣም ለረጅም ጊዜ እየሠራሁ ነበር፣ነገር ግን MongoDB በቅርቡ አገኘሁት። ከእሱ ጋር መሥራት ከመጀመሬ በፊት ባውቃቸው የምመኘው ጥቂት ነገሮች አሉ። አንድ ሰው በአንድ የተወሰነ መስክ ውስጥ ልምድ ሲኖረው, የውሂብ ጎታዎች ምን እንደሆኑ እና ምን እንደሚሰሩ አስቀድሞ የተገነዘቡ ናቸው. ሌሎች በቀላሉ እንዲረዱት ለማድረግ ተስፋ በማድረግ፣ የተለመዱ ስህተቶችን ዝርዝር አቀርባለሁ።

ያለማረጋገጫ የሞንጎዲቢ አገልጋይ መፍጠር

እንደ አለመታደል ሆኖ MongoDB በነባሪነት ያለ ማረጋገጫ ተጭኗል። በአገር ውስጥ ለሚገኝ የስራ ጣቢያ፣ ይህ አሰራር የተለመደ ነው። ነገር ግን ሞንጎዲቢ ባለብዙ ተጠቃሚ ስርዓት ብዙ ማህደረ ትውስታን መጠቀም የሚወድ ስለሆነ በተቻለ መጠን ራም ባለው አገልጋይ ላይ ቢያስቀምጡት ለልማት ብቻ ቢጠቀሙበትም የተሻለ ይሆናል። በነባሪ ወደብ በኩል በአገልጋዩ ላይ መጫን ችግር ሊሆን ይችላል፣ በተለይም ማንኛውም የጃቫስክሪፕት ኮድ በጥያቄው ውስጥ ሊተገበር የሚችል ከሆነ (ለምሳሌ ፣ $where እንደ ሀሳብ መርፌዎች).

በርካታ የማረጋገጫ ዘዴዎች አሉ፣ ግን ቀላሉ ግን የተጠቃሚ መታወቂያ/የይለፍ ቃል ማዘጋጀት ነው። ላይ ተመስርተው ስለ ድንቅ ማረጋገጫ በሚያስቡበት ጊዜ ይህን ሃሳብ ይጠቀሙ LDAP. ከደህንነት ጋር በተያያዘ MongoDB በየጊዜው መዘመን አለበት፣ እና ምዝግብ ማስታወሻዎች ያልተፈቀደ መዳረሻ ለማግኘት ሁልጊዜ መፈተሽ አለባቸው። ለምሳሌ፣ እንደ ነባሪ ወደብ የተለየ ወደብ መምረጥ እወዳለሁ።

የጥቃቱን ገጽ ከMongoDB ጋር ማያያዝን አይርሱ

MongoDB የደህንነት ማረጋገጫ ዝርዝር የአውታረ መረብ ጣልቃ ገብነት እና የውሂብ መፍሰስ አደጋን ለመቀነስ ጥሩ ምክሮችን ይዟል። እሱን ማጥፋት ቀላል ነው እና የልማት አገልጋይ ከፍተኛ የደህንነት ጥበቃ አያስፈልገውም ማለት ነው። ነገር ግን፣ ያን ያህል ቀላል አይደለም እና ይሄ በሁሉም የሞንጎዲቢ አገልጋዮች ላይ ተፈጻሚ ይሆናል። በተለይም ለመጠቀም ምንም አሳማኝ ምክንያት ከሌለ mapReduce, group ወይም $ የት, በማዋቀር ፋይል ውስጥ በመጻፍ በጃቫስክሪፕት ውስጥ የዘፈቀደ ኮድ መጠቀምን ማሰናከል ያስፈልግዎታል javascriptEnabled:false. የውሂብ ፋይሎች በመደበኛ MongoDB ውስጥ ስላልተመሰጠሩ ሞንጎዲቢን በ ጋር ማሄድ ምክንያታዊ ነው። ራሱን የቻለ ተጠቃሚ, የፋይሎች ሙሉ መዳረሻ ያለው, በእሱ ላይ ብቻ የተወሰነ መዳረሻ ያለው እና የስርዓተ ክወናው የራሱን የፋይል መዳረሻ መቆጣጠሪያዎች የመጠቀም ችሎታ.

ወረዳውን በማዳበር ላይ ስህተት

MongoDB ንድፍ አይጠቀምም። ግን ይህ ማለት እቅዱ አያስፈልግም ማለት አይደለም. ሰነዶችን ያለ ምንም ዓይነት ወጥነት ያለው ስርዓተ-ጥለት ብቻ ማከማቸት ከፈለጉ እነሱን ማከማቸት ፈጣን እና ቀላል ሊሆን ይችላል፣ ነገር ግን በኋላ ማምጣት ከባድ ነው። እርግማን ከባድ.

ክላሲክ ጽሑፍ "ለMongoDB ንድፍ ንድፍ 6 ዋና ዋና ህጎች" ሊነበብ የሚገባው ነው፣ እና የመሳሰሉት ባህሪያት Schema Explorer በሶስተኛ ወገን መሳሪያ ስቱዲዮ 3T ውስጥ ለወረዳዎች መደበኛ ቼኮች መጠቀም ተገቢ ነው።

የመደርደር ቅደም ተከተልን አይርሱ

የመደርደር ቅደም ተከተልን መርሳት ከማንኛውም ሌላ የተሳሳተ ውቅር የበለጠ ብስጭት እና ብዙ ጊዜ ሊያባክን ይችላል። በነባሪ MongoBD ይጠቀማል ሁለትዮሽ ዓይነት. ግን ለማንም ጠቃሚ ሊሆን አይችልም. ኬዝ-ስሱ፣ አክሰንት-ትብ፣ ሁለትዮሽ ዓይነቶች ባለፈው ክፍለ ዘመን በ80 ዎቹ ዓመታት ውስጥ ከዶቃዎች፣ ካፍታኖች እና ጥምዝ ጢም ጋር የማወቅ ጉጉት አናክሮኒዝም ተደርገው ይወሰዱ ነበር። አሁን የእነሱ ጥቅም ይቅር የማይባል ነው. በእውነተኛ ህይወት ውስጥ "ሞተር ሳይክል" ከ "ሞተርሳይክል" ጋር ተመሳሳይ ነው. እና "ብሪታንያ" እና "ብሪታንያ" አንድ ቦታ ናቸው. ትንንሽ ሆሄ ማለት ከትልቅ ፊደል ጋር እኩል ነው። እና ዲያክሪቲኮችን መደርደር እንዳትጀምር። በሞንጎዲቢ ውስጥ የውሂብ ጎታ ሲፈጥሩ በትእምርተ-ነገር የማይሰማ ስብስብ እና ይጠቀሙ መመዝገብከቋንቋው ጋር የሚዛመድ እና የስርዓት ተጠቃሚ ባህል. ይህ በሕብረቁምፊ ውሂብ መፈለግን በጣም ቀላል ያደርገዋል።

በትላልቅ ሰነዶች ስብስቦችን ይፍጠሩ

MongoDB በስብስብ ውስጥ እስከ 16MB የሚደርሱ ትላልቅ ሰነዶችን በማስተናገድ ደስተኛ ነው። GridFS ከ16 ሜባ በላይ ለሆኑ ትላልቅ ሰነዶች የተነደፈ። ነገር ግን ትላልቅ ሰነዶች እዚያ ሊቀመጡ ስለሚችሉ, እዚያ ማከማቸት ጥሩ ሀሳብ አይደለም. MongoDB በመጠን ጥቂት ኪሎባይት የሆኑ ነጠላ ሰነዶችን ብታከማች እና በሰፊ የSQL ሠንጠረዥ ውስጥ እንደ ረድፎች ብታከማቸው በተሻለ ሁኔታ ይሰራል። ትላልቅ ሰነዶች የችግሮች ምንጭ ይሆናሉ አፈጻጸም.

ከትላልቅ ድርድሮች ጋር ሰነዶችን መፍጠር

ሰነዶች ድርድሮችን ሊይዙ ይችላሉ። በድርድር ውስጥ ያሉት የንጥረ ነገሮች ብዛት ከአራት-አሃዝ ቁጥር ርቆ ​​ከሆነ ጥሩ ነው። ኤለመንቶች በተደጋጋሚ ወደ ድርድር ከተጨመሩ በውስጡ የያዘውን ሰነድ ይበቅላል እና ያስፈልገዋል አንቀሳቅስ, ይህም ማለት አስፈላጊ ይሆናል ኢንዴክሶችንም አዘምን. አንድ ትልቅ ድርድር ያለው ሰነድ እንደገና ሲጠቁሙ ኢንዴክሶቹ ብዙውን ጊዜ ይፃፋሉ፣ ምክንያቱም መዝገብኢንዴክስን የሚያከማች። ይህ ድጋሚ መረጃ ጠቋሚ ሰነድ ሲገባ ወይም ሲሰረዝም ይከሰታል።

MongoDB የሚባል ነገር አለው። "ሙላ ምክንያት", ይህም ይህንን ችግር ለመቀነስ ሰነዶች እንዲያድጉ ቦታ ይሰጣል.
ያለ ድርድር መረጃ ጠቋሚ ማድረግ እንደሚችሉ ያስቡ ይሆናል። እንደ አለመታደል ሆኖ የኢንዴክሶች እጥረት ሌሎች ችግሮች ሊያጋጥሙዎት ይችላሉ። ሰነዶች ከመጀመሪያው እስከ መጨረሻው ስለሚቃኙ በድርድሩ መጨረሻ ላይ ክፍሎችን መፈለግ ረዘም ያለ ጊዜ ይወስዳል እና ከእንደዚህ ዓይነት ሰነድ ጋር የተያያዙ አብዛኛዎቹ ስራዎች ቀርፋፋ.

በስብስብ ውስጥ የእርከኖች ቅደም ተከተል አስፈላጊ መሆኑን አይርሱ

በመረጃ ቋት (ዳታቤዝ) ስርዓት መጠይቅ አመቻች ያለው፣ የሚጽፏቸው ጥያቄዎች እንዴት ማግኘት እንደሚችሉ ሳይሆን ምን ማግኘት እንደሚፈልጉ ማብራሪያዎች ናቸው። ይህ ዘዴ የሚሠራው በአንድ ምግብ ቤት ውስጥ ከማዘዝ ጋር በማነፃፀር ነው-ብዙውን ጊዜ በቀላሉ ምግብ ያዛሉ እና ለማብሰያው ዝርዝር መመሪያዎችን አይስጡ።

በሞንጎዲቢ ውስጥ ምግብ ማብሰያውን ያስተምራሉ. ለምሳሌ, ውሂቡ ማለፉን ማረጋገጥ አለብዎት reduce በተቻለ ፍጥነት በቧንቧ በመጠቀም $match и $project, እና መደርደር የሚከሰተው በኋላ ብቻ ነው reduce, እና ፍለጋው በትክክል በሚፈልጉት ቅደም ተከተል ይከናወናል. አላስፈላጊ ስራን የሚያስወግድ፣በተቻለ መጠን ቅደም ተከተሎችን የሚይዝ እና የመቀላቀል አይነቶችን የሚመርጥ መጠይቅ አመቻች መኖሩ ሊያበላሽ ይችላል። በMongoDB፣ በምቾት ዋጋ የበለጠ ቁጥጥር አለዎት።

እንደ መሳሪያዎች ስቱዲዮ 3ቲ በ ውስጥ የመደመር ጥያቄዎችን ግንባታ ቀላል ያደርገዋል MongODB. የ Aggregation Editor ባህሪ የቧንቧ መስመር መግለጫዎችን አንድ ጊዜ በአንድ ጊዜ እንዲተገብሩ ይፈቅድልዎታል, እና ማረም ለማቃለል በእያንዳንዱ ደረጃ የግብአት እና የውጤት መረጃን ይፈትሹ.

ፈጣን ቀረጻ በመጠቀም

MongoDB የመጻፍ አማራጮችን በከፍተኛ ፍጥነት ነገር ግን ዝቅተኛ አስተማማኝነት እንዲኖረው በፍጹም አታስቀምጥ። ይህ ሁነታ "ፋይል-እና-መርሳት" ፈጣን ይመስላል ምክንያቱም ጽሑፉ ከመከሰቱ በፊት ትዕዛዙ ይመለሳል. ውሂቡ ወደ ዲስክ ከመጻፉ በፊት ስርዓቱ ከተበላሸ ይጠፋል እና ወደ ወጥነት በሌለው ሁኔታ ያበቃል። እንደ እድል ሆኖ፣ 64-ቢት MongoDB መግባት ነቅቷል።

ይህንን ለመከላከል የኤምኤምኤፒቪ1 እና የዋይሬድቲገር ማከማቻ ሞተሮች ምዝግብ ማስታወሻን ይጠቀማሉ፣ ምንም እንኳን WiredTiger ወደ መጨረሻው ወጥነት ሊያገግም ቢችልም የመቆጣጠሪያ ነጥብመዝገቡ ከተሰናከለ።

ጆርናል ማድረግ የመረጃ ቋቱ ከተመለሰ በኋላ ወጥነት ባለው ሁኔታ ውስጥ መሆኑን ያረጋግጣል እና ወደ መጽሔቱ እስኪጻፍ ድረስ ሁሉንም መረጃዎች ያቆያል። የመቅጃው ድግግሞሽ መለኪያውን በመጠቀም ይዋቀራል። commitIntervalMs.

ስለ ግቤቶች እርግጠኛ ለመሆን፣ በማዋቀሪያው ፋይል ውስጥ መግባት መንቃቱን ያረጋግጡ (storage.journal.enabled), እና የተቀዳው ድግግሞሽ እርስዎ ሊያጡ ከሚችሉት የመረጃ መጠን ጋር ይዛመዳል.

ያለ መረጃ ጠቋሚ መደርደር

ሲፈልጉ እና ሲዋሃዱ ብዙ ጊዜ ውሂብ መደርደር ያስፈልጋል። የተደረደሩትን የውሂብ መጠን ለመቀነስ ውጤቱን ካጣራ በኋላ ይህ በመጨረሻዎቹ ደረጃዎች በአንዱ እንደሚደረግ ተስፋ እናድርግ። እና በዚህ ሁኔታ ውስጥ እንኳን, ለመደርደር ያስፈልግዎታል መረጃ ጠቋሚ. ነጠላ ወይም ውሁድ ኢንዴክስ መጠቀም ይችላሉ።

ተስማሚ ኢንዴክስ ከሌለ MongoDB ያለሱ ያደርገዋል። በሁሉም ሰነዶች አጠቃላይ መጠን 32 ሜባ የማህደረ ትውስታ ገደብ አለ። የመደርደር ስራዎችእና MongoDB እዚህ ገደብ ላይ ከደረሰ፣ ወይ ስህተት ይጥላል ወይም ይመለሳል ባዶ መዝገብ.

ያለ መረጃ ጠቋሚ ድጋፍ ይፈልጉ

የፍለጋ መጠይቆች በSQL ውስጥ ካለው የJOIN አሠራር ጋር ተመሳሳይ የሆነ ተግባር ያከናውናሉ። በተሻለ ሁኔታ ለመስራት እንደ የውጭ ቁልፍ ጥቅም ላይ የዋለውን ቁልፍ እሴት መረጃ ጠቋሚ ያስፈልጋቸዋል. አጠቃቀሙ ስላልተንጸባረቀ ይህ ግልጽ አይደለም explain(). እንደነዚህ ያሉት ኢንዴክሶች ከተፃፈው መረጃ ጠቋሚ በተጨማሪ ናቸው explain(), እሱም በተራው በቧንቧ ኦፕሬተሮች ጥቅም ላይ ይውላል $match и $sort, በቧንቧው መጀመሪያ ላይ ሲገናኙ. ኢንዴክሶች አሁን ማንኛውንም ደረጃ ሊሸፍኑ ይችላሉ የመደመር ቧንቧ መስመር.

ባለብዙ-ዝማኔዎችን ከመጠቀም መርጦ መውጣት

ዘዴ db.collection.update() እርስዎ በገለጹት ግቤት ላይ በመመስረት የነባር ሰነድን ክፍል ወይም ሙሉውን ሰነድ እስከ ሙሉ ምትክ ድረስ ለመለወጥ ይጠቅማል። update. በጣም ግልጽ ያልሆነው ምርጫውን ካላዘጋጁ በስተቀር ሁሉንም ሰነዶች በክምችት ውስጥ አያስኬድም multi የጥያቄውን መስፈርት የሚያሟሉ ሰነዶችን ሁሉ ለማዘመን.

በሃሽ ሠንጠረዥ ውስጥ የቁልፎችን ቅደም ተከተል አስፈላጊነት አይርሱ

በJSON ውስጥ፣ አንድ ነገር ያልታዘዘ የዜሮ መጠን ወይም ከዚያ በላይ ስም/እሴት ጥንዶችን ያቀፈ ነው፣ ስሙ ሕብረቁምፊ እና እሴት ሕብረቁምፊ፣ ቁጥር፣ ቡሊያን፣ ባዶ፣ ዕቃ ወይም ድርድር ነው።

እንደ አለመታደል ሆኖ BSON ሲፈልጉ በትዕዛዝ ላይ ትልቅ ትኩረት ይሰጣል። በMongoDB፣ አብሮ በተሰራ ዕቃዎች ውስጥ ያሉ የቁልፍ ቅደም ተከተል ጉዳዮችማለትም, { firstname: "Phil", surname: "factor" } - ይህ ተመሳሳይ አይደለም { { surname: "factor", firstname: "Phil" }. ማለትም፣ እነሱን ለማግኘት እርግጠኛ ለመሆን ከፈለጉ በሰነዶችዎ ውስጥ የስም/የእሴት ጥንዶች ቅደም ተከተል ማከማቸት አለብዎት።

ግራ አትጋቡ "ባዶ" и "ያልተገለጸ"

ዋጋ "ያልተገለጸ" በJSON ውስጥ ፈጽሞ የሚሰራ አልነበረም፣ እንደሚለው ኦፊሴላዊ ደረጃ JSON (ECMA-404 ክፍል 5) ምንም እንኳን በጃቫስክሪፕት ጥቅም ላይ የዋለ ቢሆንም። ከዚህም በላይ ለ BSON ጊዜው ያለፈበት እና ወደ ተለውጧል $null, ይህም ሁልጊዜ ጥሩ መፍትሔ አይደለም. ከመጠቀም ተቆጠብ "ያልተገለጸ" በሞንጎዲቢ.

ተጠቀም $limit() ያለ $sort()

ብዙ ጊዜ በMongoDB ውስጥ በሚገነቡበት ጊዜ፣ ከጥያቄ ወይም ከድምር የሚመለሰውን የውጤት ናሙና ማየት ብቻ ጠቃሚ ነው። ለዚህ ተግባር ያስፈልግዎታል $limit(), ነገር ግን ከዚህ በፊት ካልተጠቀሙበት በስተቀር በመጨረሻው ኮድ ውስጥ በጭራሽ መሆን የለበትም $sort. ይህ መካኒክ አስፈላጊ ነው ምክንያቱም አለበለዚያ የውጤቱን ቅደም ተከተል ማረጋገጥ አይችሉም, እና ውሂቡን በአስተማማኝ ሁኔታ ማየት አይችሉም. በውጤቱ አናት ላይ እንደ ምደባው የተለያዩ ግቤቶችን ያገኛሉ. በአስተማማኝ ሁኔታ ለመስራት፣ መጠይቆች እና ውህደቶች ቆራጥ መሆን አለባቸው፣ ማለትም፣ በተፈጸሙ ቁጥር ተመሳሳይ ውጤት ያስገኛሉ። የያዘ ኮድ $limit(), ግን አይደለም $sort, ቆራጥ አይሆንም እና በመቀጠልም ለመከታተል አስቸጋሪ የሆኑ ስህተቶችን ሊያስከትል ይችላል.

መደምደሚያ

በMongoDB የሚያሳዝኑበት ብቸኛው መንገድ እሱን ከሌላ የውሂብ ጎታ እንደ ዲቢኤምኤስ ጋር ማወዳደር ወይም በተወሰኑ ተስፋዎች ላይ በመመስረት እሱን ለመጠቀም መምጣት ነው። ብርቱካንን ከሹካ ጋር እንደማወዳደር ነው። የውሂብ ጎታ ስርዓቶች የተወሰኑ ዓላማዎችን ያገለግላሉ. እነዚህን ልዩነቶች በቀላሉ መረዳት እና ማድነቅ ጥሩ ነው። የሞንጎዲቢ ገንቢዎችን በዲቢኤምኤስ መንገድ እንዲወርዱ በሚያስገድድ መንገድ ላይ ጫና ማድረግ አሳፋሪ ነው። እንደ የውሂብ ታማኝነት ማረጋገጥ እና ውድቀትን እና ተንኮል-አዘል ጥቃቶችን መቋቋም የሚችሉ የውሂብ ስርዓቶችን መፍጠር ያሉ የቆዩ ችግሮችን ለመፍታት አዲስ እና አስደሳች መንገዶችን ማየት እፈልጋለሁ።

የሞንጎዲቢ የኤሲአይዲ ግብይት በስሪት 4.0 ማስተዋወቁ ጠቃሚ ማሻሻያዎችን በፈጠራ መንገድ ለማስተዋወቅ ጥሩ ምሳሌ ነው። ባለብዙ ሰነድ እና ባለ ብዙ መግለጫ ግብይቶች አሁን አቶሚክ ናቸው። በተጨማሪም መቆለፊያዎችን ለማግኘት እና የተጣበቁ ግብይቶችን ለማቆም የሚያስፈልገውን ጊዜ ማስተካከል እንዲሁም የመገለል ደረጃን መቀየር ይቻላል.

በMongoDB ከመጀመሬ በፊት ባውቃቸው 14 ነገሮች

ተጨማሪ ያንብቡ፡

ምንጭ: hab.com

አስተያየት ያክሉ