2010-09-15 18 views
8

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.

Metrics Schema #3


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.

+0

¿Qué tal un ejemplo, digamos 10 métricas? –

+0

@Jeffrey L Whitledge: este esquema se basa en su comentario. – bukzor

+0

@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

Respuesta

2

Podría agregar otra columna para cada métrica que nos interese, pero que podría oscilar entre cientos o incluso miles. Escribiría un guión solo para actualizar el esquema, y ​​eso huele a mal diseño.

No tiene tantos hechos. No hay tantas unidades.

Los hechos tienen unidades. Segundos, libras, bytes, dólares.

Necesita revisar el diseño "Esquema de estrella". Usted tiene dimensiones (probablemente mucho) y hechos mensurables (probablemente muy pocos).

Tiene una unión entre hechos y todas las dimensiones asociadas. Puede hacer una suma, contar con los hechos y agrupar por las dimensiones.

No puede tener miles de datos independientes. Eso es casi imposible. Pero puedes tener miles de combinaciones de dimensiones, eso es común.

Hechos separados (cantidades mensurables que añaden agradablemente) de las dimensiones (cualidades de definición) y debe tener muchas dimensiones en torno a algunos hechos.

Compre una copia de Kimball.

+0

Compré Kimball en Kindle justo después de publicar esta pregunta. – bukzor

+0

Estoy de acuerdo. Si miro de cerca, solo tengo quizás 40 hechos diferentes, pero todavía tengo el problema de que alguien puede agregar un nuevo tipo de hecho sin previo aviso, lo que requiere una actualización del esquema. ¿Hay alguna sabiduría común para un sistema con hechos indeterminados? Haz una dimensión llamada FactName? – bukzor

+0

* "No puedes tener miles de datos independientes. Eso es casi imposible" * No entiendo el razonamiento detrás de esa afirmación, ¿puedes explicar a qué te refieres? – naught101

5

Si entiendo correctamente, está buscando un esquema para admitir la creación en marcha de medidas en un DW. En un almacén de datos clásico, cada medida es una columna, por lo que en una estrella Kimball debe agregar una columna para cada nueva medida: cambie el esquema.

Lo que tiene es un modelo de EAV, y el análisis en EAV no es fácil y no es rápido, eche un vistazo a this discussion.

Le sugiero que consulte herramientas como splunk, que es adecuado para este tipo de problemas.

+0

Gracias! Al menos tengo un nombre para mi problema ahora. ¿Conoces alguna escritura autorizada sobre análisis para EAV? – bukzor

+0

@bukzor, no realmente. –

Cuestiones relacionadas