2016-01-31 17 views
7

Desidero creare un social network. (Ad esempio, le persone hanno altre persone come amici) e suppongo che un database grafico faccia il trucco meglio di un database classico. Vorrei memorizzare gli attributi sui bordi e sui nodi. Possono essere json, ma non mi interessa se il DB capisce JSON.Neo4j rispetto a ArangoDB durante la modellazione di un social network

ArangoDB può anche archiviare documenti e Neo4J è "solo" un database Database.

Mi piacerebbe avere un nodo utente un ogni persona 2 es.

Utenti - [nome utente] -> persona
Utenti - [id] -> persona

E v'è la necessità che vi sia un indice sui bordi. Non voglio un database diverso, quindi sarebbe bello memorizzare un'immagine (array di byte) nel database, magari anche con dimensioni diverse per ogni immagine/video. Anche i post e tali devono essere memorizzati nel database.

Quello che ho ottenuto è che Neo4j supporta meglio un linguaggio di query indipendente dalla produzione, ma suppongo che sia più facile e meglio imparare lo standard del produttore. Qualche raccomandazione su quale sistema di gestione del database è più adatto? Scriverò il codice in Java (e qualche Scala).

+0

Cypher sta diventando uno sforzo aperto, vedere opencypher.org –

risposta

22

Sia ArangoDB e Neo4j sono in grado di fare il lavoro che avete in mente. Entrambi i progetti hanno una documentazione straordinaria e ottenere risposte per entrambi è facile. Entrambi possono essere utilizzati da Java (anche se Neo4j can be embedded).

Una cosa che potrebbe aiutare il processo decisionale è riconoscere che molti database NoSQL risolvono un problema molto più ristretto di quanto la gente apprezzi.

Sarah Mei ha scritto un epic blog post about MongoDB, utilizzando un esempio con alcuni dati sugli spettacoli TV. Dal sommario:

Il caso d'uso ideale di MongoDB è ancora più stretto dei nostri dati televisivi. L'unica cosa buona è la memorizzazione di pezzi arbitrari di JSON.

ritengo che Neo4j risolve un problema simile stretta, come dimostra come è comune utilizzare Neo4j alongsidesome other archivio dati.

Non so che la memorizzazione di immagini o dati video è una grande idea in ArangoDB o Neo4j.Vorrei cercare di salvarlo su un altro server (come S3) e salvare l'URL in quel file in Neo4j/Arango.

Mentre è vero che it is possible to create queries that only a graph database can answer, le prestazioni del database grafico su una determinata query varies wildly e possono darti dei risultati piuttosto sorprendenti. Per esempio, qui è a paper from the International Journal of Computer Science and Information Technologies facendo un confronto tra Neo4j vs MySQL, Vertica e VoltDB con le query si potrebbe pensare Neo4j sarebbe incredibile a: Performance comparison

L'idea è che un "social network" non implica automaticamente la superiorità, o anche l'uso di un database di grafici (soprattutto dal momento che sono stati rilasciati GraphQL e).

Per rispondere alla domanda sui linguaggi di query. Non esiste una lingua standard per i database di diagrammi.

AQL è un linguaggio di query che fornisce un'interfaccia unificata per lavorare con dati chiave/valore, documenti e grafici.

Cypher è un linguaggio di query grafico.

Badwolf Query Language è un linguaggio SPARQL ispirato per i grafici temporali.

Queste lingue esistono perché affrontano diversi problemi. I database che li supportano affrontano anche diversi problemi.

Neo4j ha an example di "persistenza poliglotta" sul loro sito:

Using neo4j redis and mongo together

Penso che è il problema che ArangoDB e AQL è fuori da risolvere, l'ipotesi è che è possibile risolvere quello senza essere peggio di specialisti come Neo4j. Finora sembra che siano might be right.

1

Non capisco perché si desidera modellare il nome e l'ID separatamente dall'utente? Sono solo proprietà che appartengono all'utente. Preferiresti modellare le connessioni ad altri utenti, o post o Mi piace, ecc. Come collegamenti.

per esempio ..

(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3}) 

Cosa serve l'indice sulle relazioni per? Neo4j potrebbe non essere ottimale per l'archiviazione delle immagini, ma le persone lo hanno fatto in passato, ma sfortunatamente i video no.

È possibile utilizzare Neo4j sia da Java e Scala, vedere http://neo4j.com/developer/language-guides

HTH

+0

Ciao, l'idea alla base di ciò era avere utenti non, che ha una relazione con tutti (n) gli utenti. Il numero del massimo di (m)> n. Se n è grande, ho ancora bisogno di ottenere rapidamente il nodo degli utenti. Non voglio che sia di complessità n, voglio averlo in complessità del numero di cifre di m. Lo stesso con i nomi utente. Un indice con struttura ad albero si adatterebbe perfettamente. Non so quanto sarà veloce la tua query se hai 1 milione di utenti. Spero che questa spiegazione sembri ragionevole. –

Problemi correlati