De oersetting fan it artikel waard taret op 'e foarjûn fan it begjin fan' e kursus
Hichtepunten:
- It is ekstreem wichtich om in skema te ûntwikkeljen, ek al is it opsjoneel yn MongoDB.
- Likemin moatte yndeksen oerienkomme mei jo skema en tagongspatroanen.
- Mije it brûken fan grutte objekten en grutte arrays.
- Wês foarsichtich mei MongoDB-ynstellingen, foaral as it giet om feiligens en betrouberens.
- MongoDB hat gjin query-optimizer, dus jo moatte foarsichtich wêze by it útfieren fan query-operaasjes.
Ik wurke al in hiel lange tiid mei databases, mar ûntduts pas koartlyn MongoDB. D'r binne in pear dingen dy't ik woe dat ik wist foardat ik dermei begon te wurkjen. As in persoan al ûnderfining hat op in bepaald fjild, hawwe se foaropfettings oer wat databases binne en wat se dogge. Yn 'e hoop om it makliker te meitsjen foar oaren om te begripen, presintearje ik in list mei mienskiplike flaters.
It meitsjen fan in MongoDB-tsjinner sûnder autentikaasje
Spitigernôch is MongoDB standert ynstalleare sûnder autentikaasje. Foar in wurkstasjon dat lokaal tagong is, is dizze praktyk normaal. Mar om't MongoDB in systeem mei meardere brûkers is dat graach grutte hoemannichten ûnthâld brûke, sil it better wêze as jo it op in server sette mei safolle mooglik RAM, sels as jo it allinich sille brûke foar ûntwikkeling. Ynstallaasje op 'e tsjinner fia de standertpoarte kin problematysk wêze, foaral as in javascript-koade kin wurde útfierd yn it fersyk (bygelyks, $where
as idee foar
D'r binne ferskate autentikaasjemetoaden, mar de maklikste is in brûker ID / wachtwurd yn te stellen. Brûk dit idee wylst jo tinke oer fancy autentikaasje basearre op
Ferjit net it oanfalsflak te binen oan MongoDB
,
of
. Sûnt gegevensbestannen net fersifere binne yn standert MongoDB, makket it sin om MongoDB mei út te fieren
Flater by it ûntwikkeljen fan it circuit
MongoDB brûkt gjin skema. Mar dit betsjut net dat it skema net nedich is. As jo gewoan dokuminten wolle opslaan sûnder ienich konsekwint patroan, kin it opslaan fan se fluch en maklik wêze, mar it opheljen fan se letter kin lestich wêze.
Klassyk artikel "
Ferjit de sortearring net
It ferjitten fan sortearring kin mear frustraasje feroarsaakje en mear tiid fergrieme dan elke oare ferkearde konfiguraasje. Standert brûkt MongoBD
Meitsje kolleksjes mei grutte dokuminten
MongoDB is bliid om grutte dokuminten te hostjen oant 16MB yn kolleksjes, en
It meitsjen fan dokuminten mei grutte arrays
Dokuminten kinne arrays befetsje. It is it bêste as it oantal eleminten yn 'e array fier fan in fjouwer-sifers nûmer is. As eleminten faak wurde tafoege oan in array, sil it útgroeie fan it dokumint dat it befettet en sil moatte wurde
MongoDB hat wat neamd
Jo kinne tinke dat jo kinne dwaan sûnder array-yndeksearring. Spitigernôch kin it ûntbrekken fan yndeksen jo oare problemen feroarsaakje. Sûnt dokuminten wurde skansearre fan begjin oant ein, sil it sykjen nei eleminten oan 'e ein fan' e array langer duorje, en de measte operaasjes dy't ferbûn binne mei sa'n dokumint
Ferjit net dat de folchoarder fan 'e stadia yn in aggregaasje wichtich is
Yn in databanksysteem mei in query-optimizer binne de fragen dy't jo skriuwe ferklearrings fan wat jo wolle krije, net hoe't jo it krije. Dit meganisme wurket nei analogy mei it bestellen yn in restaurant: gewoanlik bestelle jo gewoan in skûtel, en jouwe gjin detaillearre ynstruksjes oan 'e kok.
Yn MongoDB ynstruearje jo de kok. Jo moatte bygelyks derfoar soargje dat de gegevens trochgeane reduce
sa betiid mooglik yn 'e pipeline mei help $match
и $project
, en sortearring komt pas nei reduce
, en dat it sykjen bart yn krekt de folchoarder dy't jo wolle. It hawwen fan in query optimizer dat elimineert ûnnedich wurk, optimaal sekwinsjes stappen, en selektearje join typen kin bedjerre jo. Mei MongoDB hawwe jo mear kontrôle op kosten fan gemak.
Tools lykas
Mei help fan Quick Recording
Nea ynstelle MongoDB skriuwopsjes om hege snelheid mar lege betrouberens te hawwen. Dizze modus "bestân-en-ferjitte" liket fluch om't it kommando wurdt weromjûn foardat it skriuwen bart. As it systeem crasht foardat de gegevens op skiif skreaun binne, sille se ferlern gean en einigje yn in inkonsistente steat. Gelokkich hat 64-bit MongoDB logging ynskeakele.
De MMAPv1- en WiredTiger-opslachmotoren brûke logging om dit te foarkommen, hoewol WiredTiger kin weromhelje nei de lêste konsistente
Journaling soarget derfoar dat de databank is yn in konsekwinte steat nei herstel en behâldt alle gegevens oant it wurdt skreaun nei it log. De frekwinsje fan opnames wurdt ynsteld mei de parameter
.
Om wis te wêzen fan de yngongen, soargje derfoar dat logging ynskeakele is yn it konfiguraasjetriem
, en de frekwinsje fan opnames komt oerien mei it bedrach fan ynformaasje dat jo kinne betelje te ferliezen.
Sortearje sûnder yndeks
By it sykjen en aggregearjen is d'r faaks needsaak om gegevens te sortearjen. Litte wy hoopje dat dit wurdt dien yn ien fan 'e lêste stadia, nei it filterjen fan it resultaat om it bedrach fan sorteare gegevens te ferminderjen. En sels yn dit gefal sil jo nedich wêze foar sortearjen
As d'r gjin geskikte yndeks is, sil MongoDB sûnder it dwaan. D'r is in ûnthâldlimyt fan 32 MB op 'e totale grutte fan alle dokuminten yn
Sykje sûnder yndeksstipe
Sykfragen útfiere in funksje fergelykber mei de JOIN-operaasje yn SQL. Om it bêste te wurkjen, hawwe se de yndeks nedich fan 'e wearde fan' e kaai dy't brûkt wurdt as de frjemde kaai. Dit is net dúdlik, om't it gebrûk net yn wjerspegele wurdt explain()
. Sokke yndeksen binne neist de yndeks skreaun explain()
, dy't op syn beurt wurdt brûkt troch pipeline operators $match
и $sort
, as se oan it begjin fan 'e pipeline moetsje. Yndeksen kinne no elke poadium dekke
Opjaan foar it brûken fan multi-updates
Metoade
brûkt om in diel fan in besteand dokumint of it hiele dokumint te feroarjen, oant in folsleine ferfanging, ôfhinklik fan de parameter dy't jo oantsjutte
. Wat net sa dúdlik is, is dat it net alle dokuminten yn 'e kolleksje sil ferwurkje, útsein as jo de opsje ynstelle
om alle dokuminten te aktualisearjen dy't foldogge oan de fersykkritearia.
Ferjit net it belang fan 'e folchoarder fan' e toetsen yn in hash-tabel
Yn JSON, in foarwerp bestiet út in net-oardere kolleksje fan grutte nul of mear namme / wearde pearen, dêr't namme is in tekenrige en wearde is in tekenrige, nûmer, boolean, null, foarwerp, of array.
Spitigernôch leit BSON in protte klam op bestelling by it sykjen. Yn MongoDB, de folchoarder fan toetsen binnen ynboude objekten { firstname: "Phil", surname: "factor" }
- dit is net itselde as { { surname: "factor", firstname: "Phil" }
. Dat is, jo moatte de folchoarder fan namme- / weardepearen yn jo dokuminten opslaan as jo wis wolle wêze dat jo se fine.
Wês net betize "Nul" и "ûndefiniearre"
wearde "ûndefiniearre" wie nea jildich yn JSON, neffens $null
, dat is net altyd in goede oplossing.
Gebrûk $limit()
sûnder $sort()
Hiel faak as jo yn MongoDB ûntwikkelje, is it handich om gewoan in stekproef te sjen fan it resultaat dat sil wurde weromjûn fan in query of aggregaasje. Foar dizze taak sille jo nedich hawwe $limit()
, mar it moat nea yn 'e definitive koade wêze, útsein as jo it earder brûke $sort
. Dit monteur is nedich omdat oars kinne jo net garandearje de folchoarder fan it resultaat, en do silst net by steat wêze om te sjen betrouber de gegevens. Oan 'e boppekant fan it resultaat krije jo ferskate yngongen ôfhinklik fan' e sortearring. Om betrouber te wurkjen, moatte queries en aggregaasjes deterministysk wêze, dat is, elke kear deselde resultaten produsearje as se wurde útfierd. Koade dy't befettet $limit()
, mar nee $sort
, sil net deterministysk wêze en kinne dêrnei flaters feroarsaakje dy't dreech op te spoaren binne.
konklúzje
De ienige manier om teloarsteld te wurden mei MongoDB is it direkt te fergelykjen mei in oare soart databank, lykas in DBMS, of om it te brûken basearre op bepaalde ferwachtingen. It is as in oranje te fergelykjen mei in foarke. Databanksystemen tsjinje spesifike doelen. It is it bêste om dizze ferskillen gewoan foar josels te begripen en te wurdearjen. It soe in skande wêze om de MongoDB-ûntwikkelders te drukken oer in paad dat har it DBMS-paad twong. Ik wol nije en nijsgjirrige manieren sjen om âlde problemen op te lossen, lykas it garandearjen fan gegevensintegriteit en it meitsjen fan gegevenssystemen dy't resistint binne foar mislearring en kweade oanfallen.
MongoDB's yntroduksje fan ACID-transaksjealiteit yn ferzje 4.0 is in goed foarbyld fan it yntrodusearjen fan wichtige ferbetteringen op in ynnovative manier. Transaksjes mei meardere dokuminten en meartalige ferklearrings binne no atoom. It is ek mooglik om de tiid oan te passen dy't nedich is om slûzen te krijen en fêste transaksjes te beëinigjen, en ek it isolaasjenivo te feroarjen.
Lês mear:
Boarne: www.habr.com