{"id":95148,"date":"2020-09-25T19:43:09","date_gmt":"2020-09-25T17:43:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb"},"modified":"2020-09-25T19:43:09","modified_gmt":"2020-09-25T17:43:09","slug":"14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","title":{"rendered":"14 asja, mida ma tahaksin teada MongoDB-ga t\u00f6\u00f6tamise alustamiseks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Artikli t\u00f5lge on koostatud kursuse alguse eel\u00f5htul <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\">\u201eMittelemata andmebaasid\u201c<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"14 asja, mida ma tahaksin teada MongoDB-ga t\u00f6\u00f6tamise alustamiseks\" src=\"\/wp-content\/uploads\/2020\/09\/9b4979be27e0090543b28150d90fa8df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Peamised punktid:<\/p>\n<ul>\n<li>On \u00e4\u00e4rmiselt oluline v\u00e4lja t\u00f6\u00f6tada skeem, kuigi MongoDBs see ei ole kohustuslik.<\/li>\n<li>Sarnaselt peavad indeksid vastama teie skeemile ja juurdep\u00e4\u00e4sude mallidele. <\/li>\n<li>V\u00e4ltige suurte objektide ja massiivide kasutamist.<\/li>\n<li>Olge MongoDB seadistustega ettevaatlik, eriti kui tegemist on turvalisuse ja usaldusv\u00e4\u00e4rsusega.<\/li>\n<li>MongoDBs ei ole p\u00e4ringute optimeerijat, seega peate olema ettevaatlik p\u00e4ringute tegemisel.<\/li>\n<\/ul>\n<p>\nOlen juba pikka aega andmebaasidega t\u00f6\u00f6tanud, kuid avastasin MongoDB alles hiljuti. On m\u00f5ned asjad, mida sooviksin teada enne selle kasutamise alustamist. Kui inimesel on teatud valdkonnas juba kogemus, siis on tal eelarvamused selle suhtes, mida andmebaasid on ja mida nad teevad. Loodan, et teiste jaoks arusaamise lihtsustamiseks esitan loetelu levinud vigadest.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>MongoDB serveri loomine ilma autentimiseta<\/h3>\n<p>\nKahjuks installitakse MongoDB vaikimisi ilma autentimiseta. Kohalikult juurdep\u00e4\u00e4suga t\u00f6\u00f6jaama jaoks on see tava normaalne. Kuid kuna MongoDB on mitme kasutajaga s\u00fcsteem, mis armastab kasutada suurt m\u00e4lu, on parem paigaldada see serverisse, kus on teie tingimustes maksimaalselt v\u00f5imalik m\u00e4lumaht, isegi kui kavatsete seda kasutada ainult arendamiseks. Serverisse paigaldamine vaikimisi pordi kaudu v\u00f5ib olla probleemne, eriti kui p\u00e4ringutes on v\u00f5imalik t\u00e4ita mis tahes JavaScripti kood (n\u00e4iteks <code>$where<\/code> ideena <noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">s\u00fcstimise<\/a><\/noindex>). <\/p>\n<p>On mitu autentimismeetodit, kuid lihtsaim on seadistada kasutaja ID\/parool. Kasutage seda ideed, kuni m\u00f5tledate keerulisema autentimise peale, mis p\u00f5hineb <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-ldap-external\/\">LDAP<\/a><\/noindex>. Kui r\u00e4\u00e4kida turvalisusest, siis MongoDB tuleks pidevalt uuendada ja logisid tuleks alati kontrollida volitamata juurdep\u00e4\u00e4su osas. N\u00e4iteks meeldib mulle valida m\u00f5ni muu port kui vaikimisi port.<\/p>\n<h3>\u00c4rge unustage siduda r\u00fcnnakupinda MongoDBga<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/\">MongoDB turvalisuse kontrollnimekiri<\/a><\/noindex> sisaldab h\u00e4id n\u00e4pun\u00e4iteid v\u00f5rgu ja andmelekke riski v\u00e4hendamiseks. On lihtne \u00f6elda, et arendussuvand ei vaja k\u00f5rget turvalisuse taset. Kuid asjad ei ole nii lihtsad ja see kehtib k\u00f5igi MongoDB serverite kohta. Eriti kui puudub kaalukas p\u00f5hjus kasutada <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/mapReduce\/#dbcmd.mapReduce\">mapReduce<\/a><\/noindex><\/code>, <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/group\/#dbcmd.group\">gruppe<\/a><\/noindex><\/code> v\u00f5i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/operator\/query\/where\/#op._S_where\">$where<\/a><\/noindex>, tuleks keelata JavaScripti kohandatud koodi kasutamine, kirjutades konfiguratsioonifaili <code><noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">javascriptEnabled:false<\/a><\/noindex><\/code>. Kuna vaikimisi MongoDB andmefailid ei ole kr\u00fcpteeritud, on m\u00f5istlik k\u00e4ivitada MongoDB koos <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/#run-mongodb-with-a-dedicated-user\">p\u00fchendatud kasutajaga<\/a><\/noindex>, kellel on t\u00e4ielik juurdep\u00e4\u00e4s failidele, mille juurdep\u00e4\u00e4s on piiratud ainult talle ja v\u00f5imalusega kasutada oma ops\u00fcsteemi failide juurdep\u00e4\u00e4suvahendeid.<\/p>\n<h3>Schema loomise vigade<\/h3>\n<p>\nMongoDB ei kasuta skeemi. Kuid see ei t\u00e4henda, et skeem ei oleks vajalik. Kui soovite lihtsalt dokumente salvestada ilma \u00fchtse skeemita, on nende salvestamine kiire ja lihtne, kuid hiljem v\u00e4lja toomine v\u00f5ib olla <noindex><a rel=\"nofollow\" href=\"https:\/\/www.compose.com\/articles\/mongodb-with-and-without-schemas\/\">kuradima keeruline<\/a><\/noindex>. <\/p>\n<p>Klassikaline artikkel \u201e<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/blog\/post\/6-rules-of-thumb-for-mongodb-schema-design-part-1\">6 empiirilist reeglit MongoDB skeemi kujundamiseks<\/a><\/noindex><\/i> on seda v\u00e4\u00e4rt, et seda lugeda, ning selliseid funktsioone nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/schema-explorer\/\">Schema Explorer<\/a><\/noindex> kolmandate osapoolte t\u00f6\u00f6riistas Studio 3T tuleks kasutada regulaarseteks skeemi kontrollideks.<\/p>\n<h3>\u00c4rge unustage sorteerimisj\u00e4rjekorda<\/h3>\n<p>\nSorteerimisj\u00e4rjekorra unustamine v\u00f5ib k\u00f5ige rohkem pettumust valmistada ja aega kaotada rohkem kui \u00fckski vale konfigureerimine. Vaikimisi kasutab MongoDB <noindex><a rel=\"nofollow\" href=\"https:\/\/jira.mongodb.org\/browse\/SERVER-1920\">binaarset sorteerimist<\/a><\/noindex>. Kuid sellest pole kellelegi kasu. Suurte ja v\u00e4ikeste t\u00e4htede ning binaarsete sorteerimiste kasutamine on olnud kummalised anahronismid koos helmeste, kaftanide ja keerlevate vuntsidega juba 80ndatel. N\u00fc\u00fcd on nende kasutamine andestamatu. Reaalses elus on \"mootorratas\" sama mis \"Mootorratas\". Ja \"Britannia\" ja \"britannia\" on sama koht. V\u00e4ike t\u00e4ht on lihtsalt suure t\u00e4he vastavuskiri. Ja \u00e4rge sundige mind r\u00e4\u00e4kima diakriitiliste m\u00e4rkide sorteerimisest. MongoDB andmebaasi loomisel kasutage sorteerimisparameetreid, mis arvestavad aktsentide ja <noindex><a rel=\"nofollow\" href=\"https:\/\/weblogs.sqlteam.com\/dang\/archive\/2009\/07\/26\/Collation-Hell-Part-1.aspx\">registreid<\/a><\/noindex>, mis vastavad s\u00fcsteemi kasutajate keelele ja <noindex><a rel=\"nofollow\" href=\"https:\/\/derickrethans.nl\/mongodb-collation-revised.html\">kultuurile<\/a><\/noindex>. See lihtsustab stringiandmete otsimist oluliselt.<\/p>\n<h3>Suure dokumentide loomine kogud<\/h3>\n<p>\nMongoDB on r\u00f5\u00f5muga paigutada suuri dokumente, mille suurus on kuni 16 MB kollektsioonidesse, kuid <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/gridfs\/#gridfs\">GridFS<\/a><\/noindex> on m\u00f5eldud dokumentide jaoks, mille suurus \u00fcletab 16 MB. Kuid ainult seet\u00f5ttu, et suuri dokumente saab sinna paigutada, ei ole nende seal hoidmine parim idee. MongoDB t\u00f6\u00f6tab k\u00f5ige paremini, kui salvestate eraldi dokumente, mille suurus on paar kilobaiti, vaadates neid pigem kui ridu laias SQL-i tabelis. Suured dokumendid v\u00f5ivad p\u00f5hjustada probleeme <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/mongodb\/comments\/573fqr\/question_mongodb_terrible_performance_for_a\/\">sooritusv\u00f5imega<\/a><\/noindex>.<\/p>\n<h3>Dokumentide loomine, millel on suured massiivid <\/h3>\n<p>\nDokumendid v\u00f5ivad sisaldada massiive. Parim oleks, kui massiivi elementide arv j\u00e4\u00e4b kaugele kaugemale neljast numbrist. Kui elemente massiivile sageli lisatakse, kasvab see dokumenti sisaldavast massiivist \u00fcle ja tuleb <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/data-model-operations\/#document-growth\">liigutada<\/a><\/noindex>, mis t\u00e4hendab, et tuleb <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/write-performance\/#document-growth\">uuendada ka indeksid<\/a><\/noindex>. Kui dokumendi sisu on suur massiiv, siis indeksid tihti uuendatakse, sest iga elemendi jaoks on olemas <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/index-multikey\/\">kanne<\/a><\/noindex>, mis hoiab selle indeksit. Selline uuesti indekseerimine toimub ka siis, kui dokumente lisatakse v\u00f5i kustutatakse. <\/p>\n<p>MongoDB-s on nii\u00f6elda <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/mmapv1\/#record-allocation-strategies\">\u00abt\u00e4ituvuskoefitsient\u00bb<\/a><\/noindex>, mis annab dokumentide kasvamiseks ruumi, et v\u00e4hendada seda probleemi miinimumini. <br \/>\nV\u00f5ite arvata, et massiivide indekseerimisest v\u00f5ib loobuda. Kahjuks v\u00f5ivad indeksite puudumise t\u00f5ttu tekkida teised probleemid. Kuna dokumente vaadatakse algusest l\u00f5puni, v\u00f5tab massiivi l\u00f5pus elementide otsimine rohkem aega, ja enamus seonduvaid toimingud sellise dokumendiga on <noindex><a rel=\"nofollow\" href=\"http:\/\/grokbase.com\/t\/gg\/mongodb-user\/128r0h5gzw\/inserting-into-300-000-size-embedded-array-is-slow-even-w-o-indexes\">aeglased<\/a><\/noindex>. <\/p>\n<h3>\u00c4rge unustage, et agregatsiooni etappide j\u00e4rjekord on oluline<\/h3>\n<p>\nK\u00fcsimusandmebaasis, millel on p\u00e4ringute optimeerija, on teie kirjutatud p\u00e4ringud seletused selle kohta, mida te soovite saada, mitte selle kohta, kuidas seda saada. See toimib sarnaselt restorani tellimisega: tavaliselt tellite lihtsalt roa, mitte ei anna kokale \u00fcksikasjalikke juhiseid.<\/p>\n<p>MongoDB-s annate te kokkadele korraldusi. N\u00e4iteks peate veenduma, et andmed l\u00e4bivad <code>reduce<\/code> nii vara kui v\u00f5imalik toru kaudu, kasutades <code>$match<\/code> ja <code>$project<\/code>, ja sortimine toimub alles hiljem. <code>reduce<\/code>, ja otsimine toimub t\u00e4pselt sellises j\u00e4rjestuses, nagu teil on vaja. K\u00fcsitavate optimeerija olemasolu, mis vabastab teid liigsetest t\u00f6\u00f6dest, korraldab etapid optimaalselt ja valib \u00fchenduse t\u00fc\u00fcbi, v\u00f5ib teid \u00e4ra hellitada. MongoDB-s on teil rohkem kontrolli mugavuse hinna \u00fcle.<\/p>\n<p>Sellised t\u00f6\u00f6riistad nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/\">Studio 3T<\/a><\/noindex> muudavad aggregeerimisp\u00e4ringute koostamise lihtsamaks <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/build-mongodb-aggregation-queries\/\">MongoDB<\/a><\/noindex>. Aggregation Editori funktsioon v\u00f5imaldab teil rakendada toruoperaatoreid \u00fcksikute etappide kaupa, samuti kontrollida igas etapis sisendi ja v\u00e4ljundi andmeid, et debugeerimine oleks lihtsam. <\/p>\n<h3>Kiire kirje kasutamine<\/h3>\n<p>\n\u00c4rge seadistage MongoDB-s k\u00f5rge kiiruseta kirje parameetreid, kuid madala usaldusv\u00e4\u00e4rsusega. See re\u017eiim <i>\u00abfile-and-forget\u00bb<\/i> tundub kiire, kuna k\u00e4sk tagastatakse enne, kui kirje tehakse. Kui s\u00fcsteem kokku kukub enne, kui andmed on kettale kirjutatud, kaovad need ja satuvad mittet\u00e4ielikku olekusse. \u00d5nneks on 64-bitises MongoDB-s logimine sisse l\u00fclitatud. <\/p>\n<p>Salvestuse MMAPv1 ja WiredTiger mootorid kasutavad logimist, et seda v\u00e4ltida, kuigi WiredTiger v\u00f5ib taastuda viimase koosk\u00f5lastatud <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/wiredtiger\/#storage-wiredtiger-checkpoints\">kontrollpunkti<\/a><\/noindex>, kui logimine on v\u00e4lja l\u00fclitatud.<\/p>\n<p>Logimine tagab, et andmebaas on taastumisel koosk\u00f5lastatud ja hoiab k\u00f5iki andmeid kuni logisse kirjutamiseni. Kirje sagedus seadistatakse parameetri kaudu <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#storage.journal.commitIntervalMs\">commitIntervalMs<\/a><\/noindex><\/code>. <\/p>\n<p>Veenduge, et logimine oleks konfiguratsioonifailis lubatud <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#configuration-file\">(storage.journal.kasutatud<\/a><\/noindex>)<\/code>, ja et kirje sagedus vastab sellele, kui palju teavet te v\u00f5ite endale lubada kaotada.<\/p>\n<h3>Sortimine ilma indeksita<\/h3>\n<p>\nAndmete otsimise ja aggregeerimise k\u00e4igus tekib sageli vajadus andmete sortimise j\u00e4rele. Lootkem, et seda tehakse \u00fche viimase etapi k\u00e4igus, p\u00e4rast tulemuste filtreerimist, et v\u00e4hendada sorteeritavate andmete hulka. Ja isegi sel juhul vajate sortimiseks <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/mongodb-index-strategy\/\">indeksit<\/a><\/noindex>. Saate kasutada \u00fcksik- v\u00f5i koostisindeksit. <\/p>\n<p>Kui sobivat indeksit ei ole, saab MongoDB hakkama ka ilma selleta. Sortimise operatsiooni kogumahu jaoks on olemas 32 MB m\u00e4lu piirang <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.org\/manual\/reference\/limits\/#Sort-Operations\">, ja kui MongoDB saavutab selle piiri, siis kas ta kuvab vigade arvu v\u00f5i tagastab<\/a><\/noindex>t\u00fchja kirje kogumi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sitepoint.com\/7-simple-speed-solutions-mongodb\/\">Otsimine ilma indeksite toetamiseta<\/a><\/noindex>.<\/p>\n<h3>Otsing ilma indeksitoega<\/h3>\n<p>\nOtsingup\u00e4ringud t\u00e4idavad sarnast funktsiooni nagu JOIN-operatsioon SQL-is. Parema toimimise jaoks vajavad nad indeksit v\u00e4listava v\u00f5tme v\u00e4\u00e4rtuse p\u00f5hjal, mida kasutatakse v\u00e4lisv\u00f5tmena. See ei ole ilmselge, kuna kasutamine ei peegeldu <code>explain()<\/code>. Sellised indeksid on t\u00e4ienduseks indeksile, mis on salvestatud <code>explain()<\/code>, mida omakorda kasutavad toruoperaatorid <code>$match<\/code> ja <code>$sort<\/code>, kui need esinevad toru alguses. Indeksid v\u00f5ivad n\u00fc\u00fcd katta mistahes etappi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/aggregation-pipeline\/#aggregation-pipeline-operators-and-performance\">aggregeerimistorustikus<\/a><\/noindex>. <\/p>\n<h3>Mitme uuenduse kasutamisest loobumine<\/h3>\n<p>\nMeetod <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/\">db.kogu.uuendus()<\/a><\/noindex><\/code> kasutatakse olemasoleva dokumendi osa v\u00f5i kogu dokumendi muutmiseks, s\u00f5ltuvalt teie m\u00e4\u00e4ratud parameetrist, kuni t\u00e4ieliku asendamiseni <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#update-parameter\">update<\/a><\/noindex><\/code>. Ei ole nii ilmne, et see ei t\u00f6\u00f6tle k\u00f5iki dokumente kollektsioonis, kui te ei m\u00e4\u00e4ra parameetrit <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#multi-parameter\">mitme<\/a><\/noindex><\/code> k\u00f5ikide dokumentide uuendamiseks, mis vastavad p\u00e4ringu kriteeriumitele.<\/p>\n<h3>\u00c4rge unustage v\u00f5tmete j\u00e4rjekorra t\u00e4htsust hajusates tabelites.<\/h3>\n<p>\nJSON-is koosneb objekt mittej\u00e4rgnevast kollektsioonist, mille suurus on null v\u00f5i enam nimede\/v\u00e4\u00e4rtuste paari, kus nimi on string ja v\u00e4\u00e4rtus on string, number, loogiline v\u00e4\u00e4rtus, null, objekt v\u00f5i massiiv.<\/p>\n<p>Kahjuks omab BSON otsimise ajal j\u00e4rjekorra osas suurt t\u00e4htsust. MongoDB-s peab sisseehitatud objektide v\u00f5tmete j\u00e4rjekord <noindex><a rel=\"nofollow\" href=\"http:\/\/devblog.me\/wtf-mongo\">oma v\u00e4\u00e4rtuseks<\/a><\/noindex>, st <code>{ firstname: \"Phil\", surname: \"factor\" }<\/code> ei ole sama mis <code>{ { surname: \"factor\", firstname: \"Phil\" }}<\/code>. See t\u00e4hendab, et peate dokumentides hoidma nimede\/ v\u00e4\u00e4rtuste paaride j\u00e4rjekorra, kui soovite olla kindel, et leiate need.<\/p>\n<h3>\u00c4rge segage kokku <i>\"null\"<\/i> ja <i>\"undefined\"<\/i><\/h3>\n<p>\nT\u00e4hendus <i>\"undefined\"<\/i> ei ole kunagi olnud lubatud JSON-is, vastavalt <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ecma-international.org\/publications\/files\/ECMA-ST\/ECMA-404.pdf\">ametlikule standardile<\/a><\/noindex> JSON (ECMA-404, jaotis 5), hoolimata sellest, et seda kasutatakse JavaScriptis. Veelgi enam, BSON jaoks on see aegunud ja muundatakse <code>$null<\/code>, mis ei ole alati hea lahendus. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/meteor\/meteor\/issues\/1646#issuecomment-29682964\">V\u00e4ltige kasutamist <i>\"undefined\"<\/i> MongoDB-s<\/a><\/noindex>.<\/p>\n<h3>Kasutamine <code>$limit()<\/code> ilma <code>$sort()<\/code><\/h3>\n<p>\nV\u00e4ga tihti, kui arendate MongoDB-s, on kasulik lihtsalt n\u00e4ha tulemuse n\u00e4idist, mis p\u00e4ringust v\u00f5i aggregeerimisest tagasi tuleb. Selle \u00fclesande jaoks on teil kasu <code>$limit()<\/code>, kuid seda ei tohi kunagi olla l\u00f5ppversioonis koodis, kui te ei kasuta seda enne <code>$sort<\/code>. See mekanism on vajalik, kuna muidu ei saa te garanteerida tulemuste j\u00e4rjekorda ja ei saa usaldusv\u00e4\u00e4rselt andmeid vaadata. Tulemuste \u00fclaservas saate erinevaid kirjeid s\u00f5ltuvalt sorteerimisest. Usaldusv\u00e4\u00e4rseks toimimiseks peavad p\u00e4ringud ja aggregeerimised olema deterministlikud, st andma iga t\u00e4itmise korral samu tulemusi. Kood, milles on <code>$limit()<\/code>, kuid ei ole <code>$sort<\/code>, ei ole deterministlik ja v\u00f5ib hiljem p\u00f5hjustada vigu, mida on raske j\u00e4lgida.<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nAinus viis, kuidas MongoDBs \u00fcldse pettuda, on v\u00f5rrelda seda otseselt teist t\u00fc\u00fcpi andmebaaside, n\u00e4iteks S\u00dcB, v\u00f5i kasutada seda teatud ootuste p\u00f5hjal. See on sama, mis v\u00f5rrelda apelsini kahvliga. Andmebaasis\u00fcsteemid j\u00e4lgivad teatud eesm\u00e4rke. Parim on lihtsalt m\u00f5ista ja hinnata neid erinevusi. Oleks h\u00e4bi suruda MongoDB arendajaid nende valikute p\u00e4rast, mis on sundinud neid liikuma S\u00dcB teed. Ma soovin n\u00e4ha uusi ja huvitavaid viise vanade probleemide, n\u00e4iteks andmete terviklikkuse tagamise ja vigadele ning h\u00e4kkerite r\u00fcnnakutele vastupidavate andmes\u00fcsteemide loomise lahendamiseks.<\/p>\n<p>MongoDB 4.0 versioonis ACID tehingute rakendamine on hea n\u00e4ide oluliste parenduste uuenduslikust rakendamisest. Multi-dokumendilised ja multi-tegevuslikud tehingud on n\u00fc\u00fcd atomaarset laadi. Samuti on saadaval v\u00f5imalus reguleerida aega, mis on vajalik lukustuste saamiseks, ja l\u00f5petada kinni j\u00e4\u00e4nud tehingud ning muuta isoleerimise taset.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\"><img decoding=\"async\" alt=\"14 asja, mida ma tahaksin teada MongoDB-ga t\u00f6\u00f6tamise alustamiseks\" src=\"\/wp-content\/uploads\/2020\/09\/9966ff2613efab52aac99c2a0eda5c87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h3>Loe edasi:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/519340\/\">Kuidas andmeid Google BigQuerysse laadida<\/a><\/noindex><\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/520412\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u041a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 MongoDB \u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0418\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 MongoDB, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 MongoDB [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd4714 asja, mida ma soovin, et oleksin teadnud enne MongoDB-ga alustamist | ProHoster","description":"Artikli t\u00f5lge on koostatud enne kursuse algust \"Mitte-relationaalsed andmebaasid.\"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-25T17:43:09+00:00","article:modified_time":"2020-09-25T17:43:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95148","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:11:32","updated":"2022-10-03 07:39:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=95148"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95148\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95149"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}