Capítulo 1. Introducción Introducción

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

MongoDB es una base de datos de propósito general potente, flexible y escalable. Combina la capacidad de ampliación con características como índices secundarios, consultas de rango, ordenación, agregaciones e índices geoespaciales. Este capítulo cubre las principales decisiones de diseño que han hecho de MongoDB lo que es.

Facilidad de uso

MongoDB es una base de datos orientada a documentos, no relacional. La razón principal para alejarse del modelo relacional es facilitar el escalado, pero también hay otras ventajas.

Una base de datos orientada a documentos sustituye el concepto de "fila" por un modelo más flexible, el "documento". Al permitir documentos y matrices incrustados, el enfoque orientado a documentos hace posible representar relaciones jerárquicas complejas con un único registro. Esto encaja de forma natural en la forma en que los desarrolladores de lenguajes modernos orientados a objetos piensan sobre sus datos.

Tampoco hay esquemas predefinidos: las claves y valores de un documento no son de tipos o tamaños fijos. Sin un esquema fijo, es más fácil añadir o eliminar campos según las necesidades. En general, esto hace que el desarrollo sea más rápido, ya que los desarrolladores pueden iterar rápidamente. También es más fácil experimentar. Los desarrolladores pueden probar docenas de modelos para los datos y luego elegir el mejor.

Diseñado a escala

El tamaño de los conjuntos de datos de las aplicaciones está creciendo a un ritmo increíble. El aumento del ancho de banda disponible y el almacenamiento barato han creado un entorno en el que incluso las aplicaciones a pequeña escala necesitan almacenar más datos de los que muchas bases de datos estaban pensadas para manejar. Un terabyte de datos, antes una cantidad de información inaudita, es ahora algo habitual.

A medida que crece la cantidad de datos que los desarrolladores necesitan almacenar, se enfrentan a una difícil decisión: ¿cómo deben escalar sus bases de datos? El escalado de una base de datos se reduce a la elección entre escalar hacia arriba (conseguir una máquina más grande) o escalar hacia afuera (dividir los datos en más máquinas). La ampliación suele ser el camino de menor resistencia, pero tiene sus inconvenientes: las máquinas grandes suelen ser muy caras, y al final se alcanza un límite físico en el que no se puede comprar una máquina más potente a cualquier precio. La alternativa es escalar hacia fuera: para añadir espacio de almacenamiento o aumentar el rendimiento de las operaciones de lectura y escritura, compra servidores adicionales y añádelos a tu clúster. Esto es más barato y más escalable; sin embargo, es más difícil administrar mil máquinas que cuidar una.

MongoDB se diseñó para escalarse. El modelo de datos orientado a documentos facilita la división de datos entre varios servidores. MongoDB se encarga automáticamente de equilibrar los datos y la carga en un clúster, redistribuyendo los documentos automáticamente y dirigiendo las lecturas y escrituras a las máquinas correctas, como se muestra en la Figura 1-1.

Figura 1-1. Ampliación de MongoDB mediante fragmentación en varios servidores

La topología de un clúster MongoDB, o si de hecho hay un clúster en lugar de un único nodo al otro lado de una conexión de base de datos, es transparente para la aplicación. Esto permite a los desarrolladores centrarse en programar la aplicación, no en escalarla. Del mismo modo, si es necesario cambiar la topología de una implementación existente para, por ejemplo, escalarla para soportar una mayor carga, la lógica de la aplicación puede seguir siendo la misma.

Rico en características...

MongoDB es una base de datos de propósito general, por lo que, aparte de crear, leer, actualizar y eliminar datos, proporciona la mayoría de las funciones que cabría esperar de un sistema de gestión de bases de datos y muchas otras que lo diferencian. Entre ellas están:

Indexación

MongoDB admite índices secundarios genéricos y proporciona también capacidades de indexación única, compuesta, geoespacial y de texto completo. También admite índices secundarios sobre estructuras jerárquicas, como documentos anidados y matrices, y permite a los desarrolladores aprovechar al máximo la capacidad de modelar de la forma que mejor se adapte a sus aplicaciones.

Agregación

MongoDB proporciona un marco de agregación basado en el concepto de canalizaciones de procesamiento de datos. Los pipelines de agregación te permiten construir motores analíticos complejos procesando los datos a través de una serie de etapas relativamente sencillas en el lado del servidor, aprovechando al máximo las optimizaciones de la base de datos.

Tipos especiales de colecciones e índices

MongoDB admite colecciones de tiempo de vida (TTL) para datos que deben caducar en un momento determinado, como las sesiones, y colecciones de tamaño fijo (capped), para conservar datos recientes, como los registros. MongoDB también admite índices parciales limitados sólo a los documentos que coincidan con un filtro de criterios, para aumentar la eficiencia y reducir la cantidad de espacio de almacenamiento necesario.

Almacenamiento de archivos

MongoDB admite un protocolo fácil de usar para almacenar archivos grandes y metadatos de archivos.

Algunas características comunes a las bases de datos relacionales no están presentes en MongoDB, en particular las uniones complejas. MongoDB admite uniones de forma muy limitada mediante el uso del operador de agregación $lookup, introducido en la versión 3.2. En la versión 3.6, es posible realizar uniones más complejas utilizando múltiples condiciones de unión, así como subconsultas no relacionadas. El tratamiento de las uniones por parte de MongoDB fue una decisión arquitectónica para permitir una mayor escalabilidad, ya que ambas características son difíciles de proporcionar de forma eficiente en un sistema distribuido.

...sin sacrificar la velocidad

El rendimiento es un objetivo impulsor de MongoDB, y ha dado forma a gran parte de su diseño. Utiliza el bloqueo oportunista en su motor de almacenamiento WiredTiger para maximizar la concurrencia y el rendimiento. Utiliza toda la RAM que puede como caché e intenta elegir automáticamente los índices correctos para las consultas. En resumen, casi todos los aspectos de MongoDB se diseñaron para mantener un alto rendimiento.

Aunque MongoDB es potente e incorpora muchas características de los sistemas relacionales, no pretende hacer todo lo que hace una base de datos relacional. Para algunas funcionalidades, el servidor de la base de datos descarga el procesamiento y la lógica al lado del cliente (gestionado por los controladores o por el código de la aplicación del usuario). El mantenimiento de este diseño racionalizado es una de las razones por las que MongoDB puede alcanzar un rendimiento tan alto.

La Filosofía

A lo largo de este libro, nos tomaremos el tiempo de anotar el razonamiento o la motivación que hay detrás de determinadas decisiones tomadas en el desarrollo de MongoDB. A través de esas notas, esperamos compartir la filosofía que hay detrás de MongoDB. Sin embargo, la mejor forma de resumir el proyecto MongoDB es haciendo referencia a su objetivo principal: crear un almacén de datos con todas las funciones que sea escalable, flexible y rápido.

Get MongoDB: La Guía Definitiva, 3ª Edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.