Introducción

En esta sección, aprenderemos cómo utilizar MongoDB para gestionar datos provenientes de dispositivos IoT (Internet of Things). Los dispositivos IoT generan grandes volúmenes de datos en tiempo real, y MongoDB, con su capacidad de manejar datos no estructurados y su escalabilidad, es una excelente opción para almacenar y analizar estos datos.

Conceptos Clave

  1. Dispositivos IoT: Dispositivos conectados a internet que recopilan y transmiten datos.
  2. Datos en Tiempo Real: Datos que se generan y deben ser procesados casi instantáneamente.
  3. Escalabilidad: Capacidad de una base de datos para manejar un aumento en la carga de trabajo sin comprometer el rendimiento.
  4. NoSQL: Tipo de base de datos que permite almacenar y recuperar datos no estructurados.

Ejemplo Práctico: Gestión de Datos de Sensores

Paso 1: Diseño del Esquema

Para gestionar datos de sensores IoT, primero debemos diseñar un esquema adecuado. Supongamos que estamos gestionando datos de temperatura y humedad de varios sensores.

{
  "sensor_id": "sensor_001",
  "timestamp": "2023-10-01T12:00:00Z",
  "temperature": 22.5,
  "humidity": 60
}

Paso 2: Creación de la Base de Datos y Colección

Primero, creamos una base de datos y una colección en MongoDB.

use iot_data;
db.createCollection("sensor_readings");

Paso 3: Insertar Datos

Insertamos algunos datos de ejemplo en la colección sensor_readings.

db.sensor_readings.insertMany([
  {
    "sensor_id": "sensor_001",
    "timestamp": ISODate("2023-10-01T12:00:00Z"),
    "temperature": 22.5,
    "humidity": 60
  },
  {
    "sensor_id": "sensor_002",
    "timestamp": ISODate("2023-10-01T12:05:00Z"),
    "temperature": 23.0,
    "humidity": 58
  }
]);

Paso 4: Consultar Datos

Podemos consultar los datos de un sensor específico.

db.sensor_readings.find({ "sensor_id": "sensor_001" });

Paso 5: Indexación

Para mejorar el rendimiento de las consultas, creamos índices en los campos sensor_id y timestamp.

db.sensor_readings.createIndex({ "sensor_id": 1 });
db.sensor_readings.createIndex({ "timestamp": 1 });

Paso 6: Agregación

Utilizamos el marco de agregación para calcular el promedio de temperatura y humedad por sensor.

db.sensor_readings.aggregate([
  {
    $group: {
      _id: "$sensor_id",
      avgTemperature: { $avg: "$temperature" },
      avgHumidity: { $avg: "$humidity" }
    }
  }
]);

Ejercicio Práctico

Ejercicio 1: Insertar Nuevos Datos

Inserta nuevos datos de sensores en la colección sensor_readings.

db.sensor_readings.insertMany([
  {
    "sensor_id": "sensor_003",
    "timestamp": ISODate("2023-10-01T12:10:00Z"),
    "temperature": 21.5,
    "humidity": 65
  },
  {
    "sensor_id": "sensor_004",
    "timestamp": ISODate("2023-10-01T12:15:00Z"),
    "temperature": 24.0,
    "humidity": 55
  }
]);

Ejercicio 2: Consultar Datos Recientes

Consulta los datos de los sensores que se han registrado en los últimos 10 minutos.

db.sensor_readings.find({
  "timestamp": { $gte: ISODate("2023-10-01T12:00:00Z") }
});

Ejercicio 3: Agregación por Hora

Utiliza el marco de agregación para calcular el promedio de temperatura y humedad por hora.

db.sensor_readings.aggregate([
  {
    $group: {
      _id: { $hour: "$timestamp" },
      avgTemperature: { $avg: "$temperature" },
      avgHumidity: { $avg: "$humidity" }
    }
  }
]);

Soluciones

Solución al Ejercicio 1

db.sensor_readings.insertMany([
  {
    "sensor_id": "sensor_003",
    "timestamp": ISODate("2023-10-01T12:10:00Z"),
    "temperature": 21.5,
    "humidity": 65
  },
  {
    "sensor_id": "sensor_004",
    "timestamp": ISODate("2023-10-01T12:15:00Z"),
    "temperature": 24.0,
    "humidity": 55
  }
]);

Solución al Ejercicio 2

db.sensor_readings.find({
  "timestamp": { $gte: ISODate("2023-10-01T12:00:00Z") }
});

Solución al Ejercicio 3

db.sensor_readings.aggregate([
  {
    $group: {
      _id: { $hour: "$timestamp" },
      avgTemperature: { $avg: "$temperature" },
      avgHumidity: { $avg: "$humidity" }
    }
  }
]);

Conclusión

En esta sección, hemos aprendido cómo utilizar MongoDB para gestionar datos de dispositivos IoT. Hemos cubierto desde el diseño del esquema hasta la inserción, consulta y agregación de datos. Con estos conocimientos, estás preparado para manejar grandes volúmenes de datos en tiempo real y realizar análisis avanzados utilizando MongoDB.

© Copyright 2024. Todos los derechos reservados