Artikli tõlge valmis kursuse alguse eelõhtul
Highlights:
- Skeemi väljatöötamine on äärmiselt oluline, kuigi see on MongoDB-s valikuline.
- Samuti peavad indeksid vastama teie skeemile ja juurdepääsumustritele.
- Vältige suurte objektide ja suurte massiivide kasutamist.
- Olge MongoDB sätetega ettevaatlik, eriti kui tegemist on turvalisuse ja töökindlusega.
- MongoDB-l ei ole päringu optimeerijat, seega peate päringutoimingute tegemisel olema ettevaatlik.
Olen andmebaasidega töötanud väga pikka aega, kuid alles hiljuti avastasin MongoDB. Soovin teada mõningaid asju, enne kui sellega töötama hakkasin. Kui inimesel on teatud valdkonnas juba kogemusi, on tal eelarvamused, mis on andmebaasid ja millega nad tegelevad. Lootuses, et teised saaksid seda hõlpsamini mõista, esitan loetelu levinud vigadest.
MongoDB serveri loomine ilma autentimiseta
Kahjuks on MongoDB vaikimisi installitud ilma autentimiseta. Kohaliku juurdepääsuga tööjaama puhul on see tava normaalne. Kuid kuna MongoDB on mitme kasutajaga süsteem, millele meeldib kasutada palju mälu, on parem, kui panete selle võimalikult suure RAM-iga serverisse, isegi kui kavatsete seda kasutada ainult arendamiseks. Vaikimisi pordi kaudu serverisse installimine võib olla problemaatiline, eriti kui päringus saab käivitada mis tahes JavaScripti koodi (näiteks $where
ideena
Autentimismeetodeid on mitu, kuid kõige lihtsam on määrata kasutajatunnus/parool. Kasutage seda ideed, kui mõtlete väljamõeldud autentimisele, mis põhineb sellel
Ärge unustage siduda ründepinda MongoDB-ga
,
või
. Kuna andmefaile ei krüptita standardses MongoDB-s, on mõistlik MongoDB-d käivitada
Viga vooluringi arendamisel
MongoDB ei kasuta skeemi. Kuid see ei tähenda, et skeemi pole vaja. Kui soovite lihtsalt dokumente salvestada ilma järjepideva mustriga, võib nende salvestamine olla kiire ja lihtne, kuid nende hilisem allalaadimine võib olla keeruline.
Klassikaline artikkel "
Ärge unustage sorteerimisjärjekorda
Sorteerimisjärjestuse unustamine võib põhjustada rohkem frustratsiooni ja ajaraiskamist kui mis tahes muu vale seadistus. Vaikimisi kasutab MongoBD
Looge suurte dokumentidega kogusid
MongoDB majutab hea meelega suuri dokumente kuni 16 MB kogudes ja
Suurte massiividega dokumentide loomine
Dokumendid võivad sisaldada massiive. Parim on, kui massiivi elementide arv on kaugel neljakohalisest numbrist. Kui massiivile sageli elemente lisatakse, kasvab see seda sisaldavast dokumendist välja ja peabki olema
MongoDB-l on midagi nn
Võib arvata, et saate ilma massiivi indekseerimiseta hakkama. Kahjuks võib indeksite puudumine põhjustada muid probleeme. Kuna dokumente skannitakse algusest lõpuni, võtab massiivi lõpus olevate elementide otsimine kauem aega ja enamik sellise dokumendiga seotud toiminguid
Ärge unustage, et liite etappide järjekord on oluline
Päringu optimeerijaga andmebaasisüsteemis on teie kirjutatud päringud selgitused selle kohta, mida soovite saada, mitte kuidas seda saada. See mehhanism toimib analoogselt restoranis tellimisega: tavaliselt tellite lihtsalt roa ja ei anna kokale üksikasjalikke juhiseid.
MongoDB-s juhendate kokka. Näiteks peate veenduma, et andmed läbivad reduce
võimalikult varakult kasutusel $match
и $project
ja sorteerimine toimub alles pärast seda reduce
ja et otsing toimub täpselt soovitud järjekorras. Päringu optimeerija, mis välistab tarbetu töö, järjestab samme optimaalselt ja valib liitumistüübid, võib teid rikkuda. MongoDB-ga on teil mugavuse hinnaga suurem kontroll.
Tööriistad nagu
Kiirsalvestuse kasutamine
Ärge kunagi määrake MongoDB kirjutussuvanditeks kiiret, kuid madalat töökindlust. See režiim "faili ja unusta" tundub kiire, sest käsk tagastatakse enne kirjutamist. Kui süsteem jookseb kokku enne andmete kettale kirjutamist, lähevad need kaotsi ja satuvad ebajärjekindlasse olekusse. Õnneks on 64-bitises MongoDB logimine lubatud.
MMAPv1 ja WiredTiger salvestusmootorid kasutavad selle vältimiseks logimist, kuigi WiredTiger suudab taastuda kuni viimase järjekindluseni
Päeviku koostamine tagab, et andmebaas on pärast taastamist järjepidevas olekus ja säilitab kõik andmed, kuni need logisse kirjutatakse. Salvestiste sagedus konfigureeritakse parameetri abil
.
Kirjetes veendumiseks veenduge, et logimine on konfiguratsioonifailis lubatud
, ja salvestuste sagedus vastab teabe hulgale, mille kaotamist saate endale lubada.
Sorteerimine ilma indeksita
Otsimisel ja koondamisel tekib sageli vajadus andmeid sortida. Loodame, et see tehakse ühes viimases etapis pärast tulemuse filtreerimist, et vähendada sorteeritavate andmete hulka. Ja isegi sel juhul vajate sorteerimiseks
Kui sobivat indeksit pole, saab MongoDB ilma selleta hakkama. Kõigi sisestatud dokumentide kogumahule on mälupiirang 32 MB
Otsige ilma indeksi toeta
Otsingupäringud täidavad SQL-i JOIN-toiminguga sarnast funktsiooni. Parimaks tööks vajavad nad võõrvõtmena kasutatava võtme väärtuse indeksit. See pole ilmne, sest kasutust ei kajastata explain()
. Sellised indeksid on lisaks sisse kirjutatud indeksile explain()
, mida omakorda kasutavad torujuhtme operaatorid $match
и $sort
, kui nad kohtuvad torujuhtme alguses. Indeksid võivad nüüd hõlmata mis tahes etappi
Mitme värskenduse kasutamisest loobumine
Meetod
kasutatakse olemasoleva dokumendi osa või kogu dokumendi muutmiseks kuni täieliku asendamiseni, olenevalt teie määratud parameetrist
. Mis pole nii ilmne, on see, et see ei töötle kõiki kogus olevaid dokumente, kui te seda valikut ei määra
uuendada kõiki dokumente, mis vastavad taotluse kriteeriumidele.
Ärge unustage võtmete järjestuse tähtsust räsitabelis
JSON-is koosneb objekt järjestamata kogust, mille suurus on null või enama nime/väärtuse paari, kus nimi on string ja väärtus on string, arv, tõeväärtus, null, objekt või massiiv.
Kahjuks paneb BSON otsimisel suurt rõhku järjestusele. MongoDB-s võtmete järjekord sisseehitatud objektides { firstname: "Phil", surname: "factor" }
- see pole sama, mis { { surname: "factor", firstname: "Phil" }
. See tähendab, et kui soovite nende leidmises kindel olla, peate oma dokumentidesse salvestama nime/väärtuse paaride järjekorra.
Ärge olge segaduses "Null" и "määratlemata"
Väärtus "määratlemata" andmetel ei kehtinud kunagi JSON-is $null
, mis pole alati hea lahendus.
Kasutama $limit()
ilma $sort()
Üsna sageli on MongoDB-s arendamisel kasulik näha lihtsalt päringust või koondamisest tagastatava tulemuse näidist. Selle ülesande jaoks vajate $limit()
, kuid see ei tohiks kunagi olla lõplikus koodis, kui te seda varem ei kasuta $sort
. See mehaanik on vajalik, sest vastasel juhul ei saa te tulemuse järjekorda tagada ja andmeid ei saa usaldusväärselt vaadata. Tulemuse ülaosas näete olenevalt sorteerimisest erinevaid kirjeid. Usaldusväärseks töötamiseks peavad päringud ja agregatsioonid olema deterministlikud, st andma samu tulemusi iga kord, kui neid täidetakse. Kood, mis sisaldab $limit()
, kuid mitte $sort
, ei ole deterministlik ja võib hiljem põhjustada vigu, mida on raske leida.
Järeldus
Ainus võimalus MongoDB-s pettuda on võrrelda seda otse teist tüüpi andmebaasiga, näiteks DBMS-iga, või hakata seda kasutama teatud ootuste alusel. See on nagu apelsini võrdlemine kahvliga. Andmebaasisüsteemid teenivad kindlaid eesmärke. Parim on neid erinevusi lihtsalt ise mõista ja hinnata. Oleks häbi avaldada MongoDB arendajatele survet tee üle, mis sundis neid DBMS-i teele minema. Soovin näha uusi ja huvitavaid viise vanade probleemide lahendamiseks, nagu andmete terviklikkuse tagamine ning rikete ja pahatahtlike rünnakute suhtes vastupidavate andmesüsteemide loomine.
MongoDB poolt ACID tehingute kasutuselevõtt versioonis 4.0 on hea näide oluliste täiustuste uuenduslikul viisil kasutuselevõtust. Mitme dokumendi ja mitme avalduse tehingud on nüüdseks tuumaks. Samuti on võimalik reguleerida lukkude soetamiseks ja kinnijäänud tehingute lõpetamiseks kuluvat aega ning muuta isolatsioonitaset.
Loe rohkem:
Allikas: www.habr.com