2012-02-24 11 views
24

tienen una pregunta en bases de datos de gráficos, ¿alguien me puede ayudar por favor? Estoy manejando bastantes datos en mysql aproximadamente 5M registros por día enviados por un enrutador como dispositivo, puntos de acceso, puentes inalámbricos. Los datos son , por lo general, datos de salud, gps, etc ... estos son dispositivos en vehículos. ¿Cómo maneja el datos basados ​​en tiempo en bases de datos de gráficos? ¿Alguien ha aplicado neo4j para datos basados ​​en el tiempo? Sería genial saber cómo consultar los intervalos de y cómo se haría sobre el modelado.Datos basados ​​en el tiempo en neo4j

Supongo que puedo crear un nodo para cada vez que recibo datos con propiedades configuradas cada vez como gps modificados, ¿salud? Sería una gráfica basada en el tiempo - ¿suena bien? bien con las filas de 5M mysql no funciona mal, pero a medida que el enrutador obtiene la nueva funcionalidad aparecen nuevos datos y necesito crear nuevos modelos , lo cual no está nada mal, pero no es genial. quiero algo que es semi estructurado y hace que relacionar cosas diferentes como por qué el usuario fue expulsado es porque un punto de acceso asociado al enrutador está caído. Mis consultas habituales serían levantar alertas para decir que uno de los dispositivos está inactivo o si hay un rendimiento reducido de , etc. ¿Me ayudaría neo4j a unir estas relaciones mejor que mysql?

Me encantaría saber lo que ustedes piensan, cualquier comentario + pensamientos apreciado.

+0

Para consultar profundamente los datos semiestructurados, consulte Apache Solr. Para aplicar reglas (dinámicamente) a los datos, consulte Drools. – aitchnyu

Respuesta

16

Consulte el siguiente GraphGist para obtener un tutorial sobre cómo hacer un almacenamiento de gráficos basado en tiempo utilizando escalas de tiempo.

http://gist.neo4j.org/?github-kbastani%2Fgists%2F%2Fmeta%2FTimeScaleEventMetaModel.adoc

Time Scale Graph

En el gráfico de escala de tiempo que se modela anteriormente, un recorrido de ruta más corta desde un nodo de color azul para el nodo de color transparente constituye una identidad única vez en bits.

La identidad rastreada por la ruta roja es 0 → 1 → 0 → 1 → 0 → 0. La ruta inversa es 0 → 0 → 1 → 0 → 1 → 0 o simplemente 001010, una identidad única en bits.

MATCH p=shortestPath((n1:d)-[:child_of*]->(n2:y)) 
WHERE n1.key = 'd10' 
RETURN DISTINCT reduce(s = '' , n IN nodes(p)| n.tempo + s) AS TimeIdentity 
ORDER BY TimeIdentity 

La consulta de Cypher muestra una ruta más corta desde el nodo de color azul al nodo de color transparente. Esta es una cadena de bits que representa una identidad de tiempo que puede ordenarse por evento dependiendo de su posición en el subgráfico de evento de escala de tiempo.

favor ver más abajo la hora del evento escala subgrafo:

Time Scale Event Subgraph

La imagen anterior representa una escala de tiempo conectado a una serie de eventos (MET). Los eventos, representados como nodos triangulares en la imagen, también están conectados a una jerarquía de características (John, Sally, Pam, Anne) que luego se generalizan en clases (Persona).

Ahora puede ejecutar una consulta de Cypher como la que enumeré anteriormente que ordenará los eventos por tiempo de ocurrencia como una cadena de bits.Nota: que debe aplicar una marca de tiempo al nodo que recupera la hora real. Cada nodo azul representa un evento separado en el tiempo pero no necesariamente el tiempo real, solo una representación de eventos que ocurrieron en un orden.

MATCH p=(p0:person)-[:event]->(ev)-[:event]->(p1:person) 
WITH p, ev 
MATCH time_identity = (d0:d)<-[:event]-(ev) 
WITH d0, p 
MATCH p1=(d0)-[:child_of*]->(y0:y) 
RETURN extract(x IN nodes(p)| coalesce(x.name, x.future)) AS Interaction, reduce(s = '' , n IN nodes(p1)| n.tempo + s) AS TimeIdentity 
ORDER BY TimeIdentity 

Las jerarquías en la escala de tiempo le permiten agrupar eventos y ver representaciones en niveles superiores. Entonces, seleccionar todos los nodos verdes debajo de un nodo naranja selecciona 4 eventos posibles (representados por nodos azules).

Avíseme si tiene alguna pregunta y asegúrese de visitar GraphGist para ver más detalles y ejemplos reales en vivo del subgráfico de eventos de escala de tiempo.

+0

Gracias, pero me cuesta entender cómo se calcula la cadena de identidad de tiempo. ¿Hay detalles en profundidad sobre este enfoque, por favor? – opensourcegeek

+0

El algoritmo de ruta más corta se ocupa de ello porque va de abajo hacia arriba. Si fueras por el otro lado, te topas con la ambigüedad. Traza con el dedo la ruta más corta desde el nodo azul al nodo transparente y te das cuenta de que solo hay una opción por salto. Ve por el camino inverso y verás dos opciones por salto. La cadena de bits en sí misma es solo una dirección para un intervalo de tiempo. Como una tabla hash. –

+1

qué representan los nodos azul claro, verde y amarillo en el gráfico de tiempo. ¿Es eso algún tipo de agrupación/representación a nivel mutli? ¿Tienes algún ejemplo con insertos? – MonkeyBonkey

Cuestiones relacionadas