Logo

dev-resources.site

for different kinds of informations.

Series de tiempo en MongoDB

Published at
12/17/2024
Categories
mongodb
nosql
database
beginners
Author
brunolevidev
Categories
4 categories in total
mongodb
open
nosql
open
database
open
beginners
open
Author
12 person written this
brunolevidev
open
Series de tiempo en MongoDB

Introducci贸n

Los datos de series de tiempo, son colecciones de datos que pueden definirse como una secuencia de "data points" que tienen asociados una estampa de tiempo, es decir, consisten en m茅tricas hechas desde una fuente de datos sobre un determinado periodo de tiempo.

Ejemplos de series de tiempo

Algunos de los siguientes tipos de datos son adecuados para almacenarse en una colecci贸n de series temporales:

  • Datos Meteorol贸gicos:
    • Temperatura, humedad, presi贸n atmosf茅rica, etc., registrados en intervalos regulares.
  • Datos Financieros:
    • Precios de acciones, tipos de cambio, etc., que pueden registrarse cada minuto, cada hora, o en cualquier otro intervalo de tiempo.
  • Datos de Telemetr铆a:
    • Informaci贸n proveniente de sensores en tiempo real, como la velocidad de un autom贸vil, la altitud de un avi贸n, etc.

Ejemplos de lo que no es una serie de tiempo

  • Registros 脷nicos de Transacciones:

    • Datos que representan eventos 煤nicos y no parte de una serie de eventos que se desarrollan a lo largo del tiempo.
  • Datos Demogr谩ficos:

    • Informaci贸n sobre individuos o grupos que no est谩 necesariamente vinculada a una estampa de tiempo espec铆fica, como edad, g茅nero, educaci贸n, etc.
  • Grafos de Conexiones o Redes:

    • Informaci贸n que representa las relaciones entre diferentes entidades, donde el enfoque principal est谩 en la relaci贸n en s铆 misma y no en c贸mo cambia esa relaci贸n con el tiempo.

Requisitos

  • Contar con MongoDB a partir de la versi贸n 5.0
  • Establecer un modelo de datos que tenga las siguientes caracter铆sticas:
    • Timestamp (estampa de tiempo): La fecha y hora en la que fue capturado el dato
    • Metadata (se refiere a los datos fuente): es una etiqueta que identifica de forma 煤nica la serie y generalmente no cambia
    • Measurements (se refiere a las m茅tricas o valores): Se trata de los valores registrados a trav茅s del tiempo
  • Crear la colecci贸n con las caracter铆sticas para que sea tratada como serie de tiempo

Modelo de datos a convertir

Vamos a convertir el siguiente modelo de datos a una serie de tiempos de MongoDB:

{
    "station_id": "12345",
    "location": {
        "type": "Point",
        "coordinates": [-70.6506, -33.4378]
    },
    "timestamp": ISODate("2023-09-08T12:34:56Z"),
    "temperature": 22.5,
    "humidity": 65.0,
    "pressure": 1013.2,
    "wind": {
        "speed": 10.5,
        "direction": 220.0
    },
    "precipitation": {
        "last_hour": 0.0,
        "last_24_hours": 1.2
    },
    "conditions": "Sunny",
    "alerts": [
        {
            "type": "Heat Warning",
            "description": "Temperatures are expected to rise above 30掳C today.",
            "start": ISODate("2023-09-08T00:00:00Z"),
            "end": ISODate("2023-09-08T23:59:59Z")
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Este modelo de datos permite almacenar una amplia variedad de datos meteorol贸gicos de una manera que facilita tanto el almacenamiento como la consulta de los datos. Los datos se almacenan en un formato que facilita la realizaci贸n de consultas temporales, y se pueden realizar consultas geogr谩ficas gracias al uso de GeoJSON para almacenar la ubicaci贸n. En este modelo de datos:

  • station_id: Es el identificador 煤nico de la estaci贸n meteorol贸gica que registr贸 los datos.
  • location: Es un objeto GeoJSON que almacena la ubicaci贸n de la estaci贸n meteorol贸gica.
  • timestamp: Es la estampa de tiempo que indica cu谩ndo fueron capturados los datos.
  • temperature: Es la temperatura registrada en grados Celsius.
  • humidity: Es la humedad relativa registrada en porcentaje.
  • pressure: Es la presi贸n atmosf茅rica registrada en hectopascales (hPa).
  • wind: Es un objeto que almacena la velocidad y la direcci贸n del viento.
  • speed: Es la velocidad del viento en km/h.
  • direction: Es la direcci贸n del viento en grados.
  • precipitation: Es un objeto que almacena la cantidad de precipitaci贸n.
  • last_hour: Es la cantidad de precipitaci贸n en la 煤ltima hora en mm.
  • last_24_hours: Es la cantidad de precipitaci贸n en las 煤ltimas 24 horas en mm.
  • conditions: Es una descripci贸n textual de las condiciones meteorol贸gicas.
  • alerts: Es un array que puede contener cero o m谩s alertas meteorol贸gicas.
  • type: Es el tipo de alerta.
  • description: Es una descripci贸n de la alerta.
  • start: Es la fecha y hora de inicio de la alerta.
  • end: Es la fecha y hora de fin de la alerta.

Conversi贸n a serie de tiempo de MongoDB

Para utilizar el modelo de datos proporcionado en una colecci贸n de series temporales de MongoDB, se tiene que hacer algunas modificaciones para ajustarlo a las caracter铆sticas espec铆ficas y requisitos de las series temporales en MongoDB. Aqu铆 est谩 el modelo modificado:

{
    "metadata": {
        "station_id": "12345",
        "location": {
            "type": "Point",
            "coordinates": [-70.6506, -33.4378]
        }
    },
    "timestamp": ISODate("2023-09-08T12:34:56Z"),
    "measurements": {
        "temperature": 22.5,
        "humidity": 65.0,
        "pressure": 1013.2,
        "wind_speed": 10.5,
        "wind_direction": 220.0,
        "precipitation_last_hour": 0.0,
        "precipitation_last_24_hours": 1.2
    },
    "conditions": "Sunny",
    "alerts": [
        {
            "type": "Heat Warning",
            "description": "Temperatures are expected to rise above 30掳C today.",
            "start": ISODate("2023-09-08T00:00:00Z"),
            "end": ISODate("2023-09-08T23:59:59Z")
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Cambios realizados

  • Metadatos agrupados: Los campos de metadatos (station_id y location) se han agrupado bajo un 煤nico campo metadata. Esto se alinea con la recomendaci贸n de MongoDB de agrupar los metadatos en un campo separado.
  • Mediciones agrupadas: Los campos individuales de medici贸n se han agrupado bajo un campo measurements para mantener una estructura m谩s organizada.
  • Flatten Nested Objects: Los objetos anidados para wind y precipitation se han "aplanado" para facilitar las consultas y el an谩lisis.

Creaci贸n de la colecci贸n

Al crear la colecci贸n de series temporales en MongoDB, se debe especificar timestamp como el campo de tiempo y metadata como el campo de metadatos. A continuaci贸n te ense帽o a crear la colecci贸n:

db.createCollection("weather_data", {
   timeseries: {
     timeField: "timestamp",
     metaField: "metadata",
     granularity: "hours"
   }
})
Enter fullscreen mode Exit fullscreen mode

Del comando anterior:

  • timeField: Es el campo que contiene la estampa de tiempo de cada documento (registro de datos).
  • metaField: Es el campo que contiene los metadatos que son compartidos entre m煤ltiples documentos en la colecci贸n.
  • granularity: Es una opci贸n para definir el nivel de granularidad del bucketing. He elegido "hours" aqu铆, pero puedes ajustarlo seg煤n tus necesidades.

Inserci贸n de datos

Ahora que ya hemos creado nuestra colecci贸n de series de tiempo podemos insertar datos:

db.weather_data.insertOne({
    "metadata": {
        "station_id": "12345",
        "location": {
            "type": "Point",
            "coordinates": [-70.6506, -33.4378]
        }
    },
    "timestamp": ISODate("2023-09-08T12:34:56Z"),
    "measurements": {
        "temperature": 22.5,
        "humidity": 65.0,
        "pressure": 1013.2,
        "wind_speed": 10.5,
        "wind_direction": 220.0,
        "precipitation_last_hour": 0.0,
        "precipitation_last_24_hours": 1.2
    },
    "conditions": "Sunny",
    "alerts": [
        {
            "type": "Heat Warning",
            "description": "Temperatures are expected to rise above 30掳C today.",
            "start": ISODate("2023-09-08T00:00:00Z"),
            "end": ISODate("2023-09-08T23:59:59Z")
        }
    ]
})
Enter fullscreen mode Exit fullscreen mode

Conclusiones

Como pudimos ver, las series de tiempo est谩n pensadas para contener una gran cantidad de datos en periodos de tiempo cortos. En MongoDB tenemos varias herramientas para trabajar con series de tiempo, una de esas caracter铆sticas es el uso de TTL (tiempo de vida de los datos) para ir borrando una vez que expira su tiempo de vida, para lograr esto tenemos que definirlo en la creaci贸n de la colecci贸n:

db.createCollection("weather_data", {
   timeseries: {
     timeField: "timestamp",
     metaField: "metadata",
     granularity: "hours"
   },
    expireAfterSeconds: 86400
})
Enter fullscreen mode Exit fullscreen mode

Evidentemente el uso de esta caracter铆stica de MongoDB radica en la compresi贸n de los datos ya que seg煤n con su documentaci贸n, el algoritmo de compresi贸n de los datos es bajo la librer铆a zstd que es m谩s eficiente que snappy.

Las ventajas de uso de las series de tiempo son:

  • Optimizaci贸n de Almacenamiento
    • Compresi贸n: MongoDB 5.0 introduce mejoras significativas en la compresi贸n de datos de series temporales, permitiendo almacenar m谩s datos en menos espacio.
    • Esquema flexible: Puedes aprovechar el modelo de documentos de MongoDB para estructurar datos de series temporales de una manera que facilite las consultas y el an谩lisis.
  • Facilidad de Escalabilidad
    • Sharding: MongoDB soporta sharding, lo que facilita la escalabilidad horizontal para manejar grandes vol煤menes de datos.
    • Replicaci贸n: La replicaci贸n en MongoDB asegura la disponibilidad y la redundancia de los datos.
  • Consultas Eficientes
    • 脥ndices: MongoDB permite crear 铆ndices sobre campos espec铆ficos, facilitando consultas r谩pidas y eficientes.
    • Aggregation Framework: El framework de agregaci贸n de MongoDB es potente y puede ser muy 煤til para analizar datos de series temporales.
  • Integraci贸n con Herramientas de An谩lisis
    • Conectores: MongoDB ofrece conectores para varias herramientas populares de an谩lisis de datos y BI, facilitando la integraci贸n con tu stack de herramientas existente.

Si quieres profundizar en el manejo de series de tiempo puedes encontrar documentaci贸n de MongoDB aqu铆. Espero que este art铆culo te aporte algo de conocimiento y lo uses en tus pr贸ximos proyectos.

nosql Article's
30 articles in total
Favicon
O que 茅 o Apache Cassandra e quando usar?
Favicon
Efficient Batch Writing to DynamoDB with Python: A Step-by-Step Guide
Favicon
SQL VS NoSQL
Favicon
MongoDB: How to setup replica sets
Favicon
Do you think schema flexibility justifies using NoSQL? Think twice.
Favicon
Series de tiempo en MongoDB
Favicon
What I Learned from the 'Amazon DynamoDB for Serverless Architectures' Course on AWS Skill Builder
Favicon
MongoDB Command Shortcuts: The Ultimate Guide
Favicon
MongoDB: Startup replica sets with a config file
Favicon
Azure Logs Analytics for CosmosDB
Favicon
Choosing the Right Database: A Simplified Guide
Favicon
Understanding the Differences Between NoSQL and SQL Databases
Favicon
Part 2 - CosmosDB Logical Partition and the Impact on Partition Key Choice
Favicon
Partitions in Azure Cosmos DB: A Common Discussion with Customers
Favicon
Database Sharding: Simplifying Data Scalability
Favicon
HTTP and GraphQL
Favicon
New possibilities with GraphQL
Favicon
NoSQL delivers quick value
Favicon
Navigating Databases: From SQL to NoSQL
Favicon
Selecting the Right Database for the Job
Favicon
NewSQL: Bridging the Gap Between SQL and NoSQL
Favicon
Weekly Updates - October 18, 2024
Favicon
Overcoming MongoDB Limitations with Fauna
Favicon
MongoDB Developer Day Manila 2024: A Recap - A Deep Dive into the Future of Data
Favicon
How to choose the right database?
Favicon
SQL vs. NoSQL: Key Differences, Use Cases, and Choosing the Right Database for Your Project
Favicon
Top 5 SQL questions asked in interviews
Favicon
Weekly Updates - Nov 8, 2024
Favicon
Plain Javascript Refresher for those feeling left behind or not knowing where to start w/ Functions, Arrays, Loops, JSON & NoSQL
Favicon
Mastering DynamoDB: Batch Operations Explained

Featured ones: