En nuestra aplicación, admitimos plugins escritos por el usuario.Almacenamiento de datos arbitrarios campos
Esos complementos generan datos de varios tipos (int, float, str o datetime), y esos datos están etiquetados con grupos de metadatos (usuario, directorio actual, etc.) así como tres campos de texto libre (MetricName, Var1, Var2).
Ahora tenemos varios años de estos datos, y estoy tratando de diseñar un esquema que permita un acceso muy rápido a esas métricas de forma analítica (gráficos y demás). Esto es fácil siempre y cuando solo haya unas pocas métricas que nos interesen, pero tenemos una gran cantidad de métricas diferentes en diferentes granularidades, y nos gustaría almacenar los datos agregados por el usuario para permitir un análisis posterior (posiblemente después de un cambio de esquema).
Datos de ejemplo: (por favor, tenga en cuenta que es muy simplificada)
=========================================================================================================
| BaseDir | User | TrialNo | Project | ... | MetricValue | MetricName | Var1 | Var2 |
=========================================================================================================
| /path/to/me | me | 0 | domino | ... | 20 | Errors | core | dumb |
| /path/to/me | me | 0 | domino | ... | 98.6 | Tempuratur | body | |
| /some/other/pwd | oneguy | 223 | farq | ... | 443 | ManMonths | waste | Mythical |
| /some/other/pwd | oneguy | 224 | farq | ... | 0 | Albedo | nose | PolarBear |
| /path/to/me | me | 0 | domino | ... | 70.2 | Tempuratur | room | |
| /path/to/me2 | me | 2 | domino | ... | 2020 | Errors | misc | filtered |
Cualquiera puede añadir un plugin analizador para empezar a medir una métrica velocidad del aire, y nos gustaría que nuestras herramientas Analisys a "sólo trabajo" en esa nueva métrica.
Actualización:
Teniendo en cuenta que muchos de los MetricName de son bien conocidos de antemano, puedo satisfacer mis necesidades si puedo permitir el análisis de esas métricas, y simplemente almacenar las otras métricas agregadas por el usuario. Podemos aceptar el hecho de que las nuevas métricas no estarán disponibles para análisis pesados sin una edición del esquema.
¿Qué piensan de esta solución?
He dividido nuestras métricas en tres tablas de hechos, una para los hechos que no necesitan un MetricTopic, uno para los que sí lo hacen y uno para todas las demás métricas, incluidas las inesperadas.
Para la generosidad:
Voy a aceptar cualquier crítica que muestra cómo hacer este sistema más funcional, o lo pone en una alineación más cercana con las mejores prácticas de la industria. Las referencias a la literatura dan un peso adicional.
¿Qué tal un ejemplo, digamos 10 métricas? –
@Jeffrey L Whitledge: este esquema se basa en su comentario. – bukzor
@Damir Sudarevic, @Jeffrey L Whitledge, @ S.Lott: He añadido una recompensa a esta pregunta, con la esperanza de que pueda pensar en una mejor respuesta. – bukzor