sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB como base de datos de series temporales

Obviamente, esta es una vieja pregunta, pero la encontré cuando estaba investigando MongoDB para obtener datos de series temporales. Pensé que podría valer la pena compartir el siguiente enfoque para asignar documentos completos por adelantado y realizar operaciones de actualización, en lugar de nuevas operaciones de inserción. Tenga en cuenta que este enfoque se documentó aquí y aquí.

Imagina que estás almacenando datos cada minuto. Considere la siguiente estructura de documento:

{
  timestamp: ISODate("2013-10-10T23:06:37.000Z"),
  type: ”spot_EURUSD”,
  value: 1.2345
},
{
  timestamp: ISODate("2013-10-10T23:06:38.000Z"),
  type: ”spot_EURUSD”,
  value: 1.2346
}

Esto es comparable a un enfoque relacional estándar. En este caso, produce un documento por valor registrado, lo que genera muchas operaciones de inserción. Podemos hacerlo mejor. Considere lo siguiente:

{
  timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
  type: “spot_EURUSD”,
  values: {
    0: 1.2345,
    …  
    37: 1.2346,
    38: 1.2347,
    … 
    59: 1.2343
  }
}

Ahora, podemos escribir un documento y realizar 59 actualizaciones. Esto es mucho mejor porque las actualizaciones son atómicas, las escrituras individuales son más pequeñas y hay otros beneficios de rendimiento y simultaneidad. Pero, ¿qué pasaría si quisiéramos almacenar el día completo, y no solo las horas completas, en un solo documento? Esto requeriría que caminemos a lo largo de 1440 entradas para obtener el último valor. Para mejorar esto, podemos extendernos más a lo siguiente:

{
  timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
  type: “spot_EURUSD”,
  values: {
    0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    …,
    22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
  }
}

Usando este enfoque anidado, ahora solo tenemos que caminar, como máximo, 24 + 60 para obtener el último valor del día.

Si construimos los documentos con todos los valores rellenados con relleno de antemano, podemos estar seguros de que el documento no cambiará de tamaño y por lo tanto no se moverá.