A tradución do artigo preparouse na véspera do comezo do curso
Puntos destacados:
- É moi importante desenvolver un esquema aínda que sexa opcional en MongoDB.
- Así mesmo, os índices deben coincidir co teu esquema e patróns de acceso.
- Evite usar obxectos grandes e matrices grandes.
- Teña coidado coa configuración de MongoDB, especialmente cando se trata de seguridade e fiabilidade.
- MongoDB non ten un optimizador de consultas, polo que debes ter coidado ao realizar operacións de consulta.
Estiven traballando con bases de datos durante moito tempo, pero só recentemente descubrín MongoDB. Hai algunhas cousas que me gustaría saber antes de comezar a traballar con el. Cando unha persoa xa ten experiencia nun campo determinado, ten nocións preconcibidas sobre o que son as bases de datos e o que fan. Coa esperanza de facilitar a comprensión dos demais, presento unha lista de erros comúns.
Creando un servidor MongoDB sen autenticación
Desafortunadamente, MongoDB instálase sen autenticación por defecto. Para unha estación de traballo á que se accede localmente, esta práctica é normal. Pero dado que MongoDB é un sistema multiusuario ao que lle gusta empregar grandes cantidades de memoria, será mellor que o poñas nun servidor coa maior memoria RAM posible, aínda que só o vas utilizar para o desenvolvemento. A instalación no servidor a través do porto predeterminado pode ser problemática, especialmente se se pode executar algún código javascript na solicitude (por exemplo, $where
como idea para
Hai varios métodos de autenticación, pero o máis sinxelo é establecer un ID de usuario/contrasinal. Use esta idea mentres pensa na autenticación de fantasía baseada en
Non esquezas vincular a superficie de ataque a MongoDB
,
ou
. Dado que os ficheiros de datos non están cifrados en MongoDB estándar, ten sentido executar MongoDB
Erro ao desenvolver o circuíto
MongoDB non usa un esquema. Pero isto non significa que o esquema non sexa necesario. Se só queres almacenar documentos sen ningún patrón consistente, almacenalos pode ser rápido e sinxelo, pero recuperalos máis tarde pode ser difícil.
Artigo clásico "
Non esquezas a orde de clasificación
Esquecer a orde de clasificación pode causar máis frustración e perder máis tempo que calquera outra configuración incorrecta. Por defecto MongoBD usa
Crea coleccións con documentos grandes
MongoDB ten o pracer de aloxar documentos grandes de ata 16 MB en coleccións e
Creación de documentos con grandes matrices
Os documentos poden conter matrices. É mellor se o número de elementos da matriz está lonxe dun número de catro díxitos. Se se engaden elementos a unha matriz con frecuencia, superará o documento que o contén e terá que ser
MongoDB ten algo chamado
Podes pensar que podes prescindir da indexación de matrices. Desafortunadamente, a falta de índices pode provocar que teñas outros problemas. Dado que os documentos son escaneados de principio a fin, a busca de elementos ao final da matriz levará máis tempo e a maioría das operacións asociadas con tal documento serán
Non esquezas que a orde das etapas nunha agregación importa
Nun sistema de base de datos cun optimizador de consultas, as consultas que escribe son explicacións do que quere obter, non como obtelo. Este mecanismo funciona por analoxía co pedido nun restaurante: normalmente simplemente encargas un prato e non dás instrucións detalladas ao cociñeiro.
En MongoDB, instrúes ao cociñeiro. Por exemplo, cómpre asegurarse de que os datos pasan reduce
o máis cedo posible na canalización utilizando $match
и $project
, e a clasificación ocorre só despois reduce
, e que a busca ocorre exactamente na orde que desexa. Ter un optimizador de consultas que elimina o traballo innecesario, secuencia os pasos de forma óptima e selecciona tipos de unión pode estragarche. Con MongoDB, tes máis control a costa da comodidade.
Ferramentas como
Usando a gravación rápida
Nunca configure as opcións de escritura de MongoDB para que teñan alta velocidade pero baixa fiabilidade. Este modo "arquivar e esquecer" parece rápido porque o comando devólvese antes de que se produza a escritura. Se o sistema falla antes de escribir os datos no disco, perderanse e acabarán nun estado inconsistente. Afortunadamente, MongoDB de 64 bits ten habilitado o rexistro.
Os motores de almacenamento MMAPv1 e WiredTiger usan o rexistro para evitalo, aínda que WiredTiger pode recuperar a última versión consistente.
O rexistro en diario garante que a base de datos estea nun estado coherente despois da recuperación e conserva todos os datos ata que se escriba no diario. A frecuencia das gravacións configúrase mediante o parámetro
.
Para estar seguro das entradas, asegúrate de que o rexistro estea activado no ficheiro de configuración
, e a frecuencia das gravacións correspóndese coa cantidade de información que pode permitirse perder.
Ordenación sen índice
Ao buscar e agregar, moitas veces hai que ordenar os datos. Esperemos que isto se faga nunha das fases finais, despois de filtrar o resultado para reducir a cantidade de datos que se están ordenando. E mesmo neste caso, necesitarás para clasificar
Se non hai un índice axeitado, MongoDB prescindirá del. Hai un límite de memoria de 32 MB no tamaño total de todos os documentos
Busca sen compatibilidade con índices
As consultas de busca realizan unha función similar á operación JOIN en SQL. Para funcionar mellor, necesitan o índice do valor da clave utilizada como chave estranxeira. Isto non é obvio porque o uso non se reflicte explain()
. Estes índices súmanse ao índice escrito explain()
, que á súa vez é utilizado polos operadores de gasodutos $match
и $sort
, cando se atopan ao comezo do gasoduto. Agora os índices poden cubrir calquera etapa
Desactivar o uso de actualizacións múltiples
Método
úsase para cambiar parte dun documento existente ou o documento completo, ata unha substitución completa, dependendo do parámetro que especifique
. O que non é tan obvio é que non procesará todos os documentos da colección a menos que configures a opción
actualizar todos os documentos que cumpran os criterios de solicitude.
Non esquezas a importancia da orde das claves nunha táboa hash
En JSON, un obxecto consiste nunha colección non ordenada de tamaño cero ou máis pares nome/valor, onde o nome é unha cadea e o valor é unha cadea, número, booleano, nulo, obxecto ou matriz.
Desafortunadamente, BSON fai moita énfase na orde cando busca. En MongoDB, a orde das claves dentro dos obxectos integrados { firstname: "Phil", surname: "factor" }
- isto non é o mesmo que { { surname: "factor", firstname: "Phil" }
. É dicir, debes almacenar a orde dos pares nome/valor nos teus documentos se queres estar seguro de atopalos.
Non te confundas "Nulo" и "indefinido"
Valor "indefinido" nunca foi válido en JSON, segundo $null
, que non sempre é unha boa solución.
Usar $limit()
sen $sort()
Moitas veces, cando está a desenvolver en MongoDB, é útil só ver unha mostra do resultado que se devolverá dunha consulta ou agregación. Para esta tarefa necesitarás $limit()
, pero nunca debería estar no código final a menos que o uses antes $sort
. Esta mecánica é necesaria porque, se non, non pode garantir a orde do resultado e non poderá ver os datos de forma fiable. Na parte superior do resultado obterás diferentes entradas dependendo da clasificación. Para funcionar de forma fiable, as consultas e agregacións deben ser deterministas, é dicir, producir os mesmos resultados cada vez que se executan. Código que contén $limit()
, pero non $sort
, non será determinista e posteriormente pode causar erros que serán difíciles de rastrexar.
Conclusión
O único xeito de decepcionarse con MongoDB é comparalo directamente con outro tipo de base de datos, como un DBMS, ou chegar a utilizalo en función de determinadas expectativas. É como comparar unha laranxa cun garfo. Os sistemas de bases de datos serven para fins específicos. É mellor entender e apreciar estas diferenzas por si mesmo. Sería unha vergoña presionar aos desenvolvedores de MongoDB por un camiño que os obrigou a seguir o camiño do DBMS. Quero ver formas novas e interesantes de resolver problemas antigos, como garantir a integridade dos datos e crear sistemas de datos resistentes a fallos e ataques maliciosos.
A introdución de MongoDB da transaccionalidade ACID na versión 4.0 é un bo exemplo de introducir importantes melloras de forma innovadora. As transaccións con varios documentos e con varios extractos agora son atómicas. Tamén é posible axustar o tempo necesario para adquirir bloqueos e finalizar transaccións atascadas, así como cambiar o nivel de illamento.
Le máis:
Fonte: www.habr.com