Document Details

Itan

Uploaded by Itan

Universidad Internacional de La Rioja

Tags

MongoDB bases de datos glosario programación

Summary

Este documento proporciona una guía detallada sobre la gestión de MongoDB, incluyendo temas como seguridad, respaldos, rendimiento y sharding. Se enfoca en las mejores prácticas y consejos para el desarrollo o pruebas, y abarca sistemas integrados, conjuntos de réplicas y escalamiento horizontal.

Full Transcript

Tema 5 Métodos de Captura y Almacenamiento de los Datos Gestión de MongoDB © Universidad Internacional de La Rioja (UNIR) Índice Esquema 3 Ideas clave 4 5.1. Introducción y objetivos 4 5.2. Seguridad 5 5.3. Respaldo 11 5.4. Rendimiento 18 5.5. Sharding 23 A fondo 27 Test 30 La seguridad del entorno...

Tema 5 Métodos de Captura y Almacenamiento de los Datos Gestión de MongoDB © Universidad Internacional de La Rioja (UNIR) Índice Esquema 3 Ideas clave 4 5.1. Introducción y objetivos 4 5.2. Seguridad 5 5.3. Respaldo 11 5.4. Rendimiento 18 5.5. Sharding 23 A fondo 27 Test 30 La seguridad del entorno MongoDB puede incrementarse con el uso de un firewall. MongoDB brinda capacidades de replicación, para lograr reducirse e incrementar la capacidad. La herramienta Montorestore permite restaurar una copia de respaldo en el sistema MongoDB. La herramienta Mongodump se utiliza para crear una copia de respaldo de una base de datos en MongoDB. Autenticación y listas de acceso: permiten controlar permisos de interacción con bases de datos. Para restringir conexiones desde una interfaz en específico se debe indicar la dirección IP en el parámetro –Bind_ip Respaldo Este aumento de rendimiento se ve reflejado en el número de documentos analizados y, por consiguiente, en el tiempo de respuesta. Sharding: método utilizado por MongoDB para distribuir datos en varios servidores y aumentar así su capacidad. Los índices permiten ejecutar consultas de forma eficiente. Cada shard está encargado de almacenar la información. Cada shard es un replica set, por lo que brinda alta disponibilidad y consistencia en datos. Sharding Rendimiento GESTIÓN DE MONGODB Seguridad © Universidad Internacional de La Rioja (UNIR) Esquema Métodos de Captura y Almacenamiento de los Datos Tema 5. Esquema 3 Ideas clave 5.1. Introducción y objetivos Este tema se enfoca en operaciones y parámetros para la gestión de bases de datos en el sistema MongoDB. La mejor forma para estudiar este tema es mediante la lectura de las Ideas clave, sobre todo por el alto número de conceptos que aparecen relacionados con el rendimiento de las bases de datos. Además, la realización de las actividades permitirá poner en práctica la aplicación de estos conceptos. Al contrario que con las operaciones básicas, verificar el resultado de operaciones de gestión puede tener un grado mayor de complejidad, por lo que se recomienda validar las soluciones. Un correcto tratamiento del almacenamiento de información requiere conocimientos sobre la gestión del sistema de base de datos. Es por esta razón que, además de estudiar las operaciones básicas para el tratamiento de datos en MongoDB, también se hará un repaso de operaciones de gestión sobre la base de datos. Las operaciones de gestión que se describen en este tema toman en cuenta la gestión de parámetros de seguridad, que es de gran importancia cuando los datos que se manipulan son de carácter personal o privado. Otra parte importante es la migración © Universidad Internacional de La Rioja (UNIR) de una base de datos, lo cual incluye la realización de copias de respaldo y la restauración de la copia, así como la replicación de nodos para respaldo. Además, es necesario configurar la base de datos para lograr un rendimiento óptimo, lo cual puede realizarse a través de la creación de índices. Finalmente, se abordarán temas de repartición de la carga entre diferentes nodos gracias al sharding. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 4 Los objetivos que se persiguen con este tema son los siguientes:  Conocer los elementos mínimos que una correcta gestión de MongoDB debe incorporar.  Entender los requerimientos mínimos de seguridad en un despliegue de MongoDB.  Aprender los pasos para configurar los procesos de respaldo, mejora del rendimiento y sharding en la base de datos. 5.2. Seguridad Uno de los aspectos que tomar en cuenta en entornos de producción es la protección de los datos mediante medidas de seguridad. MongoDB permite restringir el acceso a las bases de datos mediante la autenticación del usuario. Inicialmente se debe crear un usuario administrador, el cual tendrá privilegios para crear usuarios y acceder a todas las bases de datos en el sistema. Un usuario puede tener privilegios en diferentes bases de datos. Si necesita que un usuario tenga privilegios en varias bases de datos, crea un solo usuario con roles que otorguen los privilegios de base de datos aplicables en lugar de crear el usuario varias veces en diferentes bases de datos. El proceso para crear un administrador consiste en utilizar el comando createUser en la © Universidad Internacional de La Rioja (UNIR) base de datos admin: use admin db.createUser(, ) Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 5 Por defecto, el servicio mongod no requiere autenticación para interactuar con la base de datos. Este comportamiento puede cambiarse mediante el parámetro --auth al ejecutar mongod desde la línea de comando. Para autenticarse desde la consola de MongoDB se utiliza el comando db.auth: db.auth(, ) La creación de usuarios en una base de datos se realiza con el mismo comando, con la diferencia de realizarlo dentro de la base de datos apropiada y no en admin. Además, en la creación de un usuario de base de datos, el comando db.auth puede recibir un tercer parámetro de valor booleano que indica si el usuario solamente tiene privilegios de lectura. Además de asegurar el acceso a la base de datos a través de métodos de autenticación, en ocasiones es conveniente restringir los mecanismos de acceso a nivel de red. Por defecto, MongoDB espera conexiones desde cualquier interfaz de red del ordenador en el que se encuentra. Para restringir conexiones desde una interfaz en específico se debe indicar la dirección IP en el parámetro --bind_ip al iniciar el servicio mongod. Además de las opciones de seguridad que ofrece Mongo, es posible añadir muchas otras externas, como podría ser la utilización de un firewall para restringir las comunicaciones del exterior o de otros dominios. A continuación, se describen mediante un ejemplo los pasos necesarios para realizar una © Universidad Internacional de La Rioja (UNIR) correcta restricción de acceso:  Paso 1: se crea el usuario administrador: db.createUser({ user:"admin", pwd: "mipassword“, Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 6 roles:[ "clusterAdmin", "readAnyDatabase", "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase“ ] });  Paso 2: se para el servidor y se lanza de nuevo con la autenticación activada. Este proceso se puede realizar de dos maneras: Arrancamos el servidor con el siguiente comando: mongod --auth --port 27017 --dbpath /data/db1 Añadimos la siguiente línea al archivo de configuración de Mongo: security: authorization: enabled  Paso 3: se crea el usuario con los roles establecidos. Se entra como administrador: mongo –u “usuario” –p “pass” O se accede a la base de datos en la que se quiere el usuario: © Universidad Internacional de La Rioja (UNIR) use DatabaseForSensors Se crea el usuario para esa base de datos: db.createUser({ user: “luis", pwd: “jf9paus90D", Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 7 roles: [ { role: "readWrite", db: "DatabaseForSensors"}, }) MongoDB ofrece funciones integradas, que proporcionan los diferentes niveles de acceso comúnmente necesarios en un sistema de base de datos. Existen roles de usuario de base de datos incorporados y funciones de administración de bases de datos en cada base de datos. La base de datos admin contiene funciones adicionales. Cada base de datos incluye los siguientes roles:  read: proporciona la capacidad de leer datos de todas las colecciones que no son del sistema y de las siguientes colecciones del sistema: system.indexes, system.js y system.namespaces.  readWrite: proporciona todos los privilegios del rol de lectura y la capacidad de modificar datos de todas las colecciones que no son del sistema y de la colección system.js. Cada base de datos incluye los siguientes roles de administración de base de datos:  dbadmin: proporciona la capacidad de realizar tareas administrativas, tales como tareas relacionadas con el esquema, indexación y recopilación de estadísticas. Esta función no otorga privilegios para la administración de usuarios y roles.  dbOwner: proporciona la capacidad de realizar cualquier acción administrativa en la base de datos. Este rol combina los privilegios otorgados por las funciones readWrite, © Universidad Internacional de La Rioja (UNIR) dbAdmin  y userAdmin. userAdmin: proporciona la capacidad de crear y modificar roles y usuarios en la base de datos actual. Dado que el rol userAdmin permite a los usuarios otorgar cualquier privilegio a cualquier usuario, incluyendo a ellos mismos, el rol también Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 8 indirectamente proporciona acceso de superusuario a la base de datos o, si se extiende a la base de datos de administración, al clúster. La base de datos admin incluye las siguientes funciones para administrar todo el sistema en lugar de una base de datos específica:  clusterAdmin: proporciona el mayor acceso de administración de clústeres. Este rol combina los privilegios otorgados por las funciones clusterManager, clusterMonitor y hostManager. Además, la función proporciona la acción dropDatabase.  clusterManager: proporciona acciones de administración y supervisión en el clúster. Un usuario con esta función puede acceder a las bases de datos de configuración y local, que se utilizan en sharding y replicación, respectivamente.  clusterMonitor: proporciona acceso de solo lectura a las herramientas de supervisión, como MongoDB Cloud Manager y el agente de supervisión Ops Manager.  hostManager: proporciona la capacidad de supervisar y administrar servidores. La base de datos admin incluye las siguientes funciones para realizar copias de seguridad y restaurar datos:  backup: proporciona los privilegios necesarios para realizar copias de seguridad de los datos. Esta función proporciona suficientes privilegios para utilizar el agente de copia de seguridad de MongoDB Cloud Manager, el agente de copia de seguridad de Ops © Universidad Internacional de La Rioja (UNIR) Manager o para utilizar mongodump.  restore: proporciona los privilegios necesarios para restaurar los datos con mongorestore sin la opción --oplogReplay o sin los datos de la colección system.profile. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 9 Estas funciones en la base de datos de administración se aplican a todas las bases de datos local y config excepto en una instancia mongod:  readAnyDatabase: proporciona los mismos permisos de solo lectura, excepto los que se aplican sobre todas las bases de datos, las locales y el config del clúster. El rol también proporciona la acción listDatabases en el clúster como un todo.  readWriteAnyDatabase: proporciona los mismos permisos de lectura y escritura que readWrite, excepto que se aplica a todas las bases de datos local y config del clúster. El rol también proporciona la acción listDatabases en el clúster como un todo.  userAdminAnyDatabase: proporciona el mismo acceso a las operaciones de administración de usuarios como userAdmin, excepto que se aplica a todas las bases de datos local y config del clúster.  dbAdminAnyDatabase: proporciona el mismo acceso a las operaciones de administración de bases de datos que dbAdmin, excepto que se aplica a todas las bases de datos locales y de configuración del clúster. El rol también proporciona la acción listDatabases en el clúster como un todo. MongoDB proporciona una serie de funciones integradas. Sin embargo, si estos roles no pueden describir el conjunto de privilegios deseado, se puede crear nuevos roles. Para añadir una función, MongoDB proporciona el método db.createRole(). MongoDB también proporciona métodos para actualizar las funciones existentes definidas por el © Universidad Internacional de La Rioja (UNIR) usuario. A partir de MongoDB Enterprise 3.2, es posible cifrar datos en la capa de almacenamiento con el cifrado en reposo nativo del motor de almacenamiento WiredTiger. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 10 A partir de la versión 4.0, MongoDB deshabilita la compatibilidad con el cifrado TLS 1.0 en sistemas donde TLS 1.1+ está disponible. Consulta la documentación para más información. Se recomienda ejecutar procesos de MongoDB con una cuenta de usuario de sistema operativo dedicada. Lo correcto es que dicha cuenta tenga los permisos para acceder a los datos (sin permisos innecesarios). 5.3. Respaldo La migración de base de datos de un servidor a otro suele ser necesaria, ya sea por una actualización o cambio de hardware o por motivos administrativos. Al gestionar un sistema MongoDB cuentas con dos opciones para realizar esta migración. La primera consiste en copiar el directorio del sistema de ficheros a la nueva ubicación. Por defecto, los datos de MongoDB se almacenan en la ruta /data/db en Linux, o C:\data\db en Windows. Es importante tener en cuenta que los datos no se copiarán adecuadamente si el servidor de MongoDB se está ejecutando en el momento de realizar la copia. Además, MongoDB permite exportar e importar bases de datos mediante dos herramientas a utilizar desde la línea de comandos: mongodump y mongorestore, respectivamente. © Universidad Internacional de La Rioja (UNIR) Mongodump hace una copia de seguridad de los datos conectándose a una instancia mongod o mongos en ejecución. Esta utilidad permite crear una copia de seguridad para un servidor, una base de datos o una colección completa, o puede utilizar una consulta para copiar solo parte de una colección. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 11 Se puede ejecutar mongodump sin argumentos. Esto creará una copia de seguridad de la base de datos en la carpeta dump/ siempre y cuando la base de datos se encuentre en el sistema local (localhost o dirección IP 127.0.0.1) y en el puerto 27017. El formato de datos que utiliza mongodump a partir de la versión 2.2 o posterior es incompatible con las versiones anteriores, por lo que no se deben utilizar versiones recientes de este comando para realizar copias de seguridad de datos antiguos. A continuación, se puede ver el comando completo que se debería ejecutar para hacer la copia de seguridad especificando equipo, puerto y directorio de salida: mongodump --host mongoHost.es --port 27017 --out /data/backup/ Si se quiere especificar una base de datos y una colección se deben utilizar las opciones --collection y --db de la siguiente forma: mongodump --collection miColecion --db miBBDD Gracias a las opciones --username user --password pass se podrán especificar el nombre de usuario y la clave de acceso de la base de datos en el caso que fuera obligatorio. También se puede utilizar la opción --oplog para recopilar las entradas de oplog para crear una instantánea puntual de una base de datos dentro de un conjunto de réplicas. Con --oplog, mongodump copia todos los datos de la base de datos origen, así © Universidad Internacional de La Rioja (UNIR) como todas las entradas oplog desde el principio hasta el final del proceso de copia de seguridad. Esta operación, junto con mongorestore --oplogReplay, permite restaurar una copia de seguridad exactamente igual al momento que se completó el volcado con mongodump. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 12 La utilidad mongorestore restaura una copia de seguridad creada por mongodump. Por defecto, mongorestore busca la copia de seguridad de la base de datos en el directorio dump/. El proceso restaura los datos conectándose directamente a un mongod o mongos. Mongorestore puede restaurar una copia de seguridad completa de la base de datos o de un subconjunto de la copia de seguridad. Un ejemplo es el que se puede ver a continuación: mongorestore --port 27017 /db/backup/mongodump-2013-10-24 Donde 27017 es el puerto de conexión localhost y /db/backup/mongodump-2013-10-24 el archivo y directorio donde se encuentra la copia creada anteriormente. Nota: a partir de MongoDB 3.6, los binarios de MongoDB, mongod y mongos, se vinculan a localhost de forma predeterminada. Desde las versiones 2.6 a 3.4, solo los binarios de los paquetes oficiales de MongoDB RPM (Red Hat, CentOS, Fedora Linux y derivados) y DEB (Debian, Ubuntu y derivados) se vincularían a localhost de forma predeterminada. Un ejemplo más complejo en el que se pueden ver todas las opciones del comando mongorestore es el que se puede ver a continuación: mongorestore --host mongodb1.example.net --port 3017 --username user -password pass /db/backup/mongodump-2013-10-24 En este ejemplo, además, se ha especificado el host, el nombre de usuario y la © Universidad Internacional de La Rioja (UNIR) contraseña de acceso de la base de datos donde se va a realizar la restauración. Una vez comprendido cómo se puede hacer una copia de seguridad de la base de datos y cómo se puede restaurar la copia, es muy importante saber qué mongo proporciona otro mecanismo para mantener seguros los datos mediante la replicación de datos en varios nodos. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 13 Cuando se realiza una copia de seguridad, se está haciendo una foto en un instante de tiempo dado; en cambio, con las réplicas tenemos la información duplicada en varios nodos en todo momento. Nota: las utilidades mongodump y mongorestore funcionan con volcados de datos BSON y son útiles para crear copias de seguridad de pequeñas implementaciones. Para copias de seguridad resistentes y no disruptivas, usa un sistema de archivos o una función de instantánea de disco a nivel de bloque, como los métodos descritos en el documento «Métodos de copia de seguridad de MongoDB» (documentación oficial). Otros métodos de backup en MongoDB Cuando se implementa MongoDB en producción, las copias de seguridad se deben gestionar de una forma más profesional y robusta. Para ello, es importante que conozcas qué alternativas existen en entornos productivos, según la instalación que se tenga de MongoDB.  BackUp con Atlas: es la opción de servicio de MongoDB alojado en la nube, la cual ofrece dos métodos totalmente administrados para realizar copias de seguridad: Cloud BackUp: utiliza la funcionalidad de snapshot nativa del proveedor de servicios en la nube de la implementación para ofrecer opciones de copia de seguridad sólidas. Suelen disponer de on-demand snapshots (permiten activar una instantánea inmediata en un momento dado). BackUp continuas en el Cloud: permiten programar copias de seguridad © Universidad Internacional de La Rioja (UNIR) periódicas para su implementación. Legacy Backups: o copias de seguridad heredadas, las cuales realizan copias de seguridad incrementales de los datos en su implementación (esto actualmente está en desuso). Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 14  BackUp con Cloud Manager: con esta alternativa se respalda continuamente los conjuntos de réplicas de MongoDB y los clústeres fragmentados leyendo los datos de registro de operaciones de su implementación. Este servicio crea snapshots de sus datos a intervalos establecidos y también puede ofrecer recuperación en un momento determinado de conjuntos de réplicas y clústeres fragmentados previamente.  Ops Manager: con esta opción, los suscriptores de MongoDB pueden instalar y ejecutar el mismo software central que impulsa MongoDB Cloud Manager en su propia infraestructura. Ops Manager es una solución local que tiene una funcionalidad similar a MongoDB Cloud Manager y está disponible con suscripciones Enterprise Advanced.  BackUp con copia de datos subyacentes: permite crear o bien un respaldo de una implementación de MongoDB haciendo una copia de los archivos de datos subyacentes de MongoDB, o bien puedes copiar los archivos directamente usando cp, rsync o una herramienta similar si la implementación no soporta instantáneas. La replicación es una característica de MongoDB que permite la redundancia de datos, así como incrementar su disponibilidad. La arquitectura básica de replicación en MongoDB sigue un modelo Maestro-Esclavo. La instancia maestra recibe operaciones de escritura y estas son aplicadas en la instancia dependiente para mantener la consistencia de los repositorios de datos. © Universidad Internacional de La Rioja (UNIR) Maestro Esclavo Figura 1. Representación de nodos Maestro-Esclavo para MongoDB. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 15 La instancia maestra se ejecuta mediante la inclusión del parámetro --master en la ejecución del servidor de MongoDB. La instancia secundaria se ejecuta mediante la inclusión del parámetro --slave, siguiendo ambos la siguiente sintaxis: Ejecución de instancia maestra: mongod --master Ejecución de un nodo secundario/esclavo: mongod --slave --source En MongoDB se ha hecho un refinamiento sobre el modelo Maestro-Esclavo y se le ha definido como conjunto de réplicas o replica set. Este método permite una recuperación a fallos de forma automática, y es la forma recomendada de implementar replicación de datos en MongoDB. Una de las principales características de los replica set es que no definen un nodo maestro estáticamente, sino que es asignado al azar y esta asignación se actualiza dependiendo de la disponibilidad del nodo. Los nodos mantienen control de qué otros nodos son accesibles mediante el envío de pings cada dos segundos. La configuración mínima recomendada para una replica set consiste en tres nodos: dos nodos serán instancias de mongod con acceso a los datos; uno de estos nodos será el nodo primario mientras que el otro replicará las operaciones que se realicen sobre © Universidad Internacional de La Rioja (UNIR) el primario. El tercer nodo, denominado árbitro, es utilizado solamente para decidir qué nodo debe ser asignado como primario. La siguiente figura muestra el diagrama de la arquitectura descrita. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 16 Principal Secundario Ping Árbitro Figura 2. Ejemplo de la replicación con nodo árbitro en MongoDB. Para iniciar una instancia de MongoDB como parte de un replica set, el comando sigue el siguiente formato: mongod --replSet / Después de iniciar todos los nodos, es necesario inicializar el conjunto conectándose a la base de datos admin de alguno de ellos y ejecutando el comando replSetInitiate con la siguiente sintaxis: db.runCommand({“replSetInitiate”: { _id: , members: }}) El listado de nodos en el replica set es un array de objetos con la información de cada nodo. Entre los atributos de cada uno de estos objetos se puede enfatizar los © Universidad Internacional de La Rioja (UNIR) siguientes:  _id: identificador secuencial obligatorio, el primer nodo en el replica set tiene un identificador igual a 0.  host: cadena de texto obligatoria con el nombre del host de este nodo. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 17  arbiterOnly: booleano para indicar si el nodo es solamente árbitro.  priority: valor de 0 a 1000 que indica la prioridad de dicho nodo para ser elegido primario.  votes: indica el número de votos de este nodo para la elección de un nuevo nodo primario. Se sugiere indicar un solo voto por nodo y, en caso de cambiar esta asignación, simular detenidamente los efectos de este cambio.  hidden: booleano que indica si el nodo debe ocultarse del listado dado por el comando db.isMaster().  buildIndexes: booleano que indica si este nodo creará índices. Por defecto es verdadero y solo será falso en aquellos casos donde se sabe que el nodo no será primario, es decir, tiene un valor 0 en el atributo priority.  slaveDelay: número de segundos de retraso que tendrá un nodo secundario. Debe ser mayor que cero solo para aquellos nodos que no serán primarios nunca.  tags: documento JSON con pares clave-valor definidos por el administrador de la base de datos. 5.4. Rendimiento © Universidad Internacional de La Rioja (UNIR) El incremento de rendimiento en el sistema MongoDB puede realizarse a través de acciones como la creación de índices, los cuales mejoran el tiempo de ejecución de consultas sobre collections. Es recomendable analizar los atributos de un documento sobre los cuales será beneficioso aplicar un índice. Por ejemplo, si es común filtrar documentos en la Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 18 collection usuarios por el atributo email, será conveniente crear un índice sobre dicho atributo. El comando brindado para crear un índice es ensureIndex y posee el siguiente formato: db..ensureIndex(, ) Ambos argumentos en la llamada a la función son objetos en formato JSON. El objeto claves indica los atributos sobre los cuales se creará el índice, teniendo como valor el número 1 si el índice se creará de forma ascendente y -1 si es de forma descendente.  El objeto opciones puede contener los siguientes atributos, todos opcionales:  background: valor booleano para indicar si el índice debe crearse sin bloquear otras actividades en la base de datos. Por defecto es false.  unique: valor booleano para indicar si un atributo no acepta valores repetidos. Por defecto es false.  name: cadena de texto para especificar el nombre del índice.  dropDups: valor booleano que indica la creación de un índice único y la © Universidad Internacional de La Rioja (UNIR) eliminación de documentos repetidos en la collection. Por defecto es false.  sparse: valor booleano para indicar que el índice se aplica solamente sobre los documentos con los atributos indicados en el campo de claves.  v: indica el número de versión del índice a crear. Antes de la versión 2.0 de MongoDB este valor es 0, para versiones posteriores el valor es 1. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 19 Un índice puede eliminarse utilizando el comando dropIndex, siguiendo la sintaxis apropiada: db..dropIndex() El argumento índice puede ser una cadena de texto con el nombre del índice a eliminar o un objeto con el mismo contenido que el utilizado en el argumento de claves en ensureIndex. Hay dos métricas que permiten medir el rendimiento:  El tiempo de búsqueda: cuando se utilicen índices se podrá apreciar que el tiempo de búsqueda se ve reducido. Este efecto es más notable cuando el número de documentos es elevado.  El número de documentos analizados en la búsqueda. La optimización de los índices se debe a que el número de documentos en los que el motor de la base de datos realiza la búsqueda es menor, llegando en las consultas exactas a ser el mismo número de documentos que devuelve la búsqueda. Para esta métrica no influye el número de documentos que tenga la colección, puesto que, aunque la colección tenga pocos registros, se podrá ver en esta métrica que es inferior al total de ellos. © Universidad Internacional de La Rioja (UNIR) Se supone que se tiene el siguiente esquema de documento de la colección users: { userId: “Fer”, name: “Fernando Alonso”, age: 36, hobbies: [“motor”, “bike”], info:{ friend: “Pedro” Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 20 }, localtion: [34,45] } Algunos ejemplos de indexación pueden ser los siguientes:  Simple: insertamos un índice en orden ascendente para el atributo name. El comando para insertar el índice y la búsqueda que lo aplica son los siguientes: db.users.ensureIndex( { "name" : 1} ) db.usesr.find({ name: “Fernando Alonso” })  Compuesto: se pueden usar para consultar uno o varios campos sin incluir todos. El siguiente ejemplo permitirá optimizar la búsqueda para name, o para name y age. Si se quiere hacer solo sobre age, habría que crear un índice simple para este atributo. En el siguiente ejemplo se crea un índice para name y age y se crea la consulta que se aprovecha de esta optimización: db.users.ensureIndex( { "name" : 1, "age":-1 } ) db.usesr.find( {name: “Fernando Alonso”, age:36 })  Subdocumento: si el atributo pertenece a un objeto, es necesario llegar al nivel deseado para asegurar el índice. El insertado del índice y la consulta que utiliza la optimización son las siguientes: db.users.ensureIndex( { "info.friend" : 1 } ) © Universidad Internacional de La Rioja (UNIR) db.user.find({ info.friend: “Pedro”})  Arrays: se pueden crear índices sobre claves que contienen arrays; para ello se crea un valor en el índice para cada valor del array. Se denominan índices multikey y no hace falta intimidarlo explícitamente. El insertado del índice y la consulta que utiliza la optimización son las siguientes: Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 21 db.users.ensureIndex( { "hobbies": 1} ) db.users.find({ hobbies: “motor” })  2d: los documentos deben tener una clave que contenga un array de dos coordenadas. Estos índices son útiles cuando permiten utilizar operadores especiales como $near. El insertado del índice y la consulta que utiliza la optimización son las siguientes: db.users.ensureIndex( { "location": 2d} ) db.users.find({ location: {$near: [25,32] } }).limit(6) Para comprender el uso de índices en MongoDB, revisa esta lección titulada «Creación de índices y análisis de consultas». En ella se muestran algunos ejemplos de índices en una base de datos, así como el análisis de rendimiento de una serie de consultas, antes y después de la creación de índices. Vídeo 1. Creación de índices y análisis de consultas. © Universidad Internacional de La Rioja (UNIR) Accede al vídeo a través del aula virtual Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 22 5.5. Sharding Otro mecanismo para incrementar el rendimiento de una base de datos es escalar, ya sea de forma vertical u horizontal. La escalabilidad vertical consiste en incrementar o mejorar hardware (CPU y memoria RAM) que utiliza el sistema. En contraste, la escalabilidad horizontal o sharding consiste en dividir el conjunto de datos y distribuirlo en varios servidores o shards. Así, el número de operaciones y la cantidad de datos se reparte entre el conjunto de shards. Si la base de datos crece, es suficiente con añadir un nuevo shard para poder almacenar más datos en un nuevo nodo. Su principal utilidad es aumentar el rendimiento de las consultas distribuyendo la información entre varias máquinas y permitir añadir nuevas máquinas para poder aumentar la capacidad de almacenaje de información. MongoDB brinda sharding a través de la definición de sharded clusters, los cuales están compuestos por tres tipos de componentes:  Shards: están a cargo de almacenar la información. Cada shard es un replica set, por lo que brinda alta disponibilidad y consistencia de datos.  Query Routers: son instancias del servicio mongos y sirven de interfaz entre los clientes y los shards. © Universidad Internacional de La Rioja (UNIR)  Config Servers: almacenan metadatos sobre la información almacenada en cada shard. Son consultados y modificados por los query routers para saber qué shards contienen información en específico. Los sharded clusters en un entorno de producción tienen exactamente tres config servers. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 23 El primer paso para configurar un sharded cluster es iniciar los config servers a través del siguiente comando: mongod --configsvr --dbpath --port El puerto por defecto de un config server es el 27019. A continuación, se deben iniciar los query routers o instancias mongos: mongos --configdb El siguiente paso es añadir shards al clúster, primero conectándose al servicio mongos: mongo --host --port Y, después, utilizar el comando sh.addShard: sh.addShard(“/”) Finalmente, se debe habilitar la característica de sharding sobre la base de datos y sobre las collections a dividir: sh.enableSharding(“”) sh.shardCollection(“.”, ) © Universidad Internacional de La Rioja (UNIR) El segundo argumento indica el patrón que se utilizará para distribuir los datos en los shards disponibles. Este argumento es un documento JSON con pares clave-valor para indicar los atributos que se utilizarán en la distribución. Es necesario que exista un índice sobre los atributos que se utilizan en esta configuración. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 24 Map-Reduce y Aggregate admiten operaciones sobre colecciones en sistemas con sharding, tanto como entrada como como salida. Cuando se utiliza la colección fragmentada como entrada, mongos enviará automáticamente el trabajo de agregación a cada fragmento en paralelo. No se requiere ninguna opción especial. Los mongos esperarán a que terminen los trabajos en todos los fragmentos. Si el campo out de una función de agregación tiene el valor sharded, MongoDB fragmenta la colección de salida usando el campo _id como la clave shard. Si la colección de salida no existe, MongoDB crea y fragmenta la colección en el campo _id. Para una colección nueva o vacía, MongoDB utiliza los resultados de la primera etapa de la operación de agregación para crear los trozos iniciales distribuidos entre los fragmentos. Mongos despacha en paralelo una tarea de postprocesamiento a cada fragmento que posee un pedazo. Durante el postprocesamiento, cada fragmento extraerá los resultados de sus propios trozos, para finalmente ejecutar una reducción final y escribir el resultado localmente a la colección de salida. Después de leer todo el tema, lo siguiente es revisar los vídeos sobre MongoDB que se presentan a continuación. En ellos se describen de forma resumida los aspectos más relevantes en la gestión de MongoDB y algunas recomendaciones de cara a la © Universidad Internacional de La Rioja (UNIR) administración de usuarios de la base de datos y al uso de clústeres. Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 25 Vídeo 2. Aspectos relevantes en la gestión de MongoDB: seguridad. Accede al vídeo a través del aula virtual Vídeo 3. Aspectos relevantes en la gestión de MongoDB: exportar/restaurar y uso de índices. © Universidad Internacional de La Rioja (UNIR) Accede al vídeo a través del aula virtual Métodos de Captura y Almacenamiento de los Datos Tema 5. Ideas clave 26 A fondo MongoDB Sharding 101 Percona. (4 de septiembre de 2018). MongoDB Sharding 101 - MongoDB Sharding Tutorial [Archivo de vídeo]. https://www.youtube.com/watch?v=F7kyNeAPym4 Este tutorial es una continuación de temas avanzados para el DBA. En él se comparten las mejores prácticas y consejos sobre cómo realizar las actividades más habituales. Se usa comúnmente para desarrollo o pruebas. El tutorial abarca los sistemas integrados, conjunto de réplicas, escalamiento horizontal, capacidad para elegir un nuevo primario en caso de falla (los datos son los mismos en las réplicas), réplica © Universidad Internacional de La Rioja (UNIR) asincrónica, maestro único-primario. Métodos de Captura y Almacenamiento de los Datos Tema 5. A fondo 27 MongoDB: how to deploy a MongoDB replica set Just me and Opensource. (12 de agosto de 2019). [ MongoDB 6 ] How to Deploy a MongoDB ReplicaSet [Archivo de vídeo]. https://www.youtube.com/watch?v=Q2lJH156SUQ En este vídeo, se habla sobre el conjunto de réplicas MongoDB y cómo implementarlo. También repasa la simulación de una falla y demuestra cómo ocurren las elecciones primarias. Los conjuntos de réplicas se utilizan para escenarios de alta disponibilidad y recuperación ante desastres. Documentación oficial de MongoDB MongoDB. (2021). Documentation [Página web]. http://docs.mongodb.org/ Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido © Universidad Internacional de La Rioja (UNIR) relevante para este tema es la sección MongoDB Replicaset y Sharding. Métodos de Captura y Almacenamiento de los Datos Tema 5. A fondo 28 The database for modern applications: MongoDB Be A Better Dev. (15 de julio de 2020). The ULTIMATE MongoDB Tutorial for 2021 [Archivo de vídeo]. https://www.youtube.com/watch?v=bo_M_BDcCbg El vídeo es un tutorial de MongoDB explicado por miembros del equipo de desarrollo de MongoDB. En media hora describen los aspectos más relevantes de la base de datos, así como la forma de optimizar las consultas más comunes. Dentro de estos aspectos se mencionan cuestiones relevantes con base de datos distribuida. Bibliografía Ajdari, J., y Kasami, B. (2018). MapReduce Performance in MongoDB Sharded Collections. International Journal Of Advanced Computer Science And Applications, 9(6), pp. 115-120. Bradshaw, S., Brazil, E., y Chodorow, K. (2019). MongoDB: the definitive guide: © Universidad Internacional de La Rioja (UNIR) powerful and scalable data storage. O'Reilly Media. Dipina Damodaran, B., Salim, S., y Vargese, S. M. (2016). Performance evaluation of MySQL and MongoDB databases. International Journal on Cybernetics & Informatics (IJCI), 5. Membrey, P., Plugge, E., y Hawkins, D. (2011). The definitive guide to MongoDB: the noSQL database for cloud and desktop computing. Apress. Métodos de Captura y Almacenamiento de los Datos Tema 5. A fondo 29 Test 1. ¿Qué comando brindado por MongoDB permite crear una copia de respaldo de una base de datos? A. mongorestore. B. mongodump. C. backup. D. mongod. 2. ¿Qué comando brindado por MongoDB permite recuperar una base de datos a partir de una copia de seguridad? A. mongorestore. B. save. C. mongos. D. copydb. 3. ¿Qué elementos de la base de datos mejoran el rendimiento de consultas a collections? A. Índices. B. Replica sets. C. Query routers. D. Las respuestas B y C son correctas. 4. ¿Qué característica de MongoDB permite tener redundancia y aumentar la © Universidad Internacional de La Rioja (UNIR) disponibilidad de los datos? A. Seguridad. B. Sharding. C. Índices. D. Replicación. Métodos de Captura y Almacenamiento de los Datos Tema 5. Test 30 5. ¿Cuál es el modelo básico de replicación en MongoDB? A. Sharding. B. Replica set. C. Maestro-Esclavo. D. Shards. 6. ¿Cómo se llama al refinamiento del modelo Maestro-Esclavo implementado en MongoDB? A. Result set. B. Replica set. C. Sharding. D. Replicación. 7. ¿Cómo se denomina el nodo de un replica set que no almacena datos y solamente puede votar en las elecciones de nodo primario? A. Secundario. B. Árbitro. C. Shard. D. Config server. 8. ¿Qué otro nombre recibe el método de escalabilidad horizontal, en el que los datos son separados y distribuidos entre varios servidores? A. Escalabilidad vertical. B. Elastic computing. C. Sharding. © Universidad Internacional de La Rioja (UNIR) D. Replicación. 9. ¿Qué nombre reciben los nodos que almacenan datos en un sharded cluster? A. Data stores. B. Config servers. C. Query routers. D. Shards. Métodos de Captura y Almacenamiento de los Datos Tema 5. Test 31 10. ¿Cuántos config servers debe haber en un entorno de producción? A. Uno. B. Tres. C. Un máximo de cinco. © Universidad Internacional de La Rioja (UNIR) D. Depende del número de servidores disponibles. Métodos de Captura y Almacenamiento de los Datos Tema 5. Test 32

Use Quizgecko on...
Browser
Browser