D'Iwwersetzung vum Artikel gouf um Virowend vum Start vum Cours virbereet
Highlights:
- Et ass extrem wichteg e Schema z'entwéckelen, och wann et fakultativ am MongoDB ass.
- Och Indexe mussen mat Ärem Schema an Zougangsmuster passen.
- Vermeiden grouss Objeten a grouss Arrays ze benotzen.
- Sidd virsiichteg mat MongoDB Astellungen, besonnesch wann et ëm Sécherheet an Zouverlässegkeet kënnt.
- MongoDB huet keen Ufrooptimizer, also musst Dir virsiichteg sinn wann Dir Ufrooperatiounen ausféiert.
Ech hunn eng ganz laang Zäit mat Datenbanken geschafft, awer just viru kuerzem entdeckt MongoDB. Et ginn e puer Saachen, déi ech wënschen ech wousst ier ech ugefaang mat et ze schaffen. Wann eng Persoun schonn Erfahrung an engem bestëmmte Beräich huet, si hu virgefaasst Iddien iwwer wat Datenbanken sinn a wat se maachen. An der Hoffnung et méi einfach ze maachen fir anerer ze verstoen, presentéieren ech eng Lëscht vu gemeinsame Feeler.
Erstellt e MongoDB Server ouni Authentifikatioun
Leider ass MongoDB ouni Authentifikatioun als Standard installéiert. Fir eng Aarbechtsstatioun déi lokal zougänglech ass, ass dës Praxis normal. Awer well MongoDB e Multi-User System ass, dee gär grouss Quantitéiten un Erënnerung benotzt, wäert et besser sinn wann Dir et op e Server mat sou vill RAM wéi méiglech setzt, och wann Dir se nëmme fir d'Entwécklung benotzt. Installatioun um Server iwwer de Standardport ka problematesch sinn, besonnesch wann all Javascript Code an der Ufro ausgefouert ka ginn (zum Beispill, $where
als Iddi fir
Et gi verschidde Authentifikatiounsmethoden, awer am einfachsten ass e Benotzer ID / Passwuert ze setzen. Benotzt dës Iddi wärend Dir iwwer ausgefalene Authentifikatioun denkt baséiert op
Vergiesst net Är Attacke Uewerfläch un MongoDB ze binden
,
oder
. Well Datendateien net am Standard MongoDB verschlësselt sinn, mécht et Sënn fir MongoDB mat ze lafen
Feeler beim Entwécklung vum Circuit
MongoDB benotzt kee Schema. Mä dat heescht net, datt de Schema net néideg ass. Wann Dir just Dokumenter ouni konsequent Muster späichere wëllt, kann se séier an einfach späicheren, awer se spéider zréckzéien ka schwéier sinn.
Klassesch Artikel "
Vergiesst net d'Sortuerdnung
Vergiessen vun der Sortéierungsuerdnung kann méi Frustratioun verursaachen a méi Zäit verschwenden wéi all aner falsch Konfiguratioun. Par défaut benotzt MongoBD
Schafen Kollektiounen mat groussen Dokumenter
MongoDB ass frou grouss Dokumenter bis zu 16MB a Sammlungen ze hosten, an
Erstellt Dokumenter mat grousse Arrays
Dokumenter kënnen Arrays enthalen. Et ass am beschten wann d'Zuel vun den Elementer am Array wäit vun enger véierziffer Zuel ass. Wann Elementer dacks un eng Array bäigefüügt ginn, wäert et d'Dokument erauswuessen, dat et enthält a muss
MongoDB huet eppes genannt
Dir mengt vläicht datt Dir ouni Array Indexéiere kënnt. Leider kann de Mangel un Indexen Iech aner Probleemer hunn. Well Dokumenter vun Ufank bis Enn gescannt ginn, dauert d'Sich no Elementer um Enn vun der Array méi laang, an déi meescht Operatiounen, déi mat esou engem Dokument verbonne sinn, ginn
Vergiesst net datt d'Uerdnung vun den Etappen an enger Aggregatioun wichteg ass
An engem Datebanksystem mat engem Ufrooptimizer sinn d'Ufroen déi Dir schreift Erklärungen iwwer wat Dir wëllt kréien, net wéi Dir et kritt. Dëse Mechanismus funktionnéiert duerch Analogie mat Bestellung an engem Restaurant: normalerweis bestellt Dir einfach e Plat, a gitt keng detailléiert Instruktioune fir de Kach.
Am MongoDB instruéiert Dir de Kach. Zum Beispill musst Dir sécher sinn datt d'Donnéeën duerchgoën reduce
sou fréi wéi méiglech an der Pipeline benotzt $match
и $project
, an Zortéieren geschitt nëmmen no reduce
, an datt d'Sich genee an der Uerdnung geschitt, déi Dir wëllt. E Query Optimizer ze hunn, deen onnéideg Aarbecht eliminéiert, Schrëtt optimal sequenzéiert, a Join-Typen auswielt, kann Iech verwinnen. Mat MongoDB hutt Dir méi Kontroll op d'Käschte vun der Komfort.
Tools wéi
Benotzt Quick Recording
Setzt ni MongoDB Schreifoptiounen fir héich Geschwindegkeet awer geréng Zouverlässegkeet ze hunn. Dëse Modus "Datei-a-vergiess" schéngt séier well de Kommando zréckkënnt ier d'Schreiwe geschitt. Wann de System crasht ier d'Donnéeën op Disk geschriwwe ginn, gi se verluer an enden an engem inkonsistente Staat. Glécklecherweis huet 64-Bit MongoDB Logbuch aktivéiert.
D'MMAPv1 a WiredTiger Späichermotore benotze Logbicher fir dëst ze vermeiden, obwuel WiredTiger sech op déi lescht konsequent erholen kann
Journaling garantéiert datt d'Datebank an engem konsequente Staat no der Erhuelung ass an all Daten behält bis se an de Logbuch geschriwwe ginn. D'Frequenz vun den Opzeechnunge gëtt mam Parameter konfiguréiert
.
Fir sécher vun den Entréen ze sinn, vergewëssert Iech datt d'Protokolléierung an der Konfiguratiounsdatei aktivéiert ass
, an d'Frequenz vun den Opzeechnungen entsprécht der Quantitéit vun Informatioun déi Dir leeschte kënnt ze verléieren.
Sortéieren ouni Index
Wann Dir sicht an aggregéiert, gëtt et dacks e Besoin fir Daten ze sortéieren. Loosst eis hoffen, datt dëst an enger vun de leschten Etappe gemaach gëtt, nodeems d'Resultat gefiltert gouf, fir d'Quantitéit vun den Donnéeën ze sortéieren ze reduzéieren. An och an dësem Fall, fir d'Zortéierung Dir braucht
Wann et kee passenden Index gëtt, wäert MongoDB ouni et maachen. Et gëtt eng Erënnerung Limite vun 32 MB op der Gesamtgréisst vun all Dokumenter an
Sich ouni Index Ënnerstëtzung
Sichufroen maachen eng Funktioun ähnlech wéi d'JOIN Operatioun an SQL. Fir am beschten ze schaffen, brauche se den Index vum Wäert vum Schlëssel deen als auslännesche Schlëssel benotzt gëtt. Dëst ass net offensichtlech well d'Benotzung net reflektéiert gëtt explain()
. Esou Indizes sinn nieft dem Index geschriwwe ginn explain()
, déi am Tour vun Pipeline Bedreiwer benotzt gëtt $match
и $sort
, wann se am Ufank vun der Pipeline treffen. Indexe kënnen elo all Etapp decken
Entscheeden fir Multi-Aktualiséierungen ze benotzen
Methode
benotzt fir en Deel vun engem existente Dokument oder dem ganzen Dokument ze änneren, bis zu engem kompletten Ersatz, jee no dem Parameter deen Dir uginn hutt
. Wat net sou offensichtlech ass, ass datt et net all Dokumenter an der Sammlung veraarbecht ausser Dir setzt d'Optioun
fir all Dokumenter ze aktualiséieren déi den Ufro Critèren entspriechen.
Vergiesst net d'Wichtegkeet vun der Uerdnung vun de Schlësselen an engem Hash Dësch
Am JSON besteet en Objet aus enger ongeuerdneter Sammlung vu Gréisst Null oder méi Numm / Wäertpaaren, wou den Numm eng String ass an de Wäert eng String, Nummer, Boolean, Null, Objet oder Array ass.
Leider leet BSON vill Wäert op Uerdnung beim Sich. An MongoDB, d'Uerdnung vun de Schlësselen bannent agebauten Objeten { firstname: "Phil", surname: "factor" }
- dëst ass net d'selwecht wéi { { surname: "factor", firstname: "Phil" }
. Dat ass, Dir musst d'Uerdnung vun den Numm-/Wäertpaaren an Ären Dokumenter späicheren, wann Dir sécher sidd se ze fannen.
Sidd net duercherneen "Null" и "ondefinéiert"
Wäert "ondefinéiert" war ni valabel am JSON, laut $null
, wat net ëmmer eng gutt Léisung ass.
Benotzt $limit()
ouni $sort()
Ganz dacks wann Dir am MongoDB entwéckelt, ass et nëtzlech just e Probe vum Resultat ze gesinn dat vun enger Ufro oder Aggregatioun zréckkënnt. Fir dës Aufgab braucht Dir $limit()
, mee et soll ni am Finale Code ginn ausser Dir benotzt et virdrun $sort
. Dëse Mechaniker ass néideg well soss kënnt Dir d'Uerdnung vum Resultat net garantéieren, an Dir kënnt d'Donnéeën net zouverlässeg gesinn. Am Top vum Resultat kritt Dir verschidden Entréen ofhängeg vun der Sortéierung. Fir zouverlässeg ze schaffen, mussen Ufroen an Aggregatiounen deterministesch sinn, dat heescht déiselwecht Resultater produzéieren all Kéier wann se ausgefouert ginn. Code déi enthält $limit()
, awer nee $sort
, wäert net deterministesch sinn a kënnen duerno Feeler verursaachen, déi schwéier ze verfolgen sinn.
Konklusioun
Deen eenzege Wee fir mat MongoDB enttäuscht ze sinn ass et direkt mat enger anerer Zort Datebank ze vergläichen, sou wéi eng DBMS, oder se ze benotzen baséiert op bestëmmten Erwaardungen. Et ass wéi eng Orange mat enger Gabel ze vergläichen. Datebank Systemer déngen spezifesch Zwecker. Et ass am beschten dës Differenzen einfach selwer ze verstoen an ze schätzen. Et wier schued fir d'MongoDB Entwéckler iwwer e Wee ze drécken, deen se op den DBMS Wee gezwongen huet. Ech wëll nei an interessant Weeër gesinn fir al Probleemer ze léisen, sou wéi d'Datenintegritéit ze garantéieren an d'Datesystemer ze kreéieren déi resistent géint Versoen a béiswëlleg Attacke sinn.
Dem MongoDB seng Aféierung vun der ACID Transaktiounalitéit an der Versioun 4.0 ass e gutt Beispill fir wichteg Verbesserungen op eng innovativ Manéier aféieren. Multi-Dokument a Multi-Aussoen Transaktiounen sinn elo atomarer. Et ass och méiglech d'Zäit unzepassen fir Spären ze kréien an festgehalen Transaktiounen ofzeschléissen, souwéi den Isolatiounsniveau z'änneren.
Liest méi:
Source: will.com