14 asja, mida ma sooviksin teada MongoDB-ga töötamise alustamiseks

Artikli tÔlge on ettevalmistatud kursuse alguseks «Mittepoleerimata andmebaasid».

14 asja, mida ma sooviksin teada MongoDB-ga töötamise alustamiseks

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 sĂŒstimise).

On olemas mitmeid autentimismeetodeid, kuid lihtsaim on luua kasutaja ID/parool. Kasutage seda ideed, kuni mÔtledate nutika autentimise peale, mis pÔhineb LDAP. 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

MongoDB turvachek-list 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 mapReduce, grupp vĂ”i $where, tuleks JavaScripti suvalise koodi kasutamine keelata, kirjutades konfigureerimisfaili javascriptEnabled:false. Kuna standardsetes MongoDB andmefailides pole krĂŒpteerimist, on mĂ”istlik kĂ€ivitada MongoDB koos PĂŒhendatud kasutaja, 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 pĂ€ris keeruline.

Klassikaline artikkel „6 kogemusnĂ”uannet MongoDB skeemide kujundamiseks“ on kindlasti lugemist vÀÀrt, samuti sellised funktsioonid nagu Schema Explorer 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 binaarset sortimist. 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 tĂ€he suurust, mis vastavad sĂŒsteemi kasutajate keelele ja kultuurile. 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 GridFS 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 tÔhususe.

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 liikuda, mis tĂ€hendab, et tuleb uuendada ka indekseid. Suure massiiviga dokumendi uuesti indekseerimise ajal kirjutatakse indeksid sageli ĂŒle, kuna iga elemendi jaoks on olemas kanne, mis salvestab selle indeksi. See uuesti indekseerimine toimub ka siis, kui dokumenti lisatakse vĂ”i eemaldatakse.

MongoDB-s on nii kutsutud „tĂ€ituvusmÀÀr“, 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 aeglased.

Ä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 Studio 3T lihtsustavad agregatsiooni pĂ€ringute koostamist MongoDB. 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 kontrollpunkti., 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 commitIntervalMs.

Veenduge, et logimine oleks konfiguratsioonifailis sisse lĂŒlitatud, et olla kindel kirjete olemasolus. (storage.journal.enabled), 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 indeksi. 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 tĂŒhja andmete kogumi.

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 aggregeerimise torustikus.

Mitme uuendamise loobumine

Meetod db.collection.update() kasutatakse olemasoleva dokumendi osa vÔi terviku muutmiseks, tÀieliku asendamise kuni teie poolt mÀÀratud parameetrini update. Ei ole nii ilmne, et see ei töötle kÔik dokumendid kogus, kuni mÀÀrate parameetri multi 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. vÀÀrtus, 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 ametlikule standardile 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. VĂ€ltige kasutamist „undefined“ MongoDB-s.

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.

14 asja, mida ma sooviksin teada MongoDB-ga töötamise alustamiseks

Loe edasi:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster