Neo4j vs. ArangoDB beim Modellieren eines sozialen Netzwerks

7

Ich möchte ein soziales Netzwerk aufbauen. (Z. B. Personen haben andere Personen als Freunde) und ich denke, eine Graphdatenbank würde den Trick besser als eine klassische Datenbank machen. Ich möchte Attribute an den Kanten und auf den Knoten speichern. Sie können json sein, aber es ist mir egal, ob die DB JSON versteht.

ArangoDB kann auch Dokumente speichern und Neo4J ist "nur" eine Graph Datenbank.

Ich hätte gerne einen Benutzerknoten für jede Person 2 zB.

  

Benutzer - [Benutzername] - & gt; Person
  Benutzer - [ID] - & gt; Person

Und es gibt eine Notwendigkeit, dass es einen Index an den Rändern gibt. Ich möchte keine andere Datenbank, daher wäre es nett, ein Bild (Byte-Array) in der Datenbank zu speichern, vielleicht sogar unterschiedliche Größen für jedes Bild / Video. Auch Beiträge und solche sollten in der Datenbank gespeichert werden.

Was ich bekommen habe, ist, dass Neo4j eine herstellerunabhängige Abfragesprache besser unterstützt, aber ich denke, es ist einfacher und besser, den Herstellerstandard zu lernen. Gibt es Empfehlungen, welches Datenbank-Managementsystem besser geeignet ist? Ich werde den Code in Java (und etwas Scala) schreiben.

    
Florian Reisinger 31.01.2016, 19:36
quelle

2 Antworten

23

Sowohl ArangoDB als auch Neo4j sind in der Lage, Ihre Aufgaben zu erfüllen. Beide Projekte haben eine erstaunliche Dokumentation und es ist einfach, Antworten für beide zu bekommen. Beide können von Java aus verwendet werden (obwohl Neo4j eingebettet werden kann ).

Eine Sache, die Ihrem Entscheidungsprozess helfen könnte, ist zu erkennen, dass viele NoSQL-Datenbanken ein viel enger gefächertes Problem lösen, als die Leute zu schätzen wissen.

Sarah Mei hat einen epischen Blogbeitrag über MongoDB , mit einem Beispiel mit einigen Daten über TV-Shows. Aus der Zusammenfassung:

  

Der ideale Anwendungsfall von MongoDB ist noch schmaler als unsere Fernsehdaten.   Das einzige, was gut ist, ist das Speichern beliebiger JSON-Dateien.

Ich glaube, dass Neo4j ein ähnlich enges Problem löst, wie sich zeigt, wenn es üblich ist, Neo4j zu verwenden. neben einige andere Datenspeicher.

Ich weiß nicht, dass das Speichern von Bild- oder Videodaten in ArangoDB oder Neo4j eine gute Idee ist. Ich würde versuchen, es auf einem anderen Server (wie S3) zu speichern und die URL zu dieser Datei in Neo4j / Arango zu speichern.

Es stimmt zwar, dass es möglich ist, Abfragen zu erstellen, die nur eine Graphdatenbank beantworten kann , die Leistung der Graph-Datenbank auf eine beliebige Abfrage variiert stark und kann Ihnen einige ziemlich überraschende Ergebnisse liefern. Zum Beispiel ist hier ein Papier von der International Journal of Computer Science and Information Technologies macht einen Vergleich von Neo4j mit MySQL, Vertica und VoltDB mit Anfragen, von denen man annehmen würde, dass Neo4j bei:

Die Idee ist, dass ein "soziales Netzwerk" nicht automatisch die Überlegenheit oder sogar die Verwendung einer Graphendatenbank impliziert (besonders seit GraphQL ) und Falcor wurden veröffentlicht.

Um Ihre Frage zu Abfragesprachen zu beantworten. Es gibt keine Standardsprache für Graph-Datenbanken.

AQL ist eine Abfragesprache, die eine einheitliche Schnittstelle für die Arbeit mit Schlüssel / Wert-, Dokument- und Diagrammdaten bietet .

Cypher ist eine Graphabfragesprache.

Badwolf Query Language ist eine von SPARQL inspirierte Sprache für temporäre Grafiken.

>

Diese Sprachen existieren, weil sie unterschiedliche Probleme angehen. Die Datenbanken, die sie unterstützen, lösen auch verschiedene Probleme.

Neo4j hat ein Beispiel von "polyglot persistence" auf seiner Site:

Ich denke das ist das Problem, dass ArangoDB und AQL lösen sollen, die Hypothese ist, dass es möglich ist, das zu lösen, ohne schlechter zu sein als Spezialisten wie Neo4j. Bisher sieht es so aus, als könnten sie recht haben .

    
mikewilliamson 02.02.2016, 21:57
quelle
1

Ich verstehe nicht, warum Sie Name und ID getrennt vom Benutzer modellieren möchten? Sie sind nur Eigenschaften, die dem Benutzer gehören. Sie würden lieber Verbindungen zu anderen Benutzern oder Posts oder Likes usw. als Links modellieren.

z.B. ..

%Vor%

Wofür benötigen Sie den Beziehungsindex? Neo4j ist möglicherweise nicht optimal zum Speichern von Bildern, aber die Leute haben es in der Vergangenheit gemacht, aber Videos leider nicht.

Sie können Neo4j sowohl von Java als auch von Scala verwenden, siehe Ссылка

HTH

    
Michael Hunger 02.02.2016 19:48
quelle

Tags und Links