La traducció de l'article es va preparar la vigília de l'inici del curs
Elements més destacats:
- És extremadament important desenvolupar un esquema tot i que és opcional a MongoDB.
- De la mateixa manera, els índexs han de coincidir amb el vostre esquema i patrons d'accés.
- Eviteu utilitzar objectes grans i matrius grans.
- Aneu amb compte amb la configuració de MongoDB, especialment quan es tracta de seguretat i fiabilitat.
- MongoDB no té un optimitzador de consultes, per la qual cosa heu de tenir cura quan feu operacions de consulta.
He estat treballant amb bases de dades durant molt de temps, però fa poc que he descobert MongoDB. Hi ha algunes coses que m'agradaria saber abans de començar a treballar-hi. Quan una persona ja té experiència en un camp determinat, té nocions preconcebudes sobre què són les bases de dades i què fan. Amb l'esperança de facilitar la comprensió dels altres, presento una llista d'errors comuns.
Creació d'un servidor MongoDB sense autenticació
Malauradament, MongoDB s'instal·la sense autenticació per defecte. Per a una estació de treball amb accés local, aquesta pràctica és normal. Però com que MongoDB és un sistema multiusuari al qual li agrada utilitzar grans quantitats de memòria, serà millor que el poseu en un servidor amb la màxima memòria RAM possible, encara que només el feu servir per al desenvolupament. La instal·lació al servidor mitjançant el port predeterminat pot ser problemàtica, especialment si es pot executar qualsevol codi javascript a la sol·licitud (per exemple, $where
com a idea per
Hi ha diversos mètodes d'autenticació, però el més fàcil és establir un ID d'usuari/contrasenya. Utilitzeu aquesta idea mentre penseu en l'autenticació fantàstica basada en
No us oblideu d'enllaçar la superfície d'atac a MongoDB
,
o
. Com que els fitxers de dades no estan xifrats a MongoDB estàndard, té sentit executar MongoDB amb
Error en desenvolupar el circuit
MongoDB no utilitza un esquema. Però això no vol dir que l'esquema no sigui necessari. Si només voleu emmagatzemar documents sense cap patró coherent, emmagatzemar-los pot ser ràpid i fàcil, però recuperar-los més tard pot ser difícil.
article clàssic "
No oblideu l'ordre de classificació
Oblidar l'ordre d'ordenació pot causar més frustració i perdre més temps que qualsevol altra configuració incorrecta. Per defecte, MongoBD utilitza
Crea col·leccions amb documents grans
MongoDB està encantat d'allotjar documents grans de fins a 16 MB en col·leccions i
Creació de documents amb matrius grans
Els documents poden contenir matrius. El millor és que el nombre d'elements de la matriu estigui lluny d'un nombre de quatre dígits. Si s'afegeixen elements a una matriu amb freqüència, superarà el document que el conté i haurà de ser
MongoDB té una cosa que es diu
Podríeu pensar que podeu prescindir de la indexació de matrius. Malauradament, la manca d'índexs pot provocar que tingueu altres problemes. Com que els documents s'escanegen de principi a fi, la cerca d'elements al final de la matriu trigarà més temps i la majoria de les operacions associades a aquest document seran
No oblideu que l'ordre de les etapes en una agregació és important
En un sistema de bases de dades amb un optimitzador de consultes, les consultes que escriviu són explicacions del que voleu obtenir, no com obtenir-ho. Aquest mecanisme funciona per analogia amb la comanda en un restaurant: normalment només demaneu un plat i no doneu instruccions detallades al cuiner.
A MongoDB, indiqueu al cuiner. Per exemple, heu d'assegurar-vos que les dades passen reduce
tan aviat com sigui possible en el pipeline utilitzant $match
и $project
, i l'ordenació només es produeix després reduce
, i que la cerca es produeixi exactament en l'ordre que voleu. Tenir un optimitzador de consultes que elimina el treball innecessari, seqüencia de manera òptima els passos i selecciona els tipus d'unió us pot espatllar. Amb MongoDB, teniu més control a costa de la comoditat.
Eines com
Ús de la gravació ràpida
No configureu mai les opcions d'escriptura de MongoDB perquè tinguin alta velocitat però poca fiabilitat. Aquest mode "Arxivar i oblidar" sembla ràpid perquè l'ordre es retorna abans que es produeixi l'escriptura. Si el sistema falla abans que les dades s'escriguin al disc, es perdran i acabaran en un estat inconsistent. Afortunadament, MongoDB de 64 bits ha activat el registre.
Els motors d'emmagatzematge MMAPv1 i WiredTiger utilitzen el registre per evitar-ho, tot i que WiredTiger pot recuperar-se fins a l'última coherència.
El registre en diari garanteix que la base de dades estigui en un estat coherent després de la recuperació i conserva totes les dades fins que s'escriuen al diari. La freqüència d'enregistraments es configura mitjançant el paràmetre
.
Per estar segur de les entrades, assegureu-vos que el registre estigui habilitat al fitxer de configuració
, i la freqüència de les gravacions correspon a la quantitat d'informació que us podeu permetre perdre.
Ordenació sense índex
En cercar i agregar, sovint cal ordenar les dades. Esperem que això es faci en una de les etapes finals, després de filtrar el resultat per tal de reduir la quantitat de dades que s'estan ordenant. I fins i tot en aquest cas, necessitareu per a la classificació
Si no hi ha un índex adequat, MongoDB es farà sense ell. Hi ha un límit de memòria de 32 MB a la mida total de tots els documents
Cerca sense suport d'índex
Les consultes de cerca realitzen una funció similar a l'operació JOIN a SQL. Per funcionar millor, necessiten l'índex del valor de la clau utilitzada com a clau estrangera. Això no és obvi perquè l'ús no es reflecteix explain()
. Aquests índexs s'afegeixen a l'índex escrit explain()
, que al seu torn és utilitzat pels operadors de canonades $match
и $sort
, quan es troben a l'inici del gasoducte. Els índexs ara poden cobrir qualsevol etapa
Desactivar l'ús de les actualitzacions múltiples
Mètode
s'utilitza per canviar part d'un document existent o tot el document, fins a una substitució completa, depenent del paràmetre que especifiqueu
. El que no és tan obvi és que no processarà tots els documents de la col·lecció tret que definiu l'opció
per actualitzar tots els documents que compleixin els criteris de sol·licitud.
No oblideu la importància de l'ordre de les claus en una taula hash
A JSON, un objecte consisteix en una col·lecció no ordenada de mida zero o més parells nom/valor, on el nom és una cadena i el valor és una cadena, nombre, booleà, nul, objecte o matriu.
Malauradament, BSON posa molt èmfasi en l'ordre quan es cerca. A MongoDB, l'ordre de les claus dins dels objectes integrats { firstname: "Phil", surname: "factor" }
- això no és el mateix que { { surname: "factor", firstname: "Phil" }
. És a dir, heu d'emmagatzemar l'ordre dels parells nom/valor als vostres documents si voleu estar segur de trobar-los.
No us confongueu «Null» и "indefinit"
Valor "indefinit" mai va ser vàlid en JSON, segons $null
, que no sempre és una bona solució.
Utilitzar $limit()
без $sort()
Molt sovint, quan esteu desenvolupant a MongoDB, és útil només veure una mostra del resultat que es retornarà d'una consulta o agregació. Per a aquesta tasca necessitareu $limit()
, però mai hauria d'estar al codi final tret que l'utilitzeu abans $sort
. Aquesta mecànica és necessària perquè, en cas contrari, no podeu garantir l'ordre del resultat, i no podreu visualitzar les dades de manera fiable. A la part superior del resultat obtindreu diferents entrades segons l'ordenació. Per funcionar de manera fiable, les consultes i agregacions han de ser deterministes, és a dir, produir els mateixos resultats cada vegada que s'executen. Codi que conté $limit()
, però no $sort
, no serà determinista i, posteriorment, pot provocar errors difícils de localitzar.
Conclusió
L'única manera de sentir-se decebut amb MongoDB és comparar-lo directament amb un altre tipus de base de dades, com un DBMS, o arribar a utilitzar-lo en funció de determinades expectatives. És com comparar una taronja amb una forquilla. Els sistemes de bases de dades tenen finalitats específiques. El millor és simplement entendre i apreciar aquestes diferències per tu mateix. Seria una vergonya pressionar els desenvolupadors de MongoDB per un camí que els obligués a seguir el camí de DBMS. Vull veure maneres noves i interessants de resoldre problemes antics, com ara garantir la integritat de les dades i crear sistemes de dades que siguin resistents als errors i als atacs maliciosos.
La introducció de la transaccionalitat ACID per part de MongoDB a la versió 4.0 és un bon exemple d'introduir millores importants d'una manera innovadora. Les transaccions de diversos documents i de diversos extractes són ara atòmiques. També és possible ajustar el temps necessari per adquirir bloquejos i finalitzar transaccions bloquejades, així com canviar el nivell d'aïllament.
Llegeix més:
Font: www.habr.com