La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Qué es MongoDB? Lo sabrás después de leerlo.

¿Qué es MongoDB? Lo sabrás después de leerlo.

Haga clic en la fuente azul de arriba y seleccione "Fijar cuenta oficial de WeChat".

Artículos de alta calidad, entregados lo antes posible.

Enlace | blog.csdn.net/hayre/article/details/80628431

1. Resumen en una frase

MongoDB es un sistema de gestión de bases de datos diseñado para aplicaciones web e infraestructura de Internet. Así es. MongoDB es una base de datos. Esta es una base de datos de tipo NoSQL.

(1) MongoDB propone los conceptos de documentos y colecciones, utiliza BSON (similar a JSON) como estructura de modelo de datos y está orientado a objetos en lugar de una tabla bidimensional. Almacenar un usuario en MongoDB es así.

Al utilizar este modelo de datos, MongoDB puede proporcionar altas capacidades de lectura y escritura en un entorno de producción, y su rendimiento mejora enormemente en comparación con las bases de datos SQL como mysql.

(2) Fácil de expandir y con conmutación por error automática. La escalabilidad se refiere a la capacidad de dividir un conjunto de datos para que la presión de almacenamiento de los datos se comparta entre varios servidores. La conmutación por error automática es el concepto de conjuntos de réplicas. MongoDB puede detectar si el nodo maestro está activo. Cuando el nodo maestro está inactivo, puede promover automáticamente el nodo esclavo al nodo maestro para lograr la conmutación por error.

(3) Dado que el modelo de datos está orientado a objetos, puede representar estructuras de datos jerárquicas ricas. Por ejemplo, en un sistema de blog, los "comentarios" se pueden insertar directamente en el documento del "artículo" sin crear tres tablas para describir esta relación como myqsl.

3. Características principales

(1) Tipo de datos del documento

La base de datos SQL está estandarizada y la integridad de los datos se puede garantizar mediante las restricciones de la primaria. claves o claves externas y unicidad, por lo que las bases de datos SQL se utilizan a menudo en sistemas con alta integridad de datos. MongoDB no es tan bueno como la base de datos SQL en este sentido y MongoDB no tiene un esquema fijo. Precisamente porque MongoDB carece de algunas de estas restricciones, puede hacer que la estructura de almacenamiento de datos sea más flexible y la velocidad de almacenamiento más rápida. (2) Capacidades de consulta en tiempo real

MongoDB conserva las capacidades de consulta en tiempo real y las capacidades de indexación de las bases de datos relacionales (la capa inferior se basa en el árbol B). Esto aprovecha las ventajas de las bases de datos relacionales y no tiene las capacidades anteriores en comparación con el mismo tipo de redis NoSQL. (3) Capacidad de replicación

MongoDB en sí proporciona un conjunto de réplicas que puede distribuir datos entre múltiples máquinas para lograr redundancia, proporcionando así conmutación automática por error y capacidades de lectura extendidas. (4) Velocidad y persistencia

El controlador de MongoDB implementa un disparo semántico de escritura y olvido, es decir, al escribir a través del controlador, puede obtener inmediatamente un resultado exitoso (incluso un error), lo que hace que la escritura velocidad más rápido. Es rápido, pero por supuesto no es seguro y depende completamente de Internet.

MongoDB proporciona el concepto de registro, que en realidad es como el registro bin-log de mysql. Cuando se necesita una inserción, escribe el registro en el registro antes de completar la manipulación de datos real. De esta manera, si hay un corte de energía y el proceso se interrumpe repentinamente, se puede garantizar que los datos sean correctos y la función de reparación puede leer los registros para su reparación.

(5) Expansión de datos

MongoDB utiliza tecnología de fragmentación para expandir los datos. MongoDB puede fragmentar y transmitir automáticamente bloques de datos en fragmentos para que cada servidor almacene el mismo tamaño de datos.

El servidor central de MongoDB se inicia principalmente mediante el programa MongoDB. La memoria utilizada por MongoDB no necesita configurarse al inicio, porque su concepto de diseño es que es mejor dejar la administración de la memoria en manos del sistema operativo. Las deficiencias de la configuración de la memoria son aspectos destacados del diseño de MongoDB. Además, la funcionalidad de fragmentación está disponible a través del servidor de enrutamiento mongos.

El cliente principal de mongoDB es un shell js interactivo, lanzado a través de Mongo. Con js shell, puede usar js directamente para comunicarse con MongoDB y usar la sintaxis js para consultar datos de MongoDB como declaraciones sql. Además, se proporcionan paquetes de controladores en varios idiomas para facilitar el acceso en varios idiomas.

Mongodump y mongorestore, herramientas estándar para realizar copias de seguridad y restaurar bases de datos. Salida en formato BSON y migración de la base de datos.

Mongoexport y mongoimport se utilizan para importar y exportar datos JSON, CSV y TSV, lo cual es útil cuando los datos deben admitir múltiples formatos. Mongoimport también se puede utilizar para la importación inicial de grandes conjuntos de datos, pero, por cierto, es importante tener en cuenta antes de importar que para utilizar mongoDB por completo, generalmente se requieren algunos ajustes en el modelo de datos.

Mongosniff es una herramienta de rastreo de redes que se utiliza para observar las operaciones enviadas a la base de datos. Básicamente, convierte el BSON que circula por la web en una declaración de shell legible por humanos.

Por lo tanto, se puede concluir que MongoDB combina las mejores características del almacenamiento clave-valor y las bases de datos relacionales. Debido a su simplicidad, la velocidad de los datos es extremadamente rápida, es relativamente fácil de escalar y proporciona una base de datos con mecanismos de consulta complejos. MongoDB debe ejecutarse en un servidor de 64 bits y es mejor implementarlo por separado. Debido a que es una base de datos, también se requieren el modo de espera en caliente y el modo de espera en frío.

Debido a que este artículo no es un manual de API, el uso del shell aquí también es una introducción básica a qué funciones se pueden usar y qué declaraciones se pueden usar, principalmente para demostrar la conveniencia de usar el shell MongoDB. . Si necesita conocer la sintaxis específica del shell MongoDB, puede consultar la documentación oficial.

Crear una base de datos no es una operación necesaria. Las bases de datos y colecciones sólo se crean la primera vez que se inserta un documento, en consonancia con el procesamiento dinámico de datos. Simplifica y acelera el proceso de desarrollo y facilita la asignación dinámica de espacios de nombres. Si le preocupa que una base de datos o una colección se cree accidentalmente, puede activar el modo estricto.

Los comandos anteriores son solo ejemplos simples. Supongamos que no ha aprendido ninguna sintaxis de base de datos antes y comienza a aprender la sintaxis de consulta SQL y la sintaxis de consulta MongoDB al mismo tiempo. Si utiliza el controlador Java para operar MongoDB, encontrará que cualquier consulta es la misma que el método de consulta proporcionado por Hibernate. Siempre que construya un objeto de condición de consulta, podrá realizar consultas fácilmente (a continuación se dará un ejemplo). El blogger estaba familiarizado con ES6 antes, por lo que no fue un problema comenzar con MongoDB js shell. Es precisamente por este mecanismo de consulta simple y perfecto que me enamoré profundamente de MongoDB.

Es muy simple usar el controlador Java para conectarse a MongoDB, referencia simple, adición, eliminación y consulta simples. Después de usar el controlador Java, descubrí que la encapsulación de MongoDB de Spring no es tan buena como la oficial. Muéstralo brevemente.

Aquí solo hay enlaces simples y operaciones simples de MongoDB, lo que muestra lo fácil que es la operación. Cuando se utiliza el controlador, se comunica con MongoDB según el socket TCP. Si hay demasiados resultados de consulta para caber en el primer servidor, se enviará un comando getmore al servidor para obtener el siguiente lote de resultados de consulta.

Al insertar datos al servidor, no espera respuesta del servidor. El controlador asumirá que la escritura fue exitosa y realmente utilizará el cliente para generar la identificación del objeto. Sin embargo, este comportamiento se puede configurar mediante la configuración y se puede activar mediante el modo seguro, que puede verificar si hay errores de inserción del lado del servidor.

Comprender las unidades de datos básicas de MongoDB. En una base de datos relacional hay tablas de datos que contienen columnas y filas. La unidad básica de datos de MongoDB es un documento BSON, que contiene claves que apuntan a valores variables. MongoDB tiene consultas instantáneas, pero no admite operaciones de unión. El almacenamiento de valores-clave simple solo puede obtener valores basados ​​en una única clave y no admite transacciones, pero admite varias operaciones de actualización atómica.

Por ejemplo, cuál es la proporción de lectura y escritura, qué tipo de consultas se necesitan, cómo se actualizan los datos, si hay problemas de concurrencia y si la estructura de datos es alta o baja. Las necesidades del propio sistema determinan si mysql o MongoDB.

Al diseñar esquemas se deben tener en cuenta algunos principios, como por ejemplo:

Una base de datos es una agrupación lógica y física de colecciones. MongoDB no proporciona una sintaxis para crear una base de datos. La base de datos solo se crea cuando se inserta una colección.

Cuando se crea una base de datos, se asigna un conjunto de archivos de datos en el disco y todas las colecciones, índices y otros metadatos de la base de datos se guardan en estos archivos. Puede verificar el estado del disco de la base de datos.

Una colección es un contenedor de documentos con estructura o conceptos similares. Los nombres de las colecciones pueden contener números, letras o. Símbolo, pero debe comenzar con una letra o número y debe estar completo.

Limita los nombres de las colecciones a no más de 128 caracteres. De hecho, los símbolos son muy útiles en las colecciones para proporcionar algún tipo de espacio de nombres virtual. Este es un principio organizativo, como cualquier otra colección. Se puede utilizar en colecciones.

El segundo es el valor clave. Todas las cadenas en MongoDB son UTF-8. Los tipos numéricos incluyen double, int y long. Todos los tipos de fecha están en formato UTC, por lo que la hora vista en MongoDB será 8 horas más lenta que la hora de Beijing. El tamaño total del documento se limitará a 16 m, ya que esto evita la creación de tipos de datos desagradables y los documentos pequeños mejoran el rendimiento. El rango de números ideal para la inserción de documentos por lotes es de 10 a 200 y el tamaño no puede exceder los 16 MB.

(2) Al analizar la consulta, MongoDB selecciona un índice para la consulta a través de la solución óptima. Cuando no existe el índice más adecuado, primero utilizará cada índice para la consulta y finalmente seleccionará un índice óptimo para la consulta.

(3) Si hay un índice completo de a-b, entonces sólo el índice de A es redundante.

(4) El orden de las claves en un índice compuesto es muy importante.

(2) Índice completo

(3) Índice único

(4) Índice disperso

Por ejemplo, aparecerá en los valores del campo de índice en, o una gran cantidad de documentos no contienen claves de índice.

Si el conjunto de datos es grande, la indexación llevará mucho tiempo y afectará el rendimiento del programa.

El índice se reconstruirá cuando se utilice mongorestore. Al realizar eliminaciones a gran escala, puede utilizar

compresión y reconstruir el índice.

(1) Verifique el registro de consultas lentas.

(2) Análisis de consultas lentas

Tenga en cuenta que el método de explicación de la nueva versión de MongoDB requiere parámetros; de lo contrario, solo se mostrará información ordinaria.

Esta sección también presenta brevemente la simplicidad de la construcción del conjunto de réplicas de MongoDB, la solidez del conjunto de réplicas y la conveniencia de la supervisión.

Proporciona capacidades de replicación maestro-esclavo, capacidades de respaldo en caliente y capacidades de conmutación por error.

De hecho, la operación de conjuntos de réplicas de MongoDB es similar a la operación maestro-esclavo de mysql. Primero echemos un vistazo al proceso de flujo de datos maestro-esclavo de mysql.

El archivo de registro en el que se basa principalmente MongoDB es oplog.

Las operaciones de escritura primero se registran y se agregan al registro de operaciones del nodo maestro. Al mismo tiempo, todos los nodos esclavos replican el registro de operaciones. Primero, verifique la marca de tiempo de la última entrada en el registro de operaciones; segundo, consulte el registro de operaciones del nodo maestro para todas las entradas mayores que esa marca de tiempo, finalmente, agregue estos elementos a su propio registro de operaciones y aplíquelos en su propia biblioteca; El esclavo utiliza un sondeo largo para aplicar inmediatamente nuevas entradas del registro operativo del maestro.

Cuando se cumplen las siguientes condiciones, el nodo esclavo detiene la replicación.

La base de datos local almacena todos los datos de los elementos del conjunto de réplicas y los registros de operaciones.

Puedes utilizar el siguiente comando para ver la replicación.

Cada miembro del conjunto de réplicas hace ping a todos los demás miembros una vez por segundo, y usted puede ver la marca de tiempo del último latido y el estado de salud del nodo a través de rs.status

Esto tampoco es obligatorio Hay mucho que describir, pero hay una escena en particular. Si se eliminan tanto el nodo esclavo como el nodo árbitro, dejando solo el nodo maestro, se degradará a nodo esclavo.

Si los datos del nodo maestro no se escriben en la base de datos esclava, entonces los datos no se pueden considerar enviados. Cuando el nodo maestro se convierte en un nodo esclavo, se activará una reversión. Los datos que aún no se hayan escrito en la base de datos esclava se eliminarán y el contenido revertido se puede restaurar revirtiendo el archivo BSON en el subdirectorio.

Solo puedes vincular al nodo maestro. Si se vincula a un nodo esclavo, se le negarán las operaciones de escritura. Sin embargo, si no utiliza el modo seguro, debido a las características de incendio y olvido de mongo, obtendrá una excepción que se niega a escribir.

(2) Enlace a través de conjuntos de réplicas.

Puede realizar una conmutación por error automática en función de las escrituras, pero seguirá fallando cuando se produzca una nueva elección en el conjunto de réplicas. Si no utiliza el modo seguro, aún no podrá escribir, pero en realidad será exitoso.

La fragmentación es una implementación conceptual de la segmentación de bases de datos. A continuación se presenta un breve resumen de por qué se utiliza la fragmentación, así como sus principios y operaciones.

Cuando la cantidad de datos es demasiado grande, el índice y el conjunto de datos de trabajo ocuparán cada vez más memoria, y este problema debe resolverse mediante la carga fragmentada.

(2) Operaciones principales de corte

Una colección de fragmentos: los fragmentos se dividen según el rango de un atributo. MongoDB utiliza las llamadas claves de fragmentos para permitir que cada documento se encuentre. su propio fragmento dentro de estos rangos.

Bloque: un rango de claves de segmento continuo ubicado en un segmento, que puede entenderse como un segmento compuesto por varios bloques, que constituye todos los datos en MongoDB.

(3) Dividir y migrar

Fragmentación: solo hay un fragmento cuando se inicializa. La fragmentación se activa cuando el tamaño máximo del fragmento es 64 MB o 100 000 documentos. Divida el rango original por la mitad para tener dos bloques, cada uno con la misma cantidad de documentos.

Migración: La migración se produce cuando los datos de los fragmentos son de diferentes tamaños. Por ejemplo, si hay más datos en el fragmento A, algunos bloques del fragmento A se moverán al fragmento B. El grupo de fragmentos logra el equilibrio moviendo los bloques en los fragmentos, lo cual se administra mediante un proceso de software llamado equilibrador. La tarea es garantizar que los datos se distribuyan uniformemente dentro de cada fragmento. Cuando la diferencia de bloques entre el segmento con más bloques y el segmento con menos bloques en el grupo es mayor que 8, el ecualizador inicia el proceso de ecualización.

Inicia dos conjuntos de réplicas, tres servidores de configuración y un proceso mongos.

Configuración de fragmentos

(2) Índice

La colección de fragmentos solo permite agregar índices únicos en el campo _id y la clave del fragmento, pero no en otros lugares, porque requiere comunicación entre fragmentos y es muy complejo de implementar.

Cuando crea un sector, se crea un índice basado en la clave del sector.

(2) Clave de fragmento ineficiente

(3) Clave de fragmento ideal

Según los diferentes centros de datos.

(2)Requisitos mínimos

(3)Consideraciones de configuración

Cuando necesite estimar el tamaño del clúster, puede utilizar el siguiente comando para dividir el clúster existente. recopilación.

(4) Realizar una copia de seguridad de clústeres segmentados

Al realizar una copia de seguridad de los sectores, debe detener el ecualizador.

Utilice máquinas de 64 bits y máquinas de 32 bits para limitar la memoria de mongodb a un máximo de 1,5 GB.

(2)cpu mongodb encontrará cuellos de botella en la CPU solo cuando el índice y el conjunto de trabajo se puedan guardar en la memoria. La función de la CPU en mongodb es recuperar datos. Si ve saturación de CPU, puede verificar si un problema de consulta la está causando consultando el registro de consultas lentas. Si es así, puedes resolver el problema agregando un índice.

Mongodb usa la CPU al escribir datos, pero mongodb solo usa un núcleo a la vez. Si hay un comportamiento de escritura frecuente, este problema se puede resolver dividiendo (3) la memoria.

La gran memoria es una garantía de mongodb. Si el tamaño del conjunto de trabajo excede la memoria, el rendimiento disminuirá debido al aumento en la carga de datos en la memoria.

(4) Disco duro

De forma predeterminada, mongodb se sincronizará forzosamente con el disco cada 60 segundos, lo que se denomina actualización en segundo plano y generará operaciones de E/S. Al reiniciar, mongodb cargará los datos del disco en la memoria y el disco de alta velocidad reducirá el tiempo de sincronización.

(5) Sistema de archivos

Usar sistemas de archivos ext4 y xfs

Desactivar hora del último acceso

(6) Descriptor de archivo

El descriptor de archivo predeterminado en Linux es 1024, que debe aumentarse considerablemente.

(7) Reloj

Todos los servidores de nodo en mongodb usan servidores Ntp.

Utilice el comando -bind_ip al inicio.

(2) Autenticación

Utilice el comando -auth al inicio.

(3) Autenticación del conjunto de réplicas

Cuando utilice keyFile, tenga en cuenta que los permisos del archivo keyFile deben ser 600; de lo contrario, no se podrá iniciar.

Se requieren al menos dos nodos para crear un conjunto de réplicas y el nodo de quórum no necesita tener su propio servidor.

(2) El registro de diario primero escribe los datos en el registro. En este momento, los datos no se escriben directamente en el disco duro, sino en la memoria.

Sin embargo, el registro consume memoria, por lo que se puede desactivar en la biblioteca maestra e iniciar en la biblioteca esclava.

Puedes usar SSD solo para iniciar sesión.

Al insertar, el controlador puede garantizar la retroalimentación del registro después de la inserción, pero esto afectará en gran medida el rendimiento.

opción vvvvv (cuanto mayor sea v, más detallada será la salida)

el comando de ejecución db ({ logrotare:1 }) activa el registro continuo.

(2)Top

(3)db top actual

Visualización dinámica de los datos de actividad de mongodb

Ocupa la escucha actual de mongodb. puerto Puerto 1000 arriba.

Exporta el contenido de la base de datos a archivos BSON, que mongorestore puede leer y restaurar.

(2) Restauración mejorada

Restaura el archivo BSON exportado a la base de datos.

(3) Puede hacerlo haciendo una copia de seguridad de los archivos de datos originales. Sin embargo, debe bloquear la base de datos antes de operar. D. B. Ejecutarcomando ({fsync: 1, lock: true}) DB. $cmd. sistema. Desbloqueado. FindOne solicita una operación de desbloqueo, pero la base de datos no se desbloqueará inmediatamente y requiere verificación db.currentOp.

db . run comando({ reparar base de datos:1 }) repara una única base de datos.

La solución consiste en leer y reescribir todos los archivos de datos basándose en el archivo Jourling y reconstruir cada compresión de índice (2).

La compresión reescribirá los archivos de datos y reconstruirá todos los índices de la colección. Debe detenerse o ejecutarse en la biblioteca esclava. Si necesita ejecutarse en la biblioteca principal, debe agregar el parámetro force para garantizar bloqueos de escritura.

(2) Verifique índices y consultas para mejorar el rendimiento.

En general, escanee la menor cantidad de documentos posible.

Asegúrese de que no haya índices redundantes. Los índices redundantes ocupan espacio en disco, consumen más memoria y requieren más trabajo en cada escritura.

(3) Agregar memoria

Si la suma del tamaño de datos dataSize y indexSize es mayor que la memoria, el rendimiento se verá afectado.

Si el tamaño de almacenamiento excede el doble del tamaño de los datos, el rendimiento se verá afectado por la fragmentación del disco y será necesaria la compresión.