Was sind die Anwendungsfälle von graphbasierten Datenbanken (http://neo4j.org/)? [geschlossen]

129

Ich habe viel mit relationalen DBs gearbeitet und mich entschlossen, andere verfügbare Typen auszuprobieren.

Dieses spezielle Produkt sieht gut und vielversprechend aus: http://neo4j.org/

Hat jemand graphbasierte Datenbanken verwendet? Was sind die Vor- und Nachteile einer Usability-Perspektive?

Haben Sie diese in einer Produktionsumgebung verwendet? Was war die Anforderung, die Sie dazu veranlasste, sie zu verwenden?

Khangharoth
quelle
Neo4j wird heute in internationalen Unternehmen unterschiedlich eingesetzt. Neo Technology verfügt über mehrere Whitepaper, in denen jede dieser Anwendungen analysiert wird: 1. Betrugserkennung 2. Echtzeitempfehlungen und soziale Netzwerke 3. Verwaltung von Rechenzentren Weitere Details: bbvaopen4u.com/de/actualidad/…
Chirag Maliwal

Antworten:

187

Ich habe in einem früheren Job eine Grafikdatenbank verwendet. Wir haben neo4j nicht verwendet, es war ein internes Ding, das auf Berkeley DB aufgebaut war, aber es war ähnlich. Es wurde in der Produktion verwendet (ist es immer noch).

Der Grund, warum wir eine Diagrammdatenbank verwendeten, war, dass die vom System gespeicherten Daten und die Operationen, die das System mit den Daten ausführte, genau die Schwachstelle relationaler Datenbanken und genau die Schwachstelle von Diagrammdatenbanken waren. Das System musste Sammlungen von Objekten speichern, denen ein festes Schema fehlt und die durch Beziehungen miteinander verbunden sind. Um über die Daten nachzudenken, musste das System viele Vorgänge ausführen, bei denen es sich um einige Durchläufe in einer Diagrammdatenbank handelte, bei denen es sich jedoch um recht komplexe Abfragen in SQL handelte.

Die Hauptvorteile des Graphmodells waren schnelle Entwicklungszeit und Flexibilität. Wir könnten schnell neue Funktionen hinzufügen, ohne die vorhandenen Bereitstellungen zu beeinträchtigen. Wenn ein potenzieller Kunde einige seiner eigenen Daten importieren und auf unser Modell übertragen möchte, kann dies normalerweise vor Ort vom Vertriebsmitarbeiter durchgeführt werden. Flexibilität half auch beim Entwerfen einer neuen Funktion und ersparte uns den Versuch, neue Daten in ein starres Datenmodell zu komprimieren.

Mit einer seltsamen Datenbank können wir viele unserer anderen seltsamen Technologien entwickeln und so viel geheime Sauce erhalten, um unser Produkt von denen unserer Konkurrenten zu unterscheiden.

Der Hauptnachteil war, dass wir nicht die standardmäßige relationale Datenbanktechnologie verwendeten, was ein Problem sein kann, wenn Ihre Kunden unternehmerisch tätig sind. Unsere Kunden würden fragen, warum wir unsere Daten nicht einfach auf ihren riesigen Oracle-Clustern hosten könnten (unsere Kunden hatten normalerweise große Rechenzentren). Einer aus dem Team hat die Datenbankebene tatsächlich neu geschrieben, um Oracle (oder PostgreSQL oder MySQL) zu verwenden, aber sie war etwas langsamer als das Original. Mindestens ein großes Unternehmen hatte sogar eine reine Oracle-Richtlinie, aber zum Glück kaufte Oracle Berkeley DB. Wir mussten auch viele zusätzliche Tools schreiben - wir konnten zum Beispiel nicht nur Crystal Reports verwenden.

Der andere Nachteil unserer Grafikdatenbank war, dass wir sie selbst erstellt haben. Wenn wir also auf ein Problem stießen (normalerweise mit Skalierbarkeit), mussten wir es selbst lösen. Wenn wir eine relationale Datenbank verwendet hätten, hätte der Anbieter das Problem bereits vor zehn Jahren gelöst.

Wenn Sie ein Produkt für Unternehmenskunden erstellen und Ihre Daten in das relationale Modell passen, verwenden Sie nach Möglichkeit eine relationale Datenbank. Wenn Ihre Anwendung nicht zum relationalen Modell passt, aber zum Diagrammmodell, verwenden Sie eine Diagrammdatenbank. Wenn es nur zu etwas anderem passt, verwenden Sie es.

Wenn Ihre Anwendung nicht in die aktuelle Blub-Architektur passen muss, verwenden Sie eine Diagrammdatenbank oder CouchDB oder BigTable oder was auch immer zu Ihrer App passt und Sie denken, dass es cool ist. Es könnte Ihnen einen Vorteil verschaffen und es macht Spaß, neue Dinge auszuprobieren.

Was auch immer Sie gewählt haben, versuchen Sie, das Datenbankmodul nicht selbst zu erstellen, es sei denn, Sie möchten wirklich gerne Datenbankmodule erstellen.

Will Harris
quelle
66
Tolle Antwort und +1 für "Versuchen Sie nicht, die Datenbank-Engine selbst zu erstellen, es sei denn, Sie möchten wirklich gerne Datenbank-Engines erstellen", rotfl
Michał Chaniewski
32

Wir arbeiten seit über einem Jahr mit dem Neo-Team zusammen und waren sehr glücklich. Wir modellieren wissenschaftliche Artefakte und ihre Beziehungen, was für eine Graph-Datenbank genau richtig ist, und führen Empfehlungsalgorithmen über das Netzwerk aus.

Wenn Sie bereits in Java arbeiten, ist die Modellierung mit Neo4j meiner Meinung nach sehr einfach und bietet die flachste / schnellste Leistung für R / W aller anderen Lösungen, die wir ausprobiert haben.

Um ehrlich zu sein, fällt es mir schwer, nicht an ein Diagramm / Netzwerk zu denken, weil es so viel einfacher ist, als gewundene Tabellenstrukturen zu entwerfen, die Objekteigenschaften und -beziehungen enthalten.

Abgesehen davon speichern wir einige Informationen in MySQL, einfach weil es für die Business-Seite einfacher ist, schnelle SQL-Abfragen auszuführen. Um die gleichen Funktionen mit Neo auszuführen, müssten wir Code schreiben, für den wir momentan einfach nicht die Bandbreite haben. Sobald wir dies tun, verschiebe ich all diese Daten nach Neo!

Viel Glück.

DataRiot
quelle
1
Können Sie mir sagen, welche Art von Informationen Sie in MySQL speichern? Ich werde eine neue Community erstellen. Kann ich alle "regulären" Informationen wie Benutzername, Passwort, Vor- und Nachname usw. in neo4j speichern oder ist sie dafür nicht wirklich geeignet? : o
Muqito
3
Sie können all diese Informationen absolut in Neo speichern. Ich habe einige Systeme erstellt, in denen alle Kontoinformationen in der Grafik enthalten sind. Die Art von Informationen, die ich normalerweise außerhalb des Diagramms speichere, sind große Mengen von Zeitreihendaten, die für die Berichterstellung abgefragt werden müssen.
DataRiot
1
Wenn Sie im .NET / Microsoft-Stack arbeiten, funktioniert Neo4jCLient gut.
Manuel Hernandez
23

Zwei Punkte:

Erstens habe ich bei den Daten, mit denen ich in den letzten 5 Jahren in SQL Server gearbeitet habe, kürzlich mit SQL die Skalierbarkeitswand für die Art von Abfragen erreicht, die wir ausführen müssen (verschachtelte Relationshsips ... Sie wissen ... Diagramme ). Ich habe mit neo4j herumgespielt und meine Suchzeiten sind mehrere Größenordnungen schneller, wenn ich diese Art der Suche benötige.

Zweitens bis zu dem Punkt, dass Diagrammdatenbanken veraltet sind. Ähm ... nein. Als die Leute versuchten, herauszufinden, wie Daten effizient gespeichert und gesucht werden können, erstellten und spielten sie schon früh Datenbankmodelle im Grafik- und Netzwerkstil. Diese wurden so entworfen, dass das physikalische Modell das logische Modell widerspiegelte, sodass ihre Effizienz nicht so groß war. Diese Art der Datenstruktur war gut für halbstrukturierte Daten, aber nicht so gut für strukturierte dichte Daten. Dieser IBM-Typ namens Codd suchte nach effizienten Möglichkeiten zum Anordnen und Speichern strukturierter Daten und kam auf die Idee für das relationale Datenbankmodell. Und es war gut und die Leute waren glücklich.

Was haben wir hier? Zwei Werkzeuge für zwei verschiedene Zwecke. Diagrammdatenbankmodelle eignen sich sehr gut zur Darstellung von halbstrukturierten Daten und den Beziehungen zwischen Entitäten (die möglicherweise vorhanden sind oder nicht). Relationale Datenbanken eignen sich für strukturierte Daten, die ein sehr statisches Schema haben und bei denen die Verbindungstiefen nicht sehr tief sind. Einer ist gut für eine Art von Daten, der andere ist gut für andere Arten von Daten.

Um den Satz zu prägen, gibt es keine Silberkugel. Es ist sehr kurzsichtig zu sagen, dass Graph-Datenbankmodelle veraltet sind und die Verwendung eines Modells 40 Jahre Fortschritt aufgibt. Das ist so, als würde man sagen, dass die Verwendung von C den gesamten technologischen Fortschritt aufgibt, den wir durchgemacht haben, um Dinge wie Java und C # zu erhalten. Das stimmt aber nicht. C ist ein Werkzeug, das für bestimmte Aufgaben benötigt wird. Und Java ist ein Werkzeug für andere Aufgaben.

Turbo
quelle
15

Ich benutze MySQL seit Jahren, um technische Daten zu verwalten, und es hat gut funktioniert, aber eines der Probleme, die wir hatten (aber nicht realisierten), war, dass wir das Schema immer im Voraus planen mussten. Ein weiteres Problem, von dem wir wussten, dass wir es hatten, war die Zuordnung der Daten zu Domänenobjekten und zurück.

Jetzt haben wir gerade angefangen, neo4j auszuprobieren und es sieht so aus, als würde es beide Probleme für uns lösen. Die Möglichkeit, jedem Knoten (und jeder Beziehung) unterschiedliche Eigenschaften hinzuzufügen, hat es uns ermöglicht, unseren gesamten Datenansatz zu überdenken. Es ist wie dynamische versus statische Sprachen (Ruby versus Java), aber für Datenbanken. Das Erstellen des Datenmodells in der Datenbank kann viel agiler und dynamischer erfolgen, was unseren Code erheblich vereinfacht.

Und da das Objektmodell im Code im Allgemeinen eine Diagrammstruktur ist, ist die Zuordnung aus der Datenbank auch einfacher, mit weniger Code und folglich weniger Fehlern.

Als zusätzlichen Bonus ist unser erster Prototyp-Code zum Laden unserer Daten in neo4j tatsächlich schneller als die vorherige MySQL-Version. Ich habe (noch) keine festen Zahlen dazu, aber das war eine nette zusätzliche Funktion.

Aber am Ende des Tages sollte die Auswahl wahrscheinlich hauptsächlich auf der Art Ihres Domain-Modells basieren. Ist es besser auf Tabellen oder Grafiken abzubilden? Entscheide dich für einige Prototypen, lade die Daten und spiele damit. Verwenden Sie Neoclipse, um verschiedene Ansichten der Daten anzuzeigen. Sobald Sie das getan haben, wissen Sie hoffentlich, ob Sie etwas Gutes tun oder nicht.

Craig Taverner
quelle
1
Ab sofort habe ich keine geschäftlichen Anforderungen, um Graphic Db zu verwenden. Dies kann daran liegen, dass ich nichts anderes als RDBMS denke. Es ist möglich, dass ich die meiste Zeit einen quadratischen Stift in einem kreisförmigen Loch versuche. Graph based Db ist für mich eine völlig neue Perspektive. Ich habe ein Scenegraph-basiertes Persistenz-Framework (Java3D, Xith3D) verwendet, aber das war zum Speichern von Graphics-basierten Anwendungen. Dieses ganze Gespräch gibt mir eine neue Perspektive. Jede Anwendungsauffrischung, die eine graphbasierte Datenbank verwendet, damit ich Dinge in Aktion sehen kann!
Khangharoth
4

Ich baue in meiner Firma ein Intranet auf.

Ich bin daran interessiert zu verstehen, wie Daten, die in Tabellen (Oracle, MySQL, SQL Server, Excel, Access, verschiedene Zufallslisten) gespeichert wurden, geladen und in Neo4J oder eine andere Diagrammdatenbank geladen werden. Insbesondere, was passiert, wenn allgemeine Daten vorhandene Daten überlappen, die sich bereits im System befinden.

Ja, ich weiß, dass einige Daten am besten in RDBMS modelliert werden, aber ich habe die Idee, dass das Diagrammmodell besser ist als die Tabellenstruktur, wenn Sie mehrere unterschiedliche Tabellen überlagern müssen.

Zum Beispiel arbeite ich in einer Fertigungsumgebung. Es gibt ein großes Projekt, an dem wir arbeiten. Aufgrund der Komplexität hat jede Abteilung eine separate Excel-Tabelle erstellt, die eine Stücklistenhierarchie (Stücklistenhierarchie) in einer Spalte links und anschließend mehrere Spalten mit Notizen und Überprüfungen durch Einzelpersonen enthält wer hat diese Blätter gemacht.

Eines der Probleme besteht darin, alle diese Notizen in einer "Ansicht" zusammenzuführen, damit jemand alle Probleme sehen kann, die in einem bestimmten Teil behandelt werden müssen.

Das zweite Problem besteht darin, dass eine Excel-Tabelle keine hierarchische Stückliste darstellt, wenn eine gemeinsame Komponente in mehr als einer Unterbaugruppe verwendet wird. Das heißt, wenn jemand einen Hinweis zum P34-Relais in der Zündbaugruppe schreibt, sollte derselbe Kommentar den P34-Relais zugeordnet werden, die in der Motortreiberbaugruppe verwendet werden. Dies tritt in der Excel-Tabelle nicht auf.

Für das Firmen-Intranet möchte ich leicht nach etwas suchen können. B. Daten, die sich auf eine Teilenummer, eine Stücklistenstruktur, eine Telefonnummer, eine E-Mail-Adresse, eine Unternehmensrichtlinie oder ein Verfahren beziehen. Ich möchte dies sogar erweitern, um Computerhardware-Assets und installierte Software zu verwalten.

Ich stelle mir vor, dass Sie, sobald das Informationsnetzwerk gefüllt ist, coole Durchquerungen durchführen können, z. B. "Ich möchte allen, die am XYZ-Projekt arbeiten, eine E-Mail schreiben". Personen wurden mit dem Projekt verknüpft, da sie als Erstellen und Ändern der Daten innerhalb des XYZ-Projekts gekennzeichnet sind. Wenn Sie also das XYZ-Projekt als Suchschlüssel verwenden, wird ein riesiger Satz mit allem, was mit dem XYZ-Projekt zu tun hat, erstellt. Einschließlich Links zu Personen, die das XYZ-Projekt erstellt haben. Die Personenlinks stellen eine Verbindung zu ihren E-Mail-Adressen her. Durch ihre Beteiligung am XYZ-Projekt werden sie in meine E-Mail aufgenommen. Dies steht in krassem Gegensatz zu einer Sekretärin, die versucht, eine Liste der Personen zu führen, die an dem Projekt arbeiten. Wir generieren viele Listen. Wir verbringen viel Zeit damit, Listen zu pflegen und sicherzustellen, dass sie auf dem neuesten Stand sind.

Eine andere coole Durchquerung könnte alle Computer, auf denen eine bestimmte Software installiert ist, nach Version melden. Dieser Bericht kann verwendet werden, um Aufgaben zu generieren, um zusätzliche Kopien alter Software zu entfernen und um Personen zu aktualisieren, die die neueste Kopie benötigen. Es wäre auch nützlich für die Lizenzverfolgung.

Paul Bock
quelle
@ Paul Bock: Ich denke, es wäre wirklich gut, diese Art von Problem mit neo4j zu lösen. Wenn Sie sich der Mailingliste anschließen, können Sie sicher viel Input von der Community erhalten: neo4j.org/community/list
nawroth
2
Ich sehe nicht, wie dies in einer relationalen Datenbank nicht möglich wäre. Vermisse ich etwas
Andrew Harry
5
Ich denke, keine Diskussion über 'NoSQL' konzentriert sich darauf, was mit relationalen Datenbanken nur möglich ist, wenn es um Skalierung geht. Ich denke, es geht oft (zumindest für mich) darum, wie natürlich eine Lösung ist, wie effizient sie bei der Lösung Ihrer Probleme ist usw.
Eelco
4

Hier ist ein guter Artikel, der über die Anforderungen spricht, die nicht relationale Datenbanken erfüllen: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

Es macht einen guten Job darin, (abgesehen vom Namen) darauf hinzuweisen, dass relationale Datenbanken nicht fehlerhaft oder falsch sind. Es ist nur so, dass heutzutage immer mehr Menschen Daten in gängiger Software und auf Websites verarbeiten und dass relationale Datenbanken einfach nicht skaliert werden für diese Bedürfnisse.

Angular University
quelle
3

Es mag etwas spät sein, aber es gibt eine wachsende Anzahl von Projekten, die Neo4j verwenden, die bekannteren, die bei Neo4j aufgeführt sind . Auch NeoTechnology, das Unternehmen hinter Neo4j, hat einige Referenzen auf seiner Kundenseite

Hinweis: Ich bin Teil des Neo4j-Teams

Peter Neubauer
quelle