Architettura per i dati dei social graph con un time frame associato?

2

Aggiungo alcune funzionalità di tipo "social" a un'applicazione esistente. Ci sono un numero limitato di nodi e amp; tipi di bordo. Nel complesso i dati stessi sono relativamente piccoli (50.000 - 70.000 per ogni tipo di nodo) ci sarà un numero di spigoli (relazioni) tra loro (quasi tutti direzionali).

Questo, lo so, è relativamente facile da rappresentare con un archivio SDF (come BrightstarDB) o qualcosa come il Trinity di Microsoft (o molte delle opzioni noSQL).

La cosa che, penso, rende questo un caso d'uso unico è che ogni relazione avrà un tempo associato ad esso (date di inizio e fine). In questo momento, sto pensando di archiviarlo in una struttura relazionale e affrontare i mal di testa di "attraversare il grafico", ma sto cercando suggerimenti su un approccio migliore (sia in termini di struttura dati che di server): / p>

Column
================
From_Node_ID  
Relationship
To_Node_ID
StartDate
EndDate

Qualsiasi suggerimento o idea è ben accetto.

    
posta Jay Stevens 08.10.2012 - 20:10
fonte

1 risposta

4

Dovresti controllare Neo4j-open database grafico sorgente . È un progetto maturo e ben supportato. Ha una documentazione ben scritta e aggiornata. È basato su Java ma ha diverse librerie client per ruby, jruby, php, python, c # ... Funziona come embedded (un file jar) o come server (puoi connetterti e operare su HTTP con la sua struttura basata su REST). E infine, è transazionale basato su disco.

In Neo4j, potresti avere proprietà assegnate ai nodi e anche alle relazioni. Ciò significa che, nel tuo caso, puoi connettere due nodi con una relazione che ha proprietà denominate "StartDate" e "EndDate" o qualsiasi altra proprietà che desideri.

Ad esempio se hai utenti come nodi puoi avere una relazione chiamata "interested_in" e puoi connettere UserA a UserB con la relazione "interested_in" e assegnare StartDate come data di creazione della relazione e successivamente puoi assegnare un EndDate proprietà alla fine della relazione "interested_in".

Può sembrare:

UserA -[interested]-> UserB
      StartDate:20121102
       EndDate:20121107

E gli utenti (intendo i tuoi nodi) potrebbero essere connessi al tuo database esistente dando la proprietà "id" ai nodi Neo4j provenienti dal tuo database esistente. Oppure puoi copiare tutte o alcune proprietà (ad es. Nome, cognome, data di nascita, ecc.) Sui nodi in Neo4j, ma questa volta potresti aver bisogno di sincronizzare i tuoi utenti in Neo4j e nel tuo database ogni volta che si verifica un aggiornamento nel tuo archivi di dati.

Esistono diversi modelli di dati di esempio all'interno della documentazione di Neo4j

C'è anche InfiniteGraph che è simile a Neo4j e dichiarato come "Database Graph distribuito", ma non ho esperienza con esso. Per il tuo caso (50.000 - 70.000 per ogni tipo di nodo) Neo4j sarebbe perfettamente compatibile con il suo supporto fino a miliardi di nodi e relazioni.

    
risposta data 07.11.2012 - 16:26
fonte

Leggi altre domande sui tag