¿Las bases de datos de Mongo
poseen tablas?
En vez de tablas, MongoDB almacena sus datos en
colecciones, las cuales son equivalentes a las tablas
de los gestores de base de datos relacionales. Una
colección almacena uno o más documentos, los
cuales se corresponden con los registros de una tabla
y cada documento posee uno o más campos, los
cuales se corresponden con las columnas de una
tabla.
¿A que se le llama documentos?
Un documento es la unidad básica de datos
en MongoDB. Su estructura de datos es
muy similar a la de JSON (Javascript Object
Notation) pero almacenados en un formato
mucho más rico conocido BSON (Binary
JSON).
{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2011,1,20,2,15),
likes: 0
}, ...
]
Tablas VS Colecciones
La gran diferencia es que los documentos de una misma
colección, a diferencia de los registros de las tablas, pueden
no tener los mismos campos (Es decir, pueden poseer
distinta estructura). Una persona puede agregar un nuevo
campo a algunos de los documentos de una colección sin
tener que agregar el mismo campo a todos los documentos
de la misma colección. Esta característica convierte a Mongo
en una BD muy flexible con respecto a las alternativas
relacionales.
Las bases de datos de Mongo, ¿Utilizan
esquemas de BD?
MongoDB hace uso de esquemas dinámicos. En Mongo se
pueden crear colecciones sin definir su estructura, es decir,
sin especificar el nombre de cada uno de sus campos y sus
respectivos tipos. Se puede alterar la estructura de los
documentos simplemente añadiendo nuevos campos o
borrando los ya existentes. Aunque no sea obligatorio, en la
práctica es común que todos los documentos de una
colección posean una estructura homogénea.
¿Qué ventajas poseen los esquemas
dinámicos?
Los esquemas dinámicos facilitan el proceso de desarrollo
iterativo. Raramente se necesitará almacenar operaciones
del tipo “ALTER TABLE”.
¿Cuáles son los usos típicos para
MongoDB?
MongoDB fue diseñado para sistemas de propósito general,
haciéndolo apropiado para un gran número de casos. Por
ejemplo: CMS, Aplicaciones móviles, gaming, plataformas e-
commerce, analytics, logging, cache, etc.
Características de Mongo:
● MongoDB esta escrito en su totalidad en C++.
● La versión de 32bits no es aconsejable usarla en un
entorno en producción. Solo a modo de desarrollo.
● MongoDB no soporta joins ni transacciones. Sin embargo
posee índices secundarios, un propio lenguaje de
consulta muy expresivo, escrituras de documentos
atómicas, y lecturas consistentes.
● Para las versiones de 32 bits de Mongo, la base de datos
sólo puede alcanzar los 2GB.
Características de Mongo:
● Esquemas flexibles. Las colecciones en MongoDB poseen un
esquema flexible, totalmente dinámico. Las colecciones no fuerzan a
los documentos a poseer una determinada estructura.
● Modelos de datos embebidos. Los documentos embebidos o
anidados son documentos que se definen dentro de otro documento.
Esta es una forma de capturar las relaciones entre los datos
almacenando “subdocumentos” en una misma estructura. Estos se
conocen como modelo de datos desnormalizados (permiten obtener y
manipular los datos relacionados en una sola operación).
Características de Mongo:
● Operaciones de escritura atómicas a nivel
documento. Esto quiere decir que MongoDB solo
garantiza “transacciones” a nivel documento. Es decir,
MongoDB no puede garantizar que la edición de dos o
más documentos en una misma operación se realicen en
forma conjunta. En modelos normalizados, la aplicación
es la encargada de llevar a cabo operaciones de
lectura/escritura en forma separada para actualizar los
documentos relacionados.
Características de Mongo:
● Crecimiento de un documento. Si un documento supera
el tamaño de memoria reservado para el mismo,
MongoDB relocaliza el documento en disco. La
relocalización de documentos conlleva mayor tiempo de
procesamiento y puede conducir a un almacenamiento
fragmentado. Es importante considerar la normalización
de los documentos.
Características de Mongo:
● Memory-mapped files. Los archivos de base de datos se almacenan en
páginas. Estas páginas conservan la forma en que se almacenan en
memoria byte a byte. Esto significa que MongoDB trata los archivos de
datos como si estuvieran en memoria. Esta es la característica
fundamental del motor de almacenamiento de MongoDB.
● Escalabilidad Horizontal con Shards
Sharding es un método utilizado para almacenar datos a través de
múltiples computadoras. MongoDB hace uso de este método para brindar
soporte a data sets muy grandes y aplicaciones de gran rendimiento.
Cada Shard es una instancia independiente de MongoDB que almacena
una partición de la BD. Los Shards, en conjunto conforman una única BD
lógica.
¿Apoya MongoDB transacciones ACID?
MongoDB no soporta transacciones de múltiples documentos.
Sin embargo, MongoDB proporciona operaciones atómicas en un solo documento. A menudo,
estas operaciones atómicas de nivel de documento son suficientes para resolver los
problemas que requerirían transacciones ACID en una base de datos relacional.
Por ejemplo, en MongoDB, puede incrustar datos relacionados en matrices anidadas o
documentos anidados dentro de un solo documento y actualizar todo el documento en una
sola operación atómica. Bases de datos relacionales pueden representar el mismo tipo de
datos con varias tablas y filas, lo que requeriría el soporte de transacciones para actualizar
los datos de forma atómica.
MongoDB permite a los clientes leer documentos insertados o modificados antes de que
comete estas modificaciones en el disco, independientemente del nivel de preocupación de
escritura o la configuración de un diario. Como resultado, las aplicaciones pueden observar
dos clases de comportamientos:
● Para los sistemas con múltiples lectores simultáneos y escritores, MongoDB permitirá a los
clientes para leer los resultados de una operación de escritura antes de que vuelva la
operación de escritura.
¿Requiere MongoDB mucha memoria RAM?
No necesariamente. Es posible ejecutar MongoDB en una máquina con
una pequeña cantidad de memoria RAM libre.
MongoDB usa automáticamente toda la memoria libre en el equipo
como su caché. Monitores de recursos del sistema muestran que
MongoDB utiliza una gran cantidad de memoria, pero su uso es
dinámico. Si otro proceso de repente necesita mayor espacio de
memoria RAM del servidor, MongoDB liberará parte de su memoria
asignada para el otro proceso.
Técnicamente, el subsistema de memoria virtual del sistema operativo
gestiona la memoria de MongoDB. Esto significa que MongoDB utilizará
tanta memoria libre como pueda (esto reduce el intercambio a disco).