Artikli tÔlge on ettevalmistatud kursuse alguseks .

Peamised punktid:
- On ÀÀrmiselt oluline disainida skeem, kuigi MongoDB-s see ei ole kohustuslik.
- Samuti peavad indeksid vastama teie skeemile ja ligipÀÀsukorraldustele.
- VĂ€ltige suurte objektide ja massiivide kasutamist.
- Olge ettevaatlik MongoDB seadistuste puhul, eriti kui tegemist on turvalisuse ja usaldusvÀÀrsusega.
- MongoDB-s pole pÀringu optimeerijat, seega peate olema ettevaatlik pÀringute sooritamisel.
Olen vÀga kaua töötanud andmebaasidega, kuid hiljuti avastasin MongoDB. On mÔned asjad, mida ma tahaksin teada enne, kui hakkan sellega töötama. Kui inimesel on juba kogemus teatud valdkonnas, siis on tal eelarvamused selle kohta, mis on andmebaasid ja mida nad teevad. Lootes teiste inimeste mÔistmist kergendada, esitan levinud vigade nimekirja.
MongoDB serveri loomine ilma autentimiseta
Kahjuks installitakse MongoDB vaikimisi ilma autentimiseta. Kohalikuks pÀÀsuks on see tava normaalne. Kuid kuna MongoDB on mitme kasutajaga sĂŒsteem, mis eelistab kasutada suurtes kogustes mĂ€lu, on parem paigaldada see serverisse, kus on vĂ”imalikult palju operatiivmĂ€lu, isegi kui plaanite seda kasutada ainult arenduseks. Serverisse installimine vaikimisi pordi kaudu vĂ”ib olla probleemne, eriti kui pĂ€ringus saab kĂ€ivitada mis tahes JavaScripti koodi (nĂ€iteks, $where ideena ).
On olemas mitmeid autentimismeetodeid, kuid lihtsaim on luua kasutaja ID/parool. Kasutage seda ideed, kuni mÔtledate nutika autentimise peale, mis pÔhineb . Kui rÀÀkida turvalisusest, peaks MongoDB olema pidevalt ajakohane ja logisid tuleks alati kontrollida volitamata pÀÀsu osas. Mulle nÀiteks meeldib valida vaikimisi pordiks teise pordi.
Ărge unustage siduda rĂŒndepinda MongoDB-ga
sisaldab hĂ€id nĂ€punĂ€iteid vĂ”rgu sissetungimise ja andmelekkete riski vĂ€hendamiseks. On lihtne öelda, et arendusserver ei vaja kĂ”rget turvataset. Kuid asi pole nii lihtne ja see kehtib kĂ”igi MongoDB serverite kohta. EelkĂ”ige, kui pole mĂ”juvat pĂ”hjust kasutada , vĂ”i , tuleks JavaScripti suvalise koodi kasutamine keelata, kirjutades konfigureerimisfaili . Kuna standardsetes MongoDB andmefailides pole krĂŒpteerimist, on mĂ”istlik kĂ€ivitada MongoDB koos , kellel on tĂ€ielik juurdepÀÀs failidele, piiratud juurdepÀÀs ainult tema jaoks ja vĂ”imalus kasutada oma sĂŒsteemi failide juurdepÀÀsu haldamise vahendeid.
Schéma arengus esinev viga
MongoDB ei kasuta skeemi. Kuid see ei tĂ€henda, et skeem pole vajalik. Kui soovite lihtsalt sĂ€ilitada dokumente ilma mingisuguse ĂŒhtse skeemita, on nende sĂ€ilitamine kiire ja lihtne, kuid nende hilisem vĂ€ljavĂ”tmine vĂ”ib olla .
Klassikaline artikkel â on kindlasti lugemist vÀÀrt, samuti sellised funktsioonid nagu kolmanda osapoole tööriistas, nagu Studio 3T, tasub kasutada regulaarsete skeemide kontrollimiseks.
Ărge unustage sortimisjĂ€rjestust
SortimisjĂ€rjestuse unustamine vĂ”ib osutuda kĂ”ige suuremaks pettumuseks ja vĂ”tma rohkem aega kui vale konfiguratsiooni kasutamine. Vaikimisi kasutab MongoBD . Kuid see ei pruugi kellelegi kasulik olla. Suhted nii suur- kui vĂ€ikealgustel, samuti binaarsed sortimised peeti juba 1980. aastatel huvitavateks anahroonismideks koos helmeste, kaftanide ja lokkidega vuntsidega. NĂŒĂŒd on nende kasutamine peaaegu lubamatu. Otseses elus on 'moto' sama mis 'Moto'. Ja 'Britannia' ja 'britannia' on sama koht. VĂ€ike tĂ€ht on lihtsalt suure tĂ€he vastav kirjutis. Ja Ă€rge sundige mind rÀÀkima diakriitiliste mĂ€rkide sortimisest. MongoDB andmebaasi loomisel kasutage sortimisvalikuid, mis ignoreerivad rĂ”hutust ja , mis vastavad sĂŒsteemi kasutajate . Nii lihtsustate oluliselt stringiandmete otsimist.
Kogud suurete dokumentidega loomine
MongoDB on Ônnelik, et saab salvestada suuri dokumente, mille suurus on kuni 16 MB kollektsioonides, ja on mÔeldud dokumentidele, mis on suuremad kui 16 MB. Kuid see, et suuri dokumente saab seal salvestada, ei tÀhenda, et nende hoidmine seal oleks parim lahendus. MongoDB töötab paremini, kui salvestate eraldi dokumente, mille suurus on paar kilobaiti, kÀsitledes neid pigem nagu veerge laias SQL-tabelis. Suured dokumendid vÔivad tekitada probleeme .
Suurte massiividega dokumentide loomine
Dokumendid vĂ”ivad sisaldada massiive. Parim on, kui massiivi elementide arv on kaugel neljakohalisest numbrist. Kui massiivile lisatakse elemente sageli, suureneb see ĂŒle selle dokumenti, milles see asub, ja tuleb , mis tĂ€hendab, et tuleb . Suure massiiviga dokumendi uuesti indekseerimise ajal kirjutatakse indeksid sageli ĂŒle, kuna iga elemendi jaoks on olemas , mis salvestab selle indeksi. See uuesti indekseerimine toimub ka siis, kui dokumenti lisatakse vĂ”i eemaldatakse.
MongoDB-s on nii kutsutud , mis on dokumentide kasvuks ruumi vÔimaldav, et seda probleemi vÔimalikult vÀikseks vÀhendada.
VÔib-olla arvatakse, et ilma massiivide indekseerimiseta on vÔimalik hakkama saada. Kahjuks vÔivad indekseerimise puudumise tÔttu tekkida teised probleemid. Kuna dokumendid vaadatakse lÀbi algusest lÔpuni, siis elementide leidmine massiivi lÔpus vÔtab rohkem aega ja enamik operatsioone, mis on seotud sellise dokumendiga, on .
Ărge unustage, et aggregeerimise etappide jĂ€rjekord on oluline
AndmebaasisĂŒsteemis, kus on pĂ€ringute optimeerija, on teie kirjutatud pĂ€ringud seletused selle kohta, mida soovite saada, mitte kuidas seda saada. See töötab sarnaselt restoranis tellimisega: tavaliselt tellite lihtsalt roa, mitte ei anna kokale ĂŒksikasjalikke juhiseid.
MongoDB-s annate te kokale juhiseid. NĂ€iteks tuleb veenduda, et andmed lĂ€bivad reduce nii varakult kui vĂ”imalik torustikus, kasutades $match ja $project, ja sorteerimine toimub alles pĂ€rast reduce, ja otsing toimub tĂ€pselt sellises jĂ€rjestuses, nagu vaja. KĂŒsimuste optimeerija olemasolu, mis vabastab teid liigsetest ĂŒlesannetest, jĂ€rjestab etapid optimaalselt ja valib ĂŒhendustĂŒĂŒbi, vĂ”ib teid Ă€ra hellitada. MongoDB-s on teil rohkem kontrolli mugavuse hinnaga.
Sellised tööriistad nagu lihtsustavad agregatsiooni pĂ€ringute koostamist . Aggregation Editori funktsioon vĂ”imaldab teil rakendada torujuhtme operaatorite etappe ĂŒkshaaval ning kontrollida iga etapi sisendeid ja vĂ€ljundeid, et lihtsustada tĂ”rkeotsingut.
Kiire kirjutamise kasutamine
Ărge kunagi seadke MongoDB-s kĂ”rge kiiruseta salvestamise seadeid, kuid madala usaldusvÀÀrsusega. See reĆŸiim «file-and-forget» tundub kiire, kuna kĂ€sk naaseb enne, kui salvestus toimub. Kui sĂŒsteem kokku kukub enne, kui andmed on kettale salvestatud, kaovad need ja jÀÀvad kokkusobimatuks. Ănneks on 64-bitises MongoDB-s kaasas logimise funktsioon.
MMAPv1 ja WiredTiger salvestusmasinad kasutavad selle vĂ€ltimiseks logimist, kuigi WiredTiger suudab taastuda viimase ĂŒheseisundi , kui logimine on vĂ€ljas.
Logimine tagab, et andmebaas jÀÀb taastamise ajal jÀrjepidevusse ning sÀilitab kÔik andmed enne logimist. Kirjete sagedus seadistatakse parameetri kaudu .
Veenduge, et logimine oleks konfiguratsioonifailis sisse lĂŒlitatud, et olla kindel kirjete olemasolus. ), ja et kirjete sagedus vastaks sellele teabe mahule, mille kaotamist te endale lubada saate.
Sorteerimine ilma indeksita
Andmete otsimisel ja kogumisel on sageli vajalik andmete sorteering. Loodame, et seda tehakse pĂ€rast tulemuste filtreerimist, et vĂ€hendada sorteeritavate andmete mahtu. I isegi sel juhul vajate te sorteerimiseks . Saate kasutada kas ĂŒhtikut vĂ”i koosnevat indeksit.
Kui sobivat indeksit ei ole, siis MongoDB saab ilma selleta hakkama. Sortimise operatsioonide puhul on ĂŒldine dokumentide suuruse piir 32 MB , ja kui MongoDB saavutab selle piiri, siis kas annab ta veateate vĂ”i tagastab ta .
Otsing ilma indeksite toeta
OtsingupĂ€ringud tĂ€idavad sarnast funktsiooni nagu JOIN operatsioon SQL-is. Parema töö saavutamiseks on neil vajalik vĂ”tme vÀÀrtuse indeks, mida kasutatakse vĂ€liseks vĂ”tmemiseks. See ei ole ilmne, kuna kasutamine ei ole peegeldatud explain(). Sellised indeksid on lisand, millele on lisatud indeks explain(), mille omakorda kasutavad töötlusoperatsioonid $match ja $sort, kui need esinevad toru alguses. Indeksid vĂ”ivad nĂŒĂŒd hĂ”lmata mis tahes etappi .
Mitme uuendamise loobumine
Meetod kasutatakse olemasoleva dokumendi osa vÔi terviku muutmiseks, tÀieliku asendamise kuni teie poolt mÀÀratud parameetrini . Ei ole nii ilmne, et see ei töötle kÔik dokumendid kogus, kuni mÀÀrate parameetri kÔikide dokumentide uuendamiseks, mis vastavad pÀringu kriteeriumidele.
Ărge unustage vĂ”tmete jĂ€rjekorra tĂ€htsust hash-tabelis
JSON-is koosneb objekt jÀrjekorrastamata kogumist, mis sisaldab null vÔi rohkem nime/vÀÀrtuse paare, kus nimi on string ja vÀÀrtus vÔib olla string, number, loogiline vÀÀrtus, null, objekt vÔi massiiv.
Kahjuks on BSON-i puhul otsingus jĂ€rjekord ÀÀrmiselt oluline. MongoDB-s on sisseehitatud objektide vĂ”tmete jĂ€rjekord tĂ€htis. , st. { firstname: "Phil", surname: "factor" } â see ei ole sama, mis { { surname: "factor", firstname: "Phil" }. See tĂ€hendab, et peate dokumentides sĂ€ilitama paaride nime/vÀÀrtuse jĂ€rjekorra, kui soovite olla kindel, et leiate need.
Ărge segage kokku ânullâ ja âundefinedâ
VÀÀrtus âundefinedâ ei ole kunagi olnud JSON-is lubatud, vastavalt JSON (ECMA-404, jaotis 5), vaatamata sellele, et seda kasutatakse JavaScriptis. Veelgi enam, BSON-i puhul on see aegunud ja muudetakse $null, mis ei ole alati hea lahendus. .
Kasutamine $limit() ilma $sort()
Sageli on MongoDB arendamisel kasulik lihtsalt nĂ€ha, milline nĂ€idis tulemus tuleb pĂ€ringust vĂ”i agregatsioonist. Selle ĂŒlesande jaoks on teil vaja $limit(), kuid seda ei tohiks kunagi olla lĂ”ppversioonis, vĂ€lja arvatud siis, kui eelnevalt kasutate $sort. See mehhanika on vajalik, sest vastasel juhul ei saa te tulemuse jĂ€rjekorda tagada ning ei saa andmeid usaldusvÀÀrselt vaadata. Tulemuse ĂŒlaosas saate erinevaid kirjeid sĂ”ltuvalt sorteerimisest. UsaldusvÀÀrse toimimise tagamiseks peavad pĂ€ringud ja aggregeerimised olema deterministlikud, s.t. need peavad iga tĂ€itmise korra jooksul andma samu tulemusi. Kood, milles on $limit(), aga ei ole $sort, ei ole deterministlik ja vĂ”ib hiljem pĂ”hjustada vigu, mida on raske jĂ€lgida.
KokkuvÔte
Ainus viis MongoDB's pettuda on vĂ”rrelda seda otse mĂ”ne teise andmebaasitĂŒĂŒbiga, nĂ€iteks RDBMS-iga, vĂ”i tulla selle kasutamise juurde mingite kindlate ootustega. See on nagu vĂ”rrelda apelsine kahvliga. AndmebaasisĂŒsteemid jĂ€rgivad kindlaid eesmĂ€rke. Parim on lihtsalt mĂ”ista ja hinnata neid erinevusi. Oleks hĂ€bi avaldada MongoDB arendajatele survet tee osas, mille nad RDBMS-i poole minnes ette vĂ”tsid. Soovin nĂ€ha uusi ja huvitavaid viise vanade probleemide lahendamiseks, nagu andmete terviklikkuse tagamine ja rikke- ja rĂŒnnakukindlate andmesĂŒsteemide loomine.
MongoDB-sse versioonis 4.0 sisseehitatud ACID tehingute toimimine on hea nĂ€ide oluliste uuenduste rakendamisest innovatiivsel viisil. Mitme dokumendi ja mitme operaatoriga tehingud on nĂŒĂŒd atomaarse iseloomuga. Samuti on vĂ”imalik reguleerida aega, mis on vajalik lukustuste saamiseks, lĂ”petada kinni jÀÀnud tehingud ning muuta isoleerimise taset.
Loe edasi:
Allikas: habr.com
