Die vertaling van die artikel is voorberei op die vooraand van die aanvang van die kursus
hoogtepunte:
- Dit is uiters belangrik om 'n skema te ontwikkel al is dit opsioneel in MongoDB.
- Net so moet indekse ooreenstem met jou skema en toegangspatrone.
- Vermy die gebruik van groot voorwerpe en groot skikkings.
- Wees versigtig met MongoDB-instellings, veral wanneer dit kom by sekuriteit en betroubaarheid.
- MongoDB het nie 'n navraagoptimeerder nie, so jy moet versigtig wees wanneer jy navraagbewerkings uitvoer.
Ek werk al baie lank met databasisse, maar het MongoDB eers onlangs ontdek. Daar is 'n paar dinge wat ek wens ek het geweet voordat ek daarmee begin werk het. Wanneer 'n persoon reeds ondervinding in 'n sekere veld het, het hulle vooropgestelde idees oor wat databasisse is en wat hulle doen. In die hoop om dit vir ander makliker te maak om te verstaan, bied ek 'n lys van algemene foute aan.
Skep 'n MongoDB-bediener sonder verifikasie
Ongelukkig word MongoDB by verstek sonder verifikasie geïnstalleer. Vir 'n werkstasie wat plaaslik toegang verkry, is hierdie praktyk normaal. Maar aangesien MongoDB 'n multi-gebruiker stelsel is wat daarvan hou om groot hoeveelhede geheue te gebruik, sal dit beter wees as jy dit op 'n bediener sit met soveel RAM as moontlik, selfs al gaan jy dit net vir ontwikkeling gebruik. Installering op die bediener via die verstekpoort kan problematies wees, veral as enige javascript-kode in die versoek uitgevoer kan word (byvoorbeeld, $where
as 'n idee vir
Daar is verskeie verifikasiemetodes, maar die maklikste is om 'n gebruiker-ID/wagwoord in te stel. Gebruik hierdie idee terwyl jy dink oor fancy verifikasie gebaseer op
Moenie vergeet om jou aanvaloppervlak aan MongoDB te bind nie
,
of
. Aangesien datalêers nie in standaard MongoDB geïnkripteer is nie, is dit sinvol om MongoDB mee te laat loop
Fout tydens die ontwikkeling van die stroombaan
MongoDB gebruik nie 'n skema nie. Maar dit beteken nie dat die skema nie nodig is nie. As jy net dokumente wil stoor sonder enige konsekwente patroon, kan dit vinnig en maklik wees om dit te stoor, maar dit kan moeilik wees om dit later te herwin.
Klassieke artikel "
Moenie die sorteervolgorde vergeet nie
As u sorteervolgorde vergeet, kan dit meer frustrasie veroorsaak en meer tyd mors as enige ander verkeerde konfigurasie. By verstek gebruik MongoBD
Skep versamelings met groot dokumente
MongoDB is gelukkig om groot dokumente tot 16MB in versamelings aan te bied, en
Skep dokumente met groot skikkings
Dokumente kan skikkings bevat. Dit is die beste as die aantal elemente in die skikking ver van 'n viersyfergetal is. As elemente gereeld by 'n skikking gevoeg word, sal dit die dokument wat dit bevat ontgroei en sal moet word
MongoDB het iets genoem
Jy dink dalk dat jy sonder skikkingsindeksering kan klaarkom. Ongelukkig kan die gebrek aan indekse veroorsaak dat jy ander probleme het. Aangesien dokumente van begin tot einde geskandeer word, sal soek na elemente aan die einde van die skikking langer neem, en die meeste bewerkings wat met so 'n dokument geassosieer word, sal
Moenie vergeet dat die volgorde van die stadiums in 'n samevoeging saak maak nie
In 'n databasisstelsel met 'n navraagoptimeerder, is die navrae wat jy skryf verduidelikings van wat jy wil kry, nie hoe om dit te kry nie. Hierdie meganisme werk na analogie van om in 'n restaurant te bestel: gewoonlik bestel jy bloot 'n gereg, en gee nie gedetailleerde instruksies aan die kok nie.
In MongoDB gee jy die kok opdrag. Byvoorbeeld, jy moet seker maak dat die data deurgaan reduce
so vroeg as moontlik in die pyplyn gebruik $match
и $project
, en sortering vind eers na reduce
, en dat die soektog gebeur in presies die volgorde wat jy wil hê. As u 'n navrae-optimaliseerder het wat onnodige werk uitskakel, stappe optimaal opvolg en aansluittipes kies, kan dit u bederf. Met MongoDB het jy meer beheer ten koste van gerief.
Gereedskap soos
Gebruik Quick Recording
Moet nooit MongoDB-skryfopsies stel om hoë spoed maar lae betroubaarheid te hê nie. Hierdie modus "lêer-en-vergeet" lyk vinnig omdat die opdrag teruggestuur word voordat die skryf plaasvind. As die stelsel ineenstort voordat die data op skyf geskryf is, sal dit verlore gaan en in 'n inkonsekwente toestand beland. Gelukkig het 64-bis MongoDB aanteken geaktiveer.
Die MMAPv1- en WiredTiger-bergingsenjins gebruik aanteken om dit te voorkom, alhoewel WiredTiger tot die laaste konsekwente kan herstel
Joernering verseker dat die databasis in 'n konsekwente toestand is na herstel en behou alle data totdat dit na die logboek geskryf word. Die frekwensie van opnames word gekonfigureer met behulp van die parameter
.
Om seker te wees van die inskrywings, maak seker dat aantekening in die konfigurasielêer geaktiveer is
, en die frekwensie van opnames stem ooreen met die hoeveelheid inligting wat jy kan bekostig om te verloor.
Sorteer sonder indeks
Wanneer daar gesoek en saamgevoeg word, is daar dikwels 'n behoefte om data te sorteer. Kom ons hoop dat dit in een van die finale stadiums gedoen word, nadat die resultaat gefiltreer is om die hoeveelheid data wat gesorteer word te verminder. En selfs in hierdie geval, sal jy nodig hê om te sorteer
As daar nie 'n geskikte indeks is nie, sal MongoDB daarsonder klaarkom. Daar is 'n geheuelimiet van 32 MB op die totale grootte van alle dokumente in
Soek sonder indeksondersteuning
Soeknavrae voer 'n funksie soortgelyk aan die JOIN-bewerking in SQL uit. Om die beste te werk, benodig hulle die indeks van die waarde van die sleutel wat as die vreemde sleutel gebruik word. Dit is nie voor die hand liggend nie, want die gebruik word nie weerspieël in nie explain()
. Sulke indekse is bykomend tot die indeks wat ingeskryf is explain()
, wat op sy beurt deur pyplynoperateurs gebruik word $match
и $sort
, wanneer hulle aan die begin van die pyplyn ontmoet. Indekse kan nou enige stadium dek
Onttrekking van die gebruik van multi-opdaterings
metode
gebruik om 'n deel van 'n bestaande dokument of die hele dokument te verander, tot 'n volledige vervanging, afhangende van die parameter wat jy spesifiseer
. Wat nie so voor die hand liggend is nie, is dat dit nie alle dokumente in die versameling sal verwerk nie, tensy jy die opsie stel
om alle dokumente op te dateer wat aan die versoekkriteria voldoen.
Moenie die belangrikheid van die volgorde van die sleutels in 'n hash-tabel vergeet nie
In JSON bestaan 'n voorwerp uit 'n ongeordende versameling van grootte nul of meer naam/waarde-pare, waar naam 'n string is en waarde 'n string, getal, boolean, nul, voorwerp of skikking is.
Ongelukkig plaas BSON baie klem op orde wanneer jy soek. In MongoDB, die volgorde van sleutels binne ingeboude voorwerpe { firstname: "Phil", surname: "factor" }
- dit is nie dieselfde as { { surname: "factor", firstname: "Phil" }
. Dit wil sê, jy moet die volgorde van naam/waarde-pare in jou dokumente stoor as jy seker wil wees om dit te vind.
Moenie verward wees nie "Nul" и "ongedefinieerd"
Waarde "ongedefinieerd" was nooit geldig in JSON, volgens $null
, wat nie altyd 'n goeie oplossing is nie.
Gebruik $limit()
sonder $sort()
Dikwels wanneer jy in MongoDB ontwikkel, is dit nuttig om net 'n voorbeeld van die resultaat te sien wat van 'n navraag of samevoeging teruggestuur sal word. Vir hierdie taak sal jy nodig hê $limit()
, maar dit moet nooit in die finale kode wees nie, tensy jy dit voorheen gebruik het $sort
. Hierdie werktuigkundige is nodig, want anders kan jy nie die volgorde van die resultaat waarborg nie, en jy sal nie die data betroubaar kan sien nie. Aan die bokant van die resultaat sal jy verskillende inskrywings kry, afhangende van die sortering. Om betroubaar te werk, moet navrae en samevoegings deterministies wees, dit wil sê, dieselfde resultate lewer elke keer as hulle uitgevoer word. Kode wat bevat $limit()
, maar nee $sort
, sal nie deterministies wees nie en kan daarna foute veroorsaak wat moeilik sal wees om op te spoor.
Gevolgtrekking
Die enigste manier om teleurgesteld te wees met MongoDB is om dit direk te vergelyk met 'n ander tipe databasis, soos 'n DBMS, of om tot die gebruik daarvan te kom op grond van sekere verwagtinge. Dit is soos om 'n lemoen met 'n vurk te vergelyk. Databasisstelsels dien spesifieke doeleindes. Dit is die beste om eenvoudig hierdie verskille self te verstaan en te waardeer. Dit sal 'n skande wees om die MongoDB-ontwikkelaars te druk oor 'n pad wat hulle op die DBMS-pad gedwing het. Ek wil nuwe en interessante maniere sien om ou probleme op te los, soos om data-integriteit te verseker en datastelsels te skep wat bestand is teen mislukking en kwaadwillige aanvalle.
MongoDB se bekendstelling van ACID-transaksionaliteit in weergawe 4.0 is 'n goeie voorbeeld van die bekendstelling van belangrike verbeterings op 'n innoverende manier. Multi-dokument en multi-stelling transaksies is nou atoom. Dit is ook moontlik om die tyd wat nodig is om slotte te bekom en vasgekeerde transaksies te beëindig aan te pas, asook om die isolasievlak te verander.
Lees meer:
Bron: will.com