Artikli tÔlge on koostatud kursuse alguse eelÔhtul .

Peamised punktid:
- On ÀÀrmiselt oluline vÀlja töötada skeem, kuigi MongoDBs see ei ole kohustuslik.
- Sarnaselt peavad indeksid vastama teie skeemile ja juurdepÀÀsude mallidele.
- VĂ€ltige suurte objektide ja massiivide kasutamist.
- Olge MongoDB seadistustega ettevaatlik, eriti kui tegemist on turvalisuse ja usaldusvÀÀrsusega.
- MongoDBs ei ole pÀringute optimeerijat, seega peate olema ettevaatlik pÀringute tegemisel.
Olen juba pikka aega andmebaasidega töötanud, kuid avastasin MongoDB alles hiljuti. On mÔned 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.
MongoDB serveri loomine ilma autentimiseta
Kahjuks installitakse MongoDB vaikimisi ilma autentimiseta. Kohalikult juurdepÀÀsuga tööjaama jaoks on see tava normaalne. Kuid kuna MongoDB on mitme kasutajaga sĂŒsteem, mis armastab kasutada suurt mĂ€lu, on parem paigaldada see serverisse, kus on teie tingimustes maksimaalselt vĂ”imalik mĂ€lumaht, isegi kui kavatsete seda kasutada ainult arendamiseks. Serverisse paigaldamine vaikimisi pordi kaudu vĂ”ib olla probleemne, eriti kui pĂ€ringutes on vĂ”imalik tĂ€ita mis tahes JavaScripti kood (nĂ€iteks $where ideena ).
On mitu autentimismeetodit, kuid lihtsaim on seadistada kasutaja ID/parool. Kasutage seda ideed, kuni mÔtledate keerulisema autentimise peale, mis pÔhineb . Kui rÀÀkida turvalisusest, siis MongoDB tuleks pidevalt uuendada ja logisid tuleks alati kontrollida volitamata juurdepÀÀsu osas. NÀiteks meeldib mulle valida mÔni muu port kui vaikimisi port.
Ărge unustage siduda rĂŒnnakupinda MongoDBga
sisaldab hĂ€id nĂ€punĂ€iteid vĂ”rgu ja andmelekke riski vĂ€hendamiseks. On lihtne öelda, et arendussuvand ei vaja kĂ”rget turvalisuse taset. Kuid asjad ei ole nii lihtsad ja see kehtib kĂ”igi MongoDB serverite kohta. Eriti kui puudub kaalukas pĂ”hjus kasutada , vĂ”i , tuleks keelata JavaScripti kohandatud koodi kasutamine, kirjutades konfiguratsioonifaili . Kuna vaikimisi MongoDB andmefailid ei ole krĂŒpteeritud, on mĂ”istlik kĂ€ivitada MongoDB koos , kellel on tĂ€ielik juurdepÀÀs failidele, mille juurdepÀÀs on piiratud ainult talle ja vĂ”imalusega kasutada oma opsĂŒsteemi failide juurdepÀÀsuvahendeid.
Schema loomise vigade
MongoDB ei kasuta skeemi. Kuid see ei tĂ€henda, et skeem ei oleks vajalik. Kui soovite lihtsalt dokumente salvestada ilma ĂŒhtse skeemita, on nende salvestamine kiire ja lihtne, kuid hiljem vĂ€lja toomine vĂ”ib olla .
Klassikaline artikkel â on seda vÀÀrt, et seda lugeda, ning selliseid funktsioone nagu kolmandate osapoolte tööriistas Studio 3T tuleks kasutada regulaarseteks skeemi kontrollideks.
Ărge unustage sorteerimisjĂ€rjekorda
SorteerimisjĂ€rjekorra unustamine vĂ”ib kĂ”ige rohkem pettumust valmistada ja aega kaotada rohkem kui ĂŒkski vale konfigureerimine. Vaikimisi kasutab MongoDB . Kuid sellest pole kellelegi kasu. Suurte ja vĂ€ikeste tĂ€htede ning binaarsete sorteerimiste kasutamine on olnud kummalised anahronismid koos helmeste, kaftanide ja keerlevate vuntsidega juba 80ndatel. NĂŒĂŒd on nende kasutamine andestamatu. Reaalses elus on "mootorratas" sama mis "Mootorratas". Ja "Britannia" ja "britannia" on sama koht. VĂ€ike tĂ€ht on lihtsalt suure tĂ€he vastavuskiri. Ja Ă€rge sundige mind rÀÀkima diakriitiliste mĂ€rkide sorteerimisest. MongoDB andmebaasi loomisel kasutage sorteerimisparameetreid, mis arvestavad aktsentide ja , mis vastavad sĂŒsteemi kasutajate keelele ja . See lihtsustab stringiandmete otsimist oluliselt.
Suure dokumentide loomine kogud
MongoDB on rÔÔmuga paigutada suuri dokumente, mille suurus on kuni 16 MB kollektsioonidesse, kuid on mĂ”eldud dokumentide jaoks, mille suurus ĂŒletab 16 MB. Kuid ainult seetĂ”ttu, et suuri dokumente saab sinna paigutada, ei ole nende seal hoidmine parim idee. MongoDB töötab kĂ”ige paremini, kui salvestate eraldi dokumente, mille suurus on paar kilobaiti, vaadates neid pigem kui ridu laias SQL-i tabelis. Suured dokumendid vĂ”ivad pĂ”hjustada probleeme .
Dokumentide loomine, millel on suured massiivid
Dokumendid vĂ”ivad sisaldada massiive. Parim oleks, kui massiivi elementide arv jÀÀb kaugele kaugemale neljast numbrist. Kui elemente massiivile sageli lisatakse, kasvab see dokumenti sisaldavast massiivist ĂŒle ja tuleb , mis tĂ€hendab, et tuleb . Kui dokumendi sisu on suur massiiv, siis indeksid tihti uuendatakse, sest iga elemendi jaoks on olemas , mis hoiab selle indeksit. Selline uuesti indekseerimine toimub ka siis, kui dokumente lisatakse vĂ”i kustutatakse.
MongoDB-s on niiöelda , mis annab dokumentide kasvamiseks ruumi, et vÀhendada seda probleemi miinimumini.
VÔite arvata, et massiivide indekseerimisest vÔib loobuda. Kahjuks vÔivad indeksite puudumise tÔttu tekkida teised probleemid. Kuna dokumente vaadatakse algusest lÔpuni, vÔtab massiivi lÔpus elementide otsimine rohkem aega, ja enamus seonduvaid toimingud sellise dokumendiga on .
Ărge unustage, et agregatsiooni etappide jĂ€rjekord on oluline
KĂŒsimusandmebaasis, millel on pĂ€ringute optimeerija, on teie kirjutatud pĂ€ringud 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 ĂŒksikasjalikke juhiseid.
MongoDB-s annate te kokkadele korraldusi. NĂ€iteks peate veenduma, et andmed lĂ€bivad reduce nii vara kui vĂ”imalik toru kaudu, kasutades $match ja $project, ja sortimine toimub alles hiljem. reduce, ja otsimine toimub tĂ€pselt sellises jĂ€rjestuses, nagu teil on vaja. KĂŒsitavate optimeerija olemasolu, mis vabastab teid liigsetest töödest, korraldab etapid optimaalselt ja valib ĂŒhenduse tĂŒĂŒbi, vĂ”ib teid Ă€ra hellitada. MongoDB-s on teil rohkem kontrolli mugavuse hinna ĂŒle.
Sellised tööriistad nagu muudavad aggregeerimispĂ€ringute koostamise lihtsamaks . Aggregation Editori funktsioon vĂ”imaldab teil rakendada toruoperaatoreid ĂŒksikute etappide kaupa, samuti kontrollida igas etapis sisendi ja vĂ€ljundi andmeid, et debugeerimine oleks lihtsam.
Kiire kirje kasutamine
Ărge seadistage MongoDB-s kĂ”rge kiiruseta kirje parameetreid, kuid madala usaldusvÀÀrsusega. See reĆŸiim «file-and-forget» tundub kiire, kuna kĂ€sk tagastatakse enne, kui kirje tehakse. Kui sĂŒsteem kokku kukub enne, kui andmed on kettale kirjutatud, kaovad need ja satuvad mittetĂ€ielikku olekusse. Ănneks on 64-bitises MongoDB-s logimine sisse lĂŒlitatud.
Salvestuse MMAPv1 ja WiredTiger mootorid kasutavad logimist, et seda vĂ€ltida, kuigi WiredTiger vĂ”ib taastuda viimase kooskĂ”lastatud , kui logimine on vĂ€lja lĂŒlitatud.
Logimine tagab, et andmebaas on taastumisel kooskÔlastatud ja hoiab kÔiki andmeid kuni logisse kirjutamiseni. Kirje sagedus seadistatakse parameetri kaudu .
Veenduge, et logimine oleks konfiguratsioonifailis lubatud ), ja et kirje sagedus vastab sellele, kui palju teavet te vÔite endale lubada kaotada.
Sortimine ilma indeksita
Andmete otsimise ja aggregeerimise kĂ€igus tekib sageli vajadus andmete sortimise jĂ€rele. Lootkem, et seda tehakse ĂŒhe viimase etapi kĂ€igus, pĂ€rast tulemuste filtreerimist, et vĂ€hendada sorteeritavate andmete hulka. Ja isegi sel juhul vajate sortimiseks . Saate kasutada ĂŒksik- vĂ”i koostisindeksit.
Kui sobivat indeksit ei ole, saab MongoDB hakkama ka ilma selleta. Sortimise operatsiooni kogumahu jaoks on olemas 32 MB mĂ€lu piirang tĂŒhja kirje kogumi .
Otsing ilma indeksitoega
OtsingupĂ€ringud tĂ€idavad sarnast funktsiooni nagu JOIN-operatsioon SQL-is. Parema toimimise jaoks vajavad nad indeksit vĂ€listava vĂ”tme vÀÀrtuse pĂ”hjal, mida kasutatakse vĂ€lisvĂ”tmena. See ei ole ilmselge, kuna kasutamine ei peegeldu explain(). Sellised indeksid on tĂ€ienduseks indeksile, mis on salvestatud explain(), mida omakorda kasutavad toruoperaatorid $match ja $sort, kui need esinevad toru alguses. Indeksid vĂ”ivad nĂŒĂŒd katta mistahes etappi .
Mitme uuenduse kasutamisest loobumine
Meetod kasutatakse olemasoleva dokumendi osa vÔi kogu dokumendi muutmiseks, sÔltuvalt teie mÀÀratud parameetrist, kuni tÀieliku asendamiseni . Ei ole nii ilmne, et see ei töötle kÔiki dokumente kollektsioonis, kui te ei mÀÀra parameetrit kÔikide dokumentide uuendamiseks, mis vastavad pÀringu kriteeriumitele.
Ărge unustage vĂ”tmete jĂ€rjekorra tĂ€htsust hajusates tabelites.
JSON-is koosneb objekt mittejÀrgnevast kollektsioonist, mille suurus on null vÔi enam nimede/vÀÀrtuste paari, kus nimi on string ja vÀÀrtus on string, number, loogiline vÀÀrtus, null, objekt vÔi massiiv.
Kahjuks omab BSON otsimise ajal jÀrjekorra osas suurt tÀhtsust. MongoDB-s peab sisseehitatud objektide vÔtmete jÀrjekord , st { firstname: "Phil", surname: "factor" } ei ole sama mis { { surname: "factor", firstname: "Phil" }. See tÀhendab, et peate dokumentides hoidma nimede/ vÀÀrtuste paaride jÀrjekorra, kui soovite olla kindel, et leiate need.
Ărge segage kokku "null" ja "undefined"
TĂ€hendus "undefined" ei ole kunagi olnud lubatud JSON-is, vastavalt JSON (ECMA-404, jaotis 5), hoolimata sellest, et seda kasutatakse JavaScriptis. Veelgi enam, BSON jaoks on see aegunud ja muundatakse $null, mis ei ole alati hea lahendus. .
Kasutamine $limit() ilma $sort()
VĂ€ga tihti, kui arendate MongoDB-s, on kasulik lihtsalt nĂ€ha tulemuse nĂ€idist, mis pĂ€ringust vĂ”i aggregeerimisest tagasi tuleb. Selle ĂŒlesande jaoks on teil kasu $limit(), kuid seda ei tohi kunagi olla lĂ”ppversioonis koodis, kui te ei kasuta seda enne $sort. See mekanism on vajalik, kuna muidu ei saa te garanteerida tulemuste jĂ€rjekorda ja ei saa usaldusvÀÀrselt andmeid vaadata. Tulemuste ĂŒlaservas saate erinevaid kirjeid sĂ”ltuvalt sorteerimisest. UsaldusvÀÀrseks toimimiseks peavad pĂ€ringud ja aggregeerimised olema deterministlikud, st andma iga tĂ€itmise korral samu tulemusi. Kood, milles on $limit(), kuid ei ole $sort, ei ole deterministlik ja vĂ”ib hiljem pĂ”hjustada vigu, mida on raske jĂ€lgida.
KokkuvÔte
Ainus viis, kuidas MongoDBs ĂŒldse pettuda, on vĂ”rrelda seda otseselt teist tĂŒĂŒpi andmebaaside, nĂ€iteks SĂB, vĂ”i kasutada seda teatud ootuste pĂ”hjal. See on sama, mis vĂ”rrelda apelsini kahvliga. AndmebaasisĂŒsteemid jĂ€lgivad teatud eesmĂ€rke. Parim on lihtsalt mĂ”ista ja hinnata neid erinevusi. Oleks hĂ€bi suruda MongoDB arendajaid nende valikute pĂ€rast, mis on sundinud neid liikuma SĂB teed. Ma soovin nĂ€ha uusi ja huvitavaid viise vanade probleemide, nĂ€iteks andmete terviklikkuse tagamise ja vigadele ning hĂ€kkerite rĂŒnnakutele vastupidavate andmesĂŒsteemide loomise lahendamiseks.
MongoDB 4.0 versioonis ACID tehingute rakendamine on hea nĂ€ide oluliste parenduste uuenduslikust rakendamisest. Multi-dokumendilised ja multi-tegevuslikud tehingud on nĂŒĂŒd atomaarset laadi. Samuti on saadaval vĂ”imalus reguleerida aega, mis on vajalik lukustuste saamiseks, ja lĂ”petada kinni jÀÀnud tehingud ning muuta isoleerimise taset.
Loe edasi:
Allikas: habr.com
