Was kann ein RDBMS tun, dass Neo4j (und Graph-Datenbanken) kippen können?

9
  

"Eine Graphdatenbank - transformiert a- & gt; RDBMS "

Die Neo4j Seite scheint zu implizieren, dass was auch immer Sie in RDBMS tun können, Sie in Neo4j tun können.

Bevor Sie sich für Neo4j als Ersatz für ein RDBMS entscheiden, müssen einige Zweifel beantwortet werden.

Ich interessiere mich für Neo4j für

  • Fähigkeit, Daten "Schema"
  • schnell zu ändern
  • Fähigkeit, Wesenheiten anstelle von Beziehungen und Normalisierungen auszudrücken
  • ... was zu sehr ausdrucksstarkem Code führt (besser als ORM)

Dies ist eine NoSQL-Lösung, an der ich mich für ihre Funktionen interessiere, nicht für hohe Leistung.

Frage: Gibt es in Neo4j Probleme, die es als RDBMS-Ersatz ungeeignet machen ?

Ich bin besonders besorgt über diese:

  • Gibt es eine DB-Funktion , die ich in Anwendungslogik implementieren muss? (Sie müssen beispielsweise Joins auf der Anwendungsebene für einige NoSQL-DBs implementieren)
  • Sind die Felder " indiziert ", um eine Suche schneller als O (n) zu ermöglichen?
  • Wie gehe ich mit Hot Backups und Replikation um?
  • Probleme mit dem "Ändern" des Schemas oder dem Zulassen, dass Entitäten mit verschiedenen Versionen des Schemas zusammenleben?
aitchnyu 15.01.2012, 18:21
quelle

3 Antworten

2

Dies ist ein extrem breites Thema, das alles von der Modellierung und Implementierung bis hin zu IT und Support umfasst. Es ist unmöglich, all diese Fragen wirklich zu beantworten, besonders ohne Details zu Ihrer Situation. Sie scheinen jedoch Optionen und Möglichkeiten zu erkunden. Also gebe ich nur ein paar allgemeine Denkanstöße als jemanden weiter, der eine Reihe von Systemen implementiert hat.

Jeder scheint zu glauben, dass sein neues Datenbankparadigma ein Ersatz für relationale Datenbanken ist. Also, nimm diese Behauptungen mit einem Körnchen Salz.

Ich mag es, in drei grundlegenden Modellen zu denken: Relational, Document und Graphing. Abhängig von Ihrem Problemraum ist eine oder mehrere davon die richtige Antwort. Ich würde keine finanziellen Transaktionen in irgendetwas tun, außer relational (SQL Based). Wenn Sie ein CMS erstellen, ist eine Dokument-DB der richtige Weg. Wenn meine Anwendung Netzwerke (Straßen, Personen, Verbindungen, Netzwerke usw.) modelliert, verwende ich Neo4J.

Was die Produktionsqualität angeht, gibt es in jeder Kategorie solide Optionen. Relational hat eine Menge. Für Dokumentendatenbanken würde ich MongoDB oder ein höheres JCR System wie Apache Jackrabbit gehen. Für die grafische Darstellung habe ich nur Erfahrung mit Neo4j und es ist für mich felsenfest.

Was auch immer Sie tun, kaufen Sie nicht den Hype, dass "Wir haben die eine Technologie, die all Ihre Probleme löst". Es ist nicht da und es verengt dein Denken.

    
SteveS 23.10.2014 18:03
quelle
1

Ich bin überzeugt, dass Neo4j inzwischen ein guter Ersatz für relationale Datenbanken ist.

  • Es ist ACID-konform
  • Obwohl die Community-Version einige Features wie Hot Backups nicht enthält, hat die Enterprise Edition
  • Sie können Unterstützung dafür erhalten
  • Auf den ersten Blick (und in den neuen Versionen, in denen Sie keine START-Klausel brauchen) kann die Abfragesprache CYPHER fast alles, was SQL kann, tun

aber

  • es ist schwieriger, einen CYPHER-Entwickler zu finden als einen SQL-Entwickler
  • und es hat keinen gleichwertigen Optimierer: es ist wichtiger als bei SQL, wie Sie die Abfrage
  • schreiben

Obwohl es die Replikation unterstützt und Neo es explizit als Big-Data-Produkt vermarktet, kann ich nicht bestätigen, dass es skalierbar genug ist und ich habe keine Sicherheitsaspekte untersucht.

In den letzten Releases (jünger als die obige Frage) kann man Indizes für Labels definieren, die wie Indizes für Tabellen in einer relationalen Datenbank funktionieren und O (log (n)) Lookups erlauben.

(fyi: Neo4j hat keine Tabellen, aber jeder Knoten (~ = Zeile) kann verschiedene Labels haben, vergleichbar mit Gmail-Labels. Dies ist flexibler: Sie brauchen nicht zu wählen, ob Sie Autos und Fahrräder in einen legen Fahrzeugtabelle oder nicht: ein Fahrrad würde sowohl ein: Fahrzeug und a: Fahrradaufkleber haben.)

Um die ursprüngliche Frage zu beantworten: Neo4j unterstützt kaum die Schemaerzwingung . Neo-Advises, die automatisierte Konsistenztests für Ihre Datenbank implementieren, die Sie als Teil Ihres Veröffentlichungszyklus auf Ihrer Akzeptanztest-Instanz ausführen.

    
Dirk Horsten 09.01.2015 19:24
quelle
0

Wenn Sie eine Unternehmensdb wie Oracle verwenden, erhalten Sie viele, viele Funktionen, die möglicherweise Teil von neo sind. Dazu gehören:

  • ACID-Transaktionen
  • Hohe Verfügbarkeit / Backups / Standby
  • Fähigkeit, sql zu verwenden, um Daten auf die effizienteste Weise zu erhalten, die einen kostenbasierten Optimizer verwendet - die DB bestimmt den besten Weg, die Daten auf Grundlage Ihrer spätesten Statistiken
  • abzurufen
  • Skalierbarkeit, Partitionierung
  • Unterstützung
  • Sicherheit

Wenn Sie den Großteil der Funktionalität Ihrer Anwendung selbst in Code implementieren wollen und nicht die Struktur und die erweiterten Funktionen eines rdbms benötigen oder wenn Ihre Datenstrukturen für eine graph basierte Datenbank besser geeignet sind als alle anderen bedeutet Probe neo. Es gibt einen Grund, warum die meisten Unternehmens-Apps einen der traditionellen rdbms-Server verwenden, aber dies ist möglicherweise nicht immer der Fall in der Zukunft

    
kayakpim 29.07.2014 18:50
quelle