14 Saachen déi ech wënschen ech wousst ier ech mat MongoDB ugefaang hunn

D'Iwwersetzung vum Artikel gouf um Virowend vum Start vum Cours virbereet "Net-relational Datenbanken".

14 Saachen déi ech wënschen ech wousst ier ech mat MongoDB ugefaang hunn

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 Injections).

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 LDAP. Wann et ëm d'Sécherheet geet, sollt MongoDB stänneg aktualiséiert ginn, a Logbicher sollten ëmmer op onerlaabten Zougang gepréift ginn. Zum Beispill, ech wëll en aneren Hafen als Standardport auswielen.

Vergiesst net Är Attacke Uewerfläch un MongoDB ze binden

MongoDB Sécherheetschecklist enthält gutt Tipps fir de Risiko vun Netzintrusioun an Datelekage ze reduzéieren. Et ass einfach et ze botzen an ze soen datt en Entwécklungsserver keen héije Sécherheetsniveau brauch. Wéi och ëmmer, et ass net sou einfach an dëst gëllt fir all MongoDB Server. Besonnesch wann et keng zwéngend Grond ass ze benotzen mapReduce, group oder $wou, Dir musst d'Benotzung vum arbiträre Code am JavaScript auszeschalten andeems Dir an der Konfiguratiounsdatei schreift javascriptEnabled:false. Well Datendateien net am Standard MongoDB verschlësselt sinn, mécht et Sënn fir MongoDB mat ze lafen Engagéierten Benotzer, déi voll Zougang zu Dateien huet, mat limitéierten Zougang nëmmen dozou an d'Fähigkeit fir d'Betriebssystem seng eege Dateizougangskontrollen ze benotzen.

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. verdammt schwéier.

Klassesch Artikel "6 Daumenregele fir MongoDB Schema Design" Et ass derwäert e liesen, a Funktiounen wéi Schema Explorer Am Drëtt-Partei-Tool Studio 3T ass et derwäert fir regelméisseg Kontrollen vu Circuiten ze benotzen.

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 binär Zort. Awer et ass onwahrscheinlech fir jiddereen nëtzlech ze sinn. Case-sensibel, Akzentempfindlech, binär Zorte goufen als virwëtzeg Anachronismen zesumme mat Perlen, Kaftanen a Curly Moustache an den 80er Jore vum leschte Joerhonnert ugesinn. Elo ass hir Notzung onvergiesslech. Am richtege Liewen ass "Motorrad" d'selwecht wéi "Motorrad". An "Groussbritannien" a "Groussbritannien" sinn déi selwecht Plaz. E klenge Buschtaf ass einfach de grousse Buschtaf Äquivalent vun engem grousse Buschtaf. A fänke mech net un d'Diakritik ze sortéieren. Wann Dir eng Datebank am MongoDB erstellt, benotzt Akzent-onsensibel Kollatioun an aschreiwen, déi der Sprooch entspriechen an System Benotzer Kultur. Dëst wäert d'Sich duerch Stringdaten vill méi einfach maachen.

Schafen Kollektiounen mat groussen Dokumenter

MongoDB ass frou grouss Dokumenter bis zu 16MB a Sammlungen ze hosten, an GridFS Designt fir grouss Dokumenter méi wéi 16 MB. Awer just well grouss Dokumenter do kënne plazéiert ginn, ass et keng gutt Iddi ze späicheren. MongoDB funktionnéiert am Beschten wann Dir eenzel Dokumenter späichert déi e puer Kilobyte grouss sinn, a behandelt se méi wéi Reihen an enger breeder SQL Tabell. Grouss Dokumenter ginn eng Quell vu Problemer mat Produktivitéit.

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 réckelen, dat heescht et wäert néideg sinn Update Index och. Wann Dir en Dokument mat enger grousser Array nei indexéiert, ginn d'Indexen dacks iwwerschriwwen, well et gëtt opzehuelen, déi säin Index späichert. Dës Neiindexéierung geschitt och wann en Dokument agefouert oder geläscht gëtt.

MongoDB huet eppes genannt "Füllfaktor", déi Plaz gëtt fir Dokumenter ze wuessen fir dëse Problem ze minimiséieren.
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 lues.

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 Studio 3T wäert d'Konstruktioun vun Aggregatiounsufroen vereinfachen MongoDB. D'Aggregation Editor Feature erlaabt Iech Pipeline Aussoen eng Etapp gläichzäiteg z'applizéieren, an Input- an Outputdaten op all Etapp z'inspektéieren fir méi einfach Debugging.

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 Kontrollpunkt, wann de Logbuch behënnert ass.

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 commitIntervalMs.

Fir sécher vun den Entréen ze sinn, vergewëssert Iech datt d'Protokolléierung an der Konfiguratiounsdatei aktivéiert ass (storage.journal.enabled), 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 Index. Dir kënnt en eenzegen oder zesummegesate Index benotzen.

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 Zortéieren Operatiounen, a wann MongoDB dës Limit erreecht, da gëtt et entweder e Feeler oder zréck eidel Rekordset.

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 Aggregatioun Pipeline.

Entscheeden fir Multi-Aktualiséierungen ze benotzen

Methode db.collection.update() 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 update. Wat net sou offensichtlech ass, ass datt et net all Dokumenter an der Sammlung veraarbecht ausser Dir setzt d'Optioun multi 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 Themend. { 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 offiziell Norm JSON (ECMA-404 Sektioun 5), och wann et am JavaScript benotzt gëtt. Ausserdeem, fir BSON ass et obsolet a gëtt ëmgewandelt $null, wat net ëmmer eng gutt Léisung ass. Vermeiden ze benotzen "ondefinéiert" an MongoDB.

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.

14 Saachen déi ech wënschen ech wousst ier ech mat MongoDB ugefaang hunn

Liest méi:

Source: will.com

Setzt e Commentaire