Base de datos MongoDB

MongoDB

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (13 votos, promedio: 5,00 de 5)
Cargando...

MongoDB es la base de datos NoSQL más utilizada

El software de servidor de base de datos NoSQL MongoDB trabaja con colecciones de documentos en lugar de tablas. Los documentos de una colección en MongoDB no necesariamente deben tener los mismos campos como si lo deben hacer las bases de datos relacionales. Por lo tanto Mongo es un servidor de base de datos que permite no definir un esquema en las propias bases de datos. MongoDB trabaja con BSON que es un tipo de JSON binario.

¿Qué es MongoDB?

mongodb es un motor de base de datos NoSQL o lo que es lo mismo, un software para crear un servidor de base de datos.  MongoDB no utiliza el lenguaje SQL tradicional.

El servidor de base de datos MongoDB puede ejecutarse en servidores en cluster y en réplica. Al ejecutar MongoDB en réplica se obtiene mayor estabilidad de la aplicación. Un cluster de Mongo en réplica tiene la información duplicada y en caso de fallar uno de los nodos, Mongo es capaz de utilizar otro de los nodos incluídos en el cluster  que contengan la información perdida. Esto es ideal para evitar las caídas inesperadas en la aplicación por el fallo de uno de los servidores.

MongoDB también puede trabajar en Sharding o también llamado Sharded Cluster. Cuando el volumen de datos a almacenar es enorme y no caben en un solo servidor, Sharding es la forma de distribuir las grandes colecciones de datos en varios servidores o escalado horizontal.

Un Sharded Cluster de Mongo se compone de 3 distintos componentes:

  1. Shard: Los Shards son los encargados de almacenar los datos en sí. Pueden existir muchos y la cantidad de Shards depende del volumen de datos a almacenar y de las réplicas.
  2. Mongos: Son los encargados de ejecutar las consultas sobre los shards. Cuando se trabaja modo sharded cluster, las aplicaciones conectan a estos servidores para realizar las operaciones contra los shards. Dentro de un cluster pueden existir varios Mongos para el balanceo de carga.
  3. Config Servers: Los servidores de configuración en un cluster se encargan de almacenar la configuración del cluster y los metadatos. Esto quiere decir que aquí se guarda en que Shard esta cada parte de los datos. Estos servidores deben estar en réplica para que evitar la pérdida de información.

¿Para que utilizar MongoDB?

MongoDB es una base de datos, por lo que se puede utilizan en cualquier proyecto. Dónde mejor funciona es para guardar datos que tengan campos comunes y no comunes. Por ejemplo, en un diseño de tienda online multiproducto, donde pueden convivir libros y zapatillas, estos dos tipos de productos tienen en común que son artículos y tienen campos como título, precio o descripción, pero estos artículos son distintos, el libro tiene el número ISBN y las zapatillas tienen la marca. En una base de datos relacional se debería crear un esquema con un campo marca y un campo isbn para los dos registros, en mongodb no es necesario.

Las ventajas de MongoDB

  • Base de datos para trabajar sin esquema
  • Permite la réplica
  • Permite escalado horizontal

Ejemplos de utilización de MongoDB

  • ebay: Almacena los metadatos de cada producto

Tutorial para instalar MongoDB con Docker y en réplica

Tras instalar docker crear una red propia con nombre mongonet o cualquier otro nombre

docker network create --subnet=172.18.0.0/24 mongonet

Descargar la imagen desde el repositorio de docker

docker pull docker.io/mongo

Crear y arrancar dos contenedores de mongodb en la red creada asignando una IP de la red en concreto a cada uno de ellos y montando para cada contenedor su propio volumen para almacenar los datos de forma permanente en un directorio local /mnt/m1/data para el primer contenedor réplica y /mnt/m2/data para la segunda réplica

docker run --name m1 --hostname m1.domain.local --net mongonet --ip 172.18.0.20 --restart always -v /mnt/m1/data:/data/db -d docker.io/mongo mongod --replSet mongoset --bind_ip_all
docker run --name m2 --hostname m2.domain.local --net mongonet --ip 172.18.0.21 --restart always -v /mnt/m2/data:/data/db -d docker.io/mongo mongod --replSet mongoset --bind_ip_all

Instalar manualmente MongoDB en un servidor Centos

Para instalar mongodb en el servidor lo primero que se debe hacer es importar el repositorio de mongodb, para ello se crea el archivo del repositorio y se edita

touch /etc/yum.repos.d/mongodb-org-3.0.repo
vi /etc/yum.repos.d/mongodb-org-3.0.repo

Ahora se pega el siguiente contenido, antes de hacer control+v para pegar, pulsar la letra I en el editor vi. Tras pegar y para finalizar, :q y Intro.

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

Ahora ya se puede ejecutar el comando yum para hacer la instalación

sudo yum install -y mongodb-org
semanage port -a -t mongod_port_t -p tcp 27017
vi /etc/selinux.conf    SELINUX=permissive or SELINUX=disabled

Se inicia y se pone para que al reiniciar se vuelva a iniciar el solo

sudo service mongod start
sudo chkconfig mongod on

El fichero de configuración de mongo db donde se pueden ajustar los parámetros de configuración se encuentra en el directorio etc, en concreto /etc/mongo.conf

En lugar cargar el repositorio de mongodb, también es posible instalar el repositorio EPEL si no esta disponible en el servidor y después instalar mongo db directamente.

yum install epel-release
yum install mongodb-server mongodb

Clientes para MongoDB

Una vez instalado mongodb en el servidor se pueden utilizar distintos programas para conectarse y realizar operaciones, existen muchos softwares para mongoDB, y aquí alguno de ellos:

  • Mongo Shell: Es la utilidad que viene con mongodb, simplemente teclea mongo desde la consola y se carga la linea de comandos de mongodb dónde se pueden ejecutar todo tipo de operaciones.
  • MongoHub: Una GUI para Mac que se puede descargar gratis.
  • NoSQLClient: Es una interfaz web para gestionar MongoDB que se puede instalar en cualquier servidor web
  • PHPMoAdmin: Otra interfaz web para MongoDB

Como crear una copia de seguridad de una colección en MongoDB y restaurar el backup

Para crear un backup en mongo db existen dos utilidades de consola. Una utilidad se llama mongoexport y la otra mongodump y que pasando los parámetros necesarios realiza una copia de seguridad de una colección de Mongo. Mongo export permite exportar a json o a CSV y mongodumb crea el backup en BSON.

Para utilizarlas se deben pasar los parámetros necesarios como el host de mongo, la contraseña y el usuario si se tienen y la base de datos o colecciones a extraer.

mongoexport -h localhost -u username -p password -d basededatos -c colección -o mybackup.json
mongoexport --host localhost --db basededatos --collection colección --type=csv --out mybackup.csv --fields firstname,secondname,mobile,email,city

La herramienta mongodump genera el backup completo o parcial de una base de datos mongo db

mongodump -d <database name> -o <directory_backup>
mongodump -d basededatos -o basededatos.json
mongodump --db basededatos --collection colección

Ahora si por el contrario se quiere restaurar un backup en el servidor de base de datos mongo, una opción rápida es utilizar la herramienta mongorestore

mongorestore -d basededatos basededatos/

Módulos necesarios para programar contra Mongo DB

  • MongoDB en Perl

    cpan install DateTime Config::AutoConf Path::Tiny YAML MongoDB
    cpan install IO::Socket::SSL
    cpan install IO::Socket::IP
    cpan install TAP::Parser
    cpan install Time::Moment
    cpan install Module::Build
    cpan install MongoDB::Collection
    cpan install App::cpanminus
    cpanm install MongoDB::QueryBuilder

  • MongoDB dede PHP
    yum install sclo-php71-php-pecl-mongodb sclo-php70-php-pecl-mongodb sclo-php70-php-pecl-mongodb sclo-php56-php-pecl-mongodb php-mongodb
    pecl install mongo
    echo “extension=mongo.so” > /etc/php.d/mongo.ini
  • NodeJS
    npm install mongodb –save

Más información de la base de datos noSQL en la página oficial de mongodb

 

Deja una respuesta