Por otro lado MongoDB como ya hemos mencionado es una mejor opción si no tienes un esquema definido o manejas datos no estructurados. Si manejas grandes volúmenes de datos y bases de datos muy grandes MongoDB te ofrecerá un mejor rendimiento, por otra parte si necesitas almacenar muchos datos como documentos/archivos MongoDB es una mejor opción que te ayudara muchisimo.
Pie de foto: : SQL vs NOSQL
Diapositiva 2
Tal como mencionamos, un registro de MongoDB es un documento. Pero, ¿cómo están escritos los documentos? MongoDB utiliza JSON(JavaScript Object Notation —notación de objetos tipo JavaScript—) para la representación de los datos. Esto es una ventaja importante, ya que JSON es un formato de texto ligero y fácil de leer que facilita el intercambio de datos.
Cuando definimos documentos embebidos debemos tener en cuenta que un documento en MongoDB no puede tener un tamaño mayor a 16MB.
Los valores en un documento pueden incluir arreglos, otros documentos, o arreglos de documentos. Veamos un ejemplo de un registro en MongoDB (adaptado al español de la base de datos de prueba de Mongo por fines prácticos):
DOCUMENTOS
Diapositiva 3
El sharding es una forma de segmentar los datos de una base de datos de forma horizontal, es decir, partir la base de datos principal en varias en bases de datos más pequeñas y repartiendo la información. De esta forma lo que se consigue es una partición de datos en diferentes bases que tengan cierta homogeneidad, para conseguir una escalabilidad mucho más rápida. Para ver su eficacia, vamos a analizar un ejemplo sencillo.
Tal como ocurre en textos JSON, primero se define un campo y luego se asigna un valor asociado con ese campo. En nuestro ejemplo podemos ver una muestra básica: la definición del campo "nombre", a este campo le asignamos el valor "Gonzalo". Un campo también puede tener un subconjunto de objetos, como es el caso del campo "clasificación" en nuestro ejemplo.
Diapositiva 6
MongoDB almacena los documentos en colecciones. Las colecciones serían el equivalente a una tabla de una base de datos relacional. A diferencia de una tabla, una colección no requiere que sus documentos tengan el mismo esquema.
Cada documento almacenado en una colección debe tener un campo _id único que identifica inmutablemente a dicho documento, actuando como clave primaria.
La unidad básica de datos en MongoDB se denomina documento. Su estructura es muy similar a la de *JSON* pero se almacena en un formato más rico conocido como *BSON* (Binary *JSON*). Dichos documentos se agrupan a su vez en colecciones.
COLECCIONES SHEMALESS
Diapositiva 7
En MongoDB, los documentos de una misma colección no necesariamente comparten la misma estructura, lo que aporta una gran flexibilidad, perfecta para realizar prototipados o proyectos donde los modelos de datos pueden variar iterativamente. En el siguiente ejemplo, vemos dos documentos con diferente estructura que forman parte de una misma colección ‘jumpers’:
{ {
color : "red", color : "blue",
material : "wool", material : "cotton",
price : 20 sport : true
} }
MongoDB, a través de JSON, puede utilizar los siguientes tipos:
String: guardados en UTF-8. Van siempre entre dobles comillas.
Number: números. Al guardarse en BSON pueden ser de tipo byte, int32, in64 o double.
Boolean: con valor true o false.
Array: van entre corchetes [] y pueden contener de 1 a N elementos, que pueden ser de cualquiera de los otros tipos.
Documentos: un documento en formato JSON puede contener otros documentos embebidos que incluyan más documentos o cualquiera de los tipos anteriormente descritos.
Null.
Escalabilidad horizontal
MongoDB permite escalar horizontalmente de forma sencilla mediante un sistema de sharding. Esto permite repartir colecciones entre distintas máquinas (shards) de forma que, dependiendo de la estrategia que sigamos en la elección de la clave de sharding, podremos optimizar lecturas o escrituras para manejar volúmenes de operaciones cada vez mayores sin perder tiempo de respuesta.
Alta disponibilidad
MongoDB permite configurar de forma sencilla sistemas de replicación en replicasets (conjuntos formados por N máquinas, una master y N-1 replicas), que garantizan que, en caso de pérdida o caída de un nodo master, una de las réplicas es automáticamente promocionada a master, manteniendo el sistema operativo.