# NoSQL

> Bases de datos que guardan la información en formas distintas a tablas de columnas fijas.

- Nivel: Intermedio
- Temas: Datos
- URL: https://tidbit.legios.com.ar/es/nosql/
- En inglés: [NoSQL](https://tidbit.legios.com.ar/nosql/)

**NoSQL** es un nombre paraguas para las bases de datos que no usan el modelo relacional clásico de tablas, filas y columnas fijas consultadas con SQL. El nombre se suele leer como "not only SQL" (no solo SQL). Se hicieron populares a fines de los 2000, cuando las grandes empresas web necesitaban guardar cantidades enormes de datos repartidos en muchos servidores, con formas flexibles y lecturas y escrituras muy rápidas.

Hay cuatro familias principales. Las **bases de datos documentales**, como MongoDB, guardan cada registro como un documento parecido a JSON que puede tener sus propios campos. Las **clave-valor**, como Redis o Amazon DynamoDB, funcionan como un diccionario gigante: das una clave y te devuelve el valor, rapidísimo. Las de **columnas anchas**, como Cassandra, guardan tablas enormes donde cada fila puede tener columnas distintas. Las **de grafos**, como Neo4j, guardan cosas y las conexiones entre ellas, ideales para redes sociales o detección de fraude.

La contracara es que diseñás pensando en cómo se van a leer los datos. Una base relacional te deja hacer casi cualquier pregunta después, uniendo tablas; muchas NoSQL son rápidas y escalan fácil justamente porque limitan esos joins y a veces aceptan que distintas copias queden desincronizadas por un momento. Ninguna es mejor en general. Muchas empresas usan las dos: una relacional para pedidos y pagos, y una NoSQL para sesiones, caché, catálogos o feeds de actividad.

## Una analogía

Una base relacional es un fichero con formularios impresos idénticos. NoSQL es un conjunto de otros contenedores: carpetas donde cada documento puede ser distinto, un llavero, un libro de registros enorme, un corcho con hilos entre fotos. Cada uno sirve mucho mejor que el fichero para ciertas tareas.

## Para quedarse

- "Not only SQL": bases de datos sin el modelo de tablas fijas.
- Cuatro familias: documentales, clave-valor, de columnas anchas y de grafos.
- Suelen escalar fácil en muchos servidores, muchas veces con menos joins y consistencia más laxa.
- Muchas veces se usan junto a una base relacional, no en su lugar.

## Para seguir leyendo

- [¿Qué es NoSQL? (AWS)](https://aws.amazon.com/es/nosql/)
- [NoSQL en Wikipedia](https://es.wikipedia.org/wiki/NoSQL)

## Términos relacionados

- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [SQL](https://tidbit.legios.com.ar/es/sql/): El lenguaje para hacerle preguntas a una base de datos.
- [Servidor](https://tidbit.legios.com.ar/es/server/): Una computadora cuyo trabajo es responder pedidos de otras computadoras, todo el día.
- [JSON](https://tidbit.legios.com.ar/es/json/): El formato de texto con el que los programas se pasan datos estructurados.
- [Amazon DynamoDB](https://tidbit.legios.com.ar/es/amazon-dynamodb/): Una base de datos clave-valor que responde en milisegundos por más que crezca la tabla.
- [Contenedor](https://tidbit.legios.com.ar/es/container/): Una caja cerrada con un programa y todo lo que necesita para correr en cualquier lado.
- [Núcleos e hilos](https://tidbit.legios.com.ar/es/cpu-cores-and-threads/): Por qué una CPU es en realidad varios procesadores, y cómo atiende todavía más tareas.
