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:
- 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.
- 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.
- 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