Chismes del Lince 92 · Bases de datos NoSQL

Las mismas lecturas del chisme 91, pero guardadas como documentos que no todos tienen la misma forma. Todo ocurre en tu navegador.

El Lince lleva meses guardando lecturas, pero no todas llegan completas. A veces el sensor de luz no responde, una versión antigua del programa escribe temp en lugar de temperatura, y a veces la micro:bit avisa de que tiene la batería baja. La Gata Montesa le dice: «Las cosas fallan. No podemos parar por eso. Lo que hacemos es guardar lo que llega y saber con qué lo hemos guardado».

1. Elige de dónde vienen los datos

Una mañana de clase inventada, con una lectura por minuto. Casi todas llegan completas, pero de vez en cuando falla algo: el sensor de luz no responde, llega un formato antiguo, hay un aviso de batería o el sensor no contesta.

2. Un documento, una forma

En SQL, cada fila tiene las mismas columnas. En una base de datos de documentos cada registro es un objeto con sus propios campos, escrito en JSON. Estos son los últimos documentos que se han guardado:

(todavía no hay documentos)

La base de datos acepta cualquiera de estas formas. Nadie le ha dicho antes cuál es la forma correcta.

Qué campos tienen los documentos

Un censo de la colección: cuántos documentos tienen cada campo.

3. Pregunta a la colección

En NoSQL el filtro es un objeto JSON: {"campo": {"$gt": 24}}. Los campos que no existen en un documento simplemente no coinciden.

Los operadores del filtro NoSQL
OperadorQué haceEjemplo
$gt, $gte, $lt, $lteMayor, mayor o igual, menor, menor o igual{"temperatura": {"$gt": 24}}
$eq, $neIgual, distinto{"luz": {"$ne": 0}}
$inEstá en la lista{"sonido": {"$in": [0, 255]}}
$existsEl campo existe (o no existe, con false){"aviso": {"$exists": true}}
$and, $orCombina varias condiciones{"$or": [{"aviso": {"$exists": true}}, {"error": {"$exists": true}}]}
"a.b"Campo dentro de otro (anidado){"detalle.intentos": {"$gte": 2}}

4. Lo mismo en una tabla SQL

La tabla lecturas del chisme 91 tiene cuatro columnas fijas. Para compararla, el simulador construye una tabla con los datos de la colección: si un documento tiene temp en lugar de temperatura, lo pone en la columna temperatura, y si le falta un campo, la celda queda como NULL.

En SQL, para preguntar por valores que faltan hay que escribir IS NULL. = NULL no sirve, porque un dato que no existe no es igual a nada.

5. Retos 0/5

Escribe el filtro NoSQL en el editor (con «Documentos (NoSQL)» seleccionado) y pulsa «Comprobar». El reto se da por bueno si devuelve exactamente los documentos esperados.

6. Todos los documentos

7. Qué estamos midiendo realmente

Glosario
  • Documento: un registro que puede tener cualquier conjunto de campos.
  • Colección: un conjunto de documentos (aquí, lecturas).
  • JSON: formato de texto para datos estructurados con llaves, corchetes, comillas y comas. Lo usan las páginas web y muchas APIs.
  • NoSQL: bases de datos que no se basan en tablas con esquema fijo (en inglés «not only SQL»: no solo SQL). Hay de documentos, clave-valor, columnas y grafos.
  • Esquema: la descripción de la forma que deben tener los datos. SQL la exige; NoSQL la deja opcional.
  • NULL: en SQL, un valor que falta. No es 0 ni texto vacío.

Para el aula

Qué hemos aprendido

Una tabla SQL obliga a decidir antes la forma de todos los datos, y eso la hace muy fiable para preguntas precisas. Una colección de documentos acepta lo que llega, con sus campos y sus fallos, y eso la hace flexible cuando los datos son variados. Ninguna es mejor en todo. Elegir una u otra es una decisión de ingeniería.

Lo importante no es que el Lince deje de medir cuando algo falla. Lo importante es que lo que guarda explique lo que ha pasado.