all repos — gemini-redirect @ 474977ffa744e628d9604dfad056de871e7c9167

content/blog/mdad/mongodb-introduction/index.md (view raw)

  1```meta
  2title: MongoDB: Introducción
  3published: 2020-03-05T01:00:18+00:00
  4updated: 2020-03-20T10:31:10+00:00
  5```
  6
  7Este es el primer post en la serie sobre Mongo, en el cuál introduciremos dicha bases de datos NoSQL y veremos sus características e instalación.
  8
  9Otros posts en esta serie:
 10
 11* [MongoDB: Introducción](/blog/mdad/mongodb-introduction/) (este post)
 12* [MongoDB: Operaciones Básicas y Arquitectura](/blog/mdad/mongodb-operaciones-basicas-y-arquitectura/)
 13
 14Este post está hecho en colaboración con un compañero.
 15
 16----------
 17
 18![](0LRP4__jIIkJ-0gl8j2RDzWscL1Rto-NwvdqzmYk0jmYBIVbJ78n1ZLByPgV.png)
 19
 20## Definición
 21
 22MongoDB es una base de datos orientada a documentos. Esto quiere decir que en lugar de guardar los datos en registros, guarda los datos en documentos. Estos documentos son almacenados en BSON, que es una representación binaria de JSON. Una de las principales diferencias respecto a las bases de datos relacionales es que no necesita seguir ningún esquema, los documentos de una misma colección pueden tener esquemas diferentes.
 23
 24MongoDB está escrito en C++, aunque las consultas se hacen pasando objetos JSON como parámetro.
 25
 26```
 27{
 28        "_id" : ObjectId("52f602d787945c344bb4bda5"),
 29        "name" : "Tyrion",
 30        "hobbies" : [ 
 31            "books", 
 32            "girls", 
 33            "wine"
 34        ],
 35        "friends" : [ 
 36            {
 37                "name" : "Bronn",
 38                "ocuppation" : "sellsword"
 39            }, 
 40            {
 41                "name" : "Shae",
 42                "ocuppation" : "handmaiden"
 43            }
 44        ]
 45 }
 46```
 47
 48## Características
 49
 50![](WxZenSwSsimGvXVu5XH4cFUd3kr3Is_arrdSZGX8Hi0Ligqgw_ZTvGSIeXZm.png)
 51
 52MongoDB alcanza un balance perfecto entre rendimiento y funcionalidad gracias a su sistema de consulta de contenidos. Pero sus características principales no se limitan solo a esto, también cuenta con otras que lo posicionan como el preferido de muchos desarrolladores de aplicaciones como aplicaciones móviles, gaming, logging o e-commerce.
 53
 54Algunas de las principales características de esta base de datos son:
 55
 56* Almacenamiento orientado a documentos (documentos JSON con esquemas dinámicos).
 57* Soporte Full index: puede crear índices sobre cualquier atributo y añadir múltiples índices secundarios.
 58* Replicación y alta disponibilidad: espejos entre LANs y WANs.
 59* Auto-Sharding: escalabilidad horizontal sin comprometer la funcionalidad, está limitada, actualmente, a 20 nodos, aunque el objetivo es alcanzar una cifra cercana a los 1000.
 60* Consultas ricas y basadas en documentos.
 61* Rápidas actualizaciones en el contexto.
 62* Soporte comercial, capacitación y consultoría disponibles.
 63* También puede ser utilizada para el almacenamiento de archivos aprovechando la capacidad de MongoDB para el balanceo de carga y la replicación de datos.
 64
 65En cuanto a la arquitectura, podríamos decir que divide en tres partes: las bases de datos, las colecciones y los documentos (que contienen los campos de cada entrada).
 66
 67* **Base de datos**: cada una de las bases de datos tiene un conjunto propio de archivos en el sistema de archivos con diversas bases de datos existentes en un solo servidor.
 68* **Colección**: un conjunto de documentos de base de datos. El equivalente RDBMS de la colección es una tabla. Toda colección existe dentro de una única base de datos.
 69* **Documento**: un conjunto de pares clave/valor. Los documentos están asociados con esquemas dinámicos. La ventaja de tener esquemas dinámicos es que el documento en una sola colección no tiene que tener la misma estructura o campos. 
 70
 71## Arista dentro del Teorema CAP
 72
 73![](t73Q1t-HXfWij-Q1o5AYEnO39Kz2oyLLCdQz6lWQQPaSQWamlDMjmptAn97h.png)
 74
 75MongoDB es CP por defecto, es decir, garantiza consistencia y tolerancia a particiones (fallos). Pero también podemos configurar el nivel de consistencia, eligiendo el número de nodos a los que se replicarán los datos. O podemos configurar si se pueden leer datos de los nodos secundarios (en MongoDB solo hay un servidor principal, que es el único que acepta inserciones o modificaciones). Si permitimos leer de un nodo secundario mediante la replicación, sacrificamos consistencia, pero ganamos disponibilidad.
 76
 77## Descarga e instalación 
 78
 79### Windows
 80
 81Descargar el archivo desde [https://www.mongodb.com/download-center#production](https://www.mongodb.com/download-center#production)
 82
 831. Doble clic en el archivo `.msi`
 842. El instalador de Windows lo guía a través del proceso de instalación.
 85Si elige la opción de instalación personalizada, puede especificar un directorio de instalación. 
 86MongoDB no tiene ninguna otra dependencia del sistema. Puede instalar y ejecutar MongoDB desde cualquier carpeta que elija.
 873. Ejecutar el `.exe` que hemos instalado.
 88
 89### Linux
 90
 91Abrimos una terminal y ejecutamos:
 92
 93```
 94sudo apt-get update
 95sudo apt install -y mongodb-org
 96```
 97
 98Luego comprobamos el estado del servicio:
 99
100```
101sudo systemctl start mongod
102sudo systemctl status mongod
103```
104
105Finalmente ejecutamos la base de datos con el comando:
106
107```
108sudo mongo
109```
110
111### macOS
112
113Abrimos una terminal y ejecutamos:
114
115```
116brew update
117brew install mongodb
118```
119
120Iniciamos el servicio:
121
122```
123brew services start mongodb
124```
125
126## Referencias
127
128* [Todo lo que debes saber sobre MongoDB](https://expertoenbigdata.com/que-es-mongodb/#La_arquitectura_de_MongoDB)
129* [MongoDB – EcuRed](https://www.ecured.cu/MongoDB)
130* [Bases de datos NoSQL, MongoDB y GIS – MappingGIS](https://mappinggis.com/2014/07/mongodb-y-gis/)
131* [Características MONGO DB](https://es.slideshare.net/maxfontana90/caractersticas-mongo-db)
132* [Qué es MongoDB y características](https://openwebinars.net/blog/que-es-mongodb)
133* [MongoDB. Qué es, cómo funciona y cuándo podemos usarlo (o no)](https://www.genbeta.com/desarrollo/mongodb-que-es-como-funciona-y-cuando-podemos-usarlo-o-no)
134* [MongoDB Documentation](https://docs.mongodb.com/)
135* [NoSQL: Clasificación de las bases de datos según el teorema CAP](https://www.genbeta.com/desarrollo/nosql-clasificacion-de-las-bases-de-datos-segun-el-teorema-cap)