Necesito crear una base de datos de series de tiempo y realizar las siguientes tareas:
- crear nuevas series de tiempo
- actualizar series de tiempo existentes
- consultar una o varias series de tiempo a la vez (por ejemplo, todas las series de tiempo para la misma fecha, etc.)
¿Está Mongo adaptado a eso y, en caso afirmativo, cómo debo estructurar la base de datos? (¿una serie de tiempo = un documento? ¿O un documento = una entrada de la serie de tiempo, y todos estos documentos forman la colección que es la serie de tiempo completa?)
Estoy un poco perdido aquí y me resulta difícil encontrar información, ya que generalmente Mongo se presenta como muy flexible, por lo que el usuario tiene la opción en la infraestructura.
Cualquier enlace al tutorial que explique específicamente cómo administrar series temporales en Mongo es muy bienvenido.
¡Gracias!
Respuestas:
Sugiero una sola entrada de series de tiempo por documento. Hay algunos problemas con el almacenamiento de múltiples entradas por documento:
También tenga en cuenta que una marca de tiempo está integrada en el Id . De objeto MongoDB predeterminado . Puede usar esto si la precisión de la serie temporal es inferior a un segundo.
Aquí hay un documento BSON de ejemplo de una biblioteca de registro de eventos que usa MongoDB :
Dado que un registro de eventos es similar a una serie de tiempo, puede valer la pena estudiar el resto del código . Hay versiones en Java, C #, PHP y Python.
Aquí hay otro proyecto similar de código abierto: Zarkov
[actualización] En respuesta al comentario de @ RockScience, agregué algunas referencias más:
fuente
Encontré esta pregunta en SO ( /programming/4814167/storing-time-series-data-relational-or-non ) donde el OP pregunta cómo almacenar una serie de tiempo. Aunque su pregunta se basa más en el uso de una base de datos NoSQL o un RDBMS, y parece bastante dispuesto a usar un db NoSQL.
También encontré este artículo sobre " Los requisitos únicos de la base de datos de datos de series temporales " que podrían ser útiles.
Espero que esto ayude.
fuente
Sí, definitivamente, la base de datos NoSQL se adapta mejor al almacenamiento de datos de series de tiempo que el RDBMS tradicional.
Sí, MongoDB está excepcionalmente adaptado a este caso de uso.
-¿Cómo debe estructurar la base de datos? Un documento = una entrada de series de tiempo VS múltiples series de tiempo.
La respuesta es almacenar en un documento múltiples series de tiempo. Tener menos documentos ayudará al rendimiento con menos lecturas. Un truco es preparar su documento con los valores predefinidos. Esto optimizará la actualización del documento evitando Record Padding .
Aquí hay un ejemplo de esquema sobre cómo almacenar de manera óptima una hora de series de tiempo con un intervalo de minutos:
Lo inicia con valores 0 y luego las actualizaciones se optimizarán. Las lecturas están optimizadas porque se lee un documento en lugar de 60. Si necesita almacenar un día de datos, o un mes para continuar con la misma técnica, se le ocurre la idea.
Aquí está el enlace a un tutorial que explica específicamente cómo administrar series temporales en MongoDb desde el blog oficial de MongoDb: http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- mongodb
fuente