2012-02-24 21 views
24

avere una domanda sui database del grafico, qualcuno può aiutarmi per favore? Sono gestendo un sacco di dati in mysql circa 5 milioni di record al giorno inviati da un dispositivo come router, punti di accesso, bridge wireless . I dati sono in genere dati sanitari, gps, ecc ... questi sono dispositivi sui veicoli. In che modo si gestiscono i dati basati sul tempo nei database del grafico? Qualcuno ha applicato neo4j per i dati basati sul tempo? Sarebbe bello sapere come interrogare gli intervalli di e come procedere sulla modellazione.Dati basati sul tempo in neo4j

Immagino di poter creare un nodo per ogni singola volta che ricevo i dati con le proprietà impostate ogni volta come gps modificati, integrità? Sarebbe un grafico basato sul tempo - Suona bene? bene con 5M righe mysql non si comporta male - ma come il router ottiene nuova funzionalità nuovi dati passa attraverso e ho bisogno di creare nuovi modelli di nuovo che non è male, ma non eccezionale. Desidero qualcosa che sia parzialmente strutturato e rende diverse le cose come il motivo per cui l'utente è stato espulso a causa di un punto di accesso associato al router non attivo. Le mie solite domande sarebbero di sollevare gli avvisi per dire che uno dei dispositivi è inattivo o se c'è un throughput ridotto ecc. Neo4j mi aiuterebbe a sposare queste relazioni meglio di mysql?

Mi piacerebbe sapere cosa ne pensate voi, eventuali commenti + pensieri apprezzati.

+0

Per interrogare profondamente i dati semi-strutturati, vedere Apache Solr. Per applicare le regole (in modo dinamico) ai dati, vedere Drools. – aitchnyu

risposta

16

Fare riferimento al seguente GraphGist per un tutorial su come eseguire lo storage grafico basato sul tempo utilizzando le scale temporali.

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

Time Scale Graph

Nel grafico scala temporale che è modellato sopra, un breve attraversamento percorso da un nodo di colore blu al nodo trasparente colorata costituisce un'identità momento unico in bit.

L'identità tracciata dal percorso rosso è 0 → 1 → 0 → 1 → 0 → 0. Il percorso inverso è 0 → 0 → 1 → 0 → 1 → 0 o semplicemente 001010, un'identità univoca in bit.

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 query Cypher sopra modelli un percorso più breve attraversamento dal nodo di colore blu al nodo trasparente colorato. Questa è una stringa di bit che rappresenta un'identità temporale che può essere ordinata per evento in base alla sua posizione sul sottografo dell'evento della scala temporale.

vedere il tempo dell'evento scala sottografo di seguito:

Time Scale Event Subgraph

L'immagine rappresenta una scala temporale collegato ad una serie di eventi sopra (Met). Gli eventi, rappresentati come nodi triangolari nell'immagine, sono anche collegati a una gerarchia di caratteristiche (John, Sally, Pam, Anne) che sono poi ulteriormente generalizzate in classi (Persona).

Ora è possibile eseguire una query Cypher come quella che ho elencato in precedenza, che quindi ordinerà gli eventi in base al momento dell'occorrenza sotto forma di stringa di bit.Nota: è necessario applicare un timestamp al nodo che recupera l'ora effettiva. Ogni nodo blu rappresenta un evento separato dal tempo ma non necessariamente il tempo reale, solo una rappresentazione degli eventi avvenuti in un ordine.

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 

Le gerarchie nella scala di tempo consentono di eventi di gruppo e di vedere le rappresentazioni a livelli più alti. Quindi selezionando tutti i nodi verdi sotto un nodo arancione si selezionano 4 possibili eventi (rappresentati da nodi blu).

Fatemi sapere se avete domande e assicuratevi di visitare il GraphGist per vedere ulteriori dettagli ed esempi reali dal sottotitolo dell'evento della scala temporale.

+0

Grazie, ma non riesco a capire come viene calcolata la stringa di identità temporale. C'è qualche dettaglio approfondito su questo approccio per favore? – opensourcegeek

+0

L'algoritmo di percorso più breve si prende cura di esso perché stai andando dal basso verso l'alto. Se dovessi andare dall'altra parte, ti imbatteresti in ambiguità. Traccia con il dito il percorso più breve dal nodo blu al nodo trasparente e ti rendi conto che esiste una sola opzione per hop. Vai al contrario e vedi due opzioni per hop. La stringa di bit in sé è solo un indirizzo per un intervallo di tempo. Come un tavolo hash. –

+1

cosa rappresentano i nodi luce blu, verde e giallo sul grafico temporale. È una sorta di rappresentazione di gruppo/a più livelli? Hai qualche esempio con gli inserti? – MonkeyBonkey

Problemi correlati