0% fanden dieses Dokument nützlich (0 Abstimmungen)
7 Ansichten47 Seiten

These

Das Dokument beschreibt die Entwicklung der Datenbankmodelle im Laufe der Jahre, von den ersten modellen, die auf Dateisystemen basieren, bis hin zu modernen Graphdatenbanken. Es werden die Schlüsselkonzepte relationaler Datenbanken und Graphdatenbanken eingeführt, wobei die Unterschiede auf Ebene des Datenmodells, der Abfragesprachen und der Skalierbarkeit hervorgehoben werden. Außerdem wird Neo4j als Beispiel für eine Graphdatenbank vorgestellt.

Übersetzt von

ScribdTranslations
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
7 Ansichten47 Seiten

These

Das Dokument beschreibt die Entwicklung der Datenbankmodelle im Laufe der Jahre, von den ersten modellen, die auf Dateisystemen basieren, bis hin zu modernen Graphdatenbanken. Es werden die Schlüsselkonzepte relationaler Datenbanken und Graphdatenbanken eingeführt, wobei die Unterschiede auf Ebene des Datenmodells, der Abfragesprachen und der Skalierbarkeit hervorgehoben werden. Außerdem wird Neo4j als Beispiel für eine Graphdatenbank vorgestellt.

Übersetzt von

ScribdTranslations
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

ALMA MATER STUDIORUM - UNIVERSITÄT BOLOGNA

SCHOOL OF ENGINEERING AND ARCHITECTURE

DEPARTEMENT FÜR INFORMATIK-WISSENSCHAFT UND INGENIEURWESEN

CORSO DI LAUREA IN INGEGNERIA GESTIONALE

DIPLOMARBEIT

In

Informationssysteme L

Relationale Datenbanken und Graphdatenbanken im Vergleich:


Analyse der Leistung von MySQL und Neo4j

KANDIDAT RELATORE:
Nicholas Tonna [Link] [Link] Wilma Penzo

Akademisches Jahr 2015/16


Sitzung III

INDEX

1
EINFÜHRUNG…………………………………………………………………….4
KAPITEL 1 DIE GRAPH-DATENBANK……………………………………………….5
1.1 Evolution der Datenbankmodelle im Laufe der Jahre …………………………5
1.2 Die NoSQL-Datenbank…………………………………………………………………7
1.2.1 Kategorien von NoSQL-Datenbanksystemen……………………………………....7
1.3 Was ist ein Graph? …………………………………………………………………..9
1.3.1 Das Property-Graph-Modell……………………………………………………10
1.4 Ich Graph DBMS……………………………………………………………………11

KAPITEL 2 RELATIONALE VS GRAFDBASIS..………………………...13


2.1 Datenmodell…………………………………………………………………13
2.2 Die Beziehungen in relationalen und grafbasierten Datenbanken………………………………..15

2.3 Abfragesprachen in relationalen und Graphdatenbanken………………..17


2.4 Skalierbarkeit………………………………………………………………………...19
2.5 Behandlung von Transaktionen…………………………………………………...20
2.6 Verwaltung der Indizes……………………………………………………………..22
2.7 Vergleich der Datenentwürfe……………………………………………..23
2.8 Vorteile von Graphdatenbanken.....…..…………………………………………..26

KAPITEL 3 NEO4J………………………………………………………………..28
3.1 Architektur………………………………………………………………………28
3.1.1 Speicherstruktur………………………………………………………...29
3.1.2 Cache………………………………………………………………………31
3.1.3 Transaktionsmodul………………………………………………………..32
3.1.4 Neo4j Hochverfügbarkeit (HA)……………………………………………..33
3.1.5 API…………………………………………………………………………34
3.2 Cypher-Abfragesprache…………………………………………………………..35
3.3 Leistungsvergleich zwischen APIs…………………………………………………37
3.4 Confronto prestazionale tra Neo4j e MySQL……………………………………40

FAZIT……………………………………………………………………..45

2
EINFÜHRUNG

3
Das Unternehmensinformationssystem (UIS) ist die Gesamtheit der technischen Mittel, der Verfahren

organisatorischen und personellen Ressourcen für das Management derInformationen


produzierte, verwendete und geteilte von einerUnternehmenwährend der Ausführung derProzesse

UnternehmensDiese Systeme stützen sich heute immer mehr auf die Informationssysteme.
Dank denen es möglich ist, neben der Geschwindigkeit auch die Effizienz zu steigern.
von Informationen, große Mengen von Daten in Datenbanken speichern. Die Datenbanken
Es gibt Archive, in denen die Daten strukturiert gespeichert sind. Die Aufgabe von
Die effiziente Organisation, Abfrage und Manipulation der Datenbank ist einem ... anvertraut.
sistema software chiamatoDBMS(Database Management System).
In der folgenden Thesis werden zwei Arten von DBMS verglichen (die zur Vereinfachung
wir können einfach Datenbanken nennen): iRelationale Datenbanken und iGraph
Datenbank.
Relationale Datenbanken entstanden mit der Einführung des relationalen Modells durch
Teil von Codd[1] im Jahr 1970 und seitdem sind sie die am häufigsten verwendeten Datenbanken. Mit diesem

Das logische Modell hat es tatsächlich ermöglicht, fast die gesamte Gesamtheit der
Anwendungsfälle, die in der realen Welt auftraten. Mit dem Aufkommen des Internets und
Mit dem Aufkommen der sozialen Netzwerke hat sich die Datenverbindung und die Anzahl der
Informationen und Anfragen zu verwalten; dies hat die Grenzen des Modells ans Licht gebracht
relational in handling large amounts of highly connected data or in storing data
nicht strukturiert.
Aus diesem Grund wurde eine neue Kategorie von Datenbanken entwickelt, die als NoSQL (Nicht nur)

SQL), darunter die Graphdatenbanken, die ein flexibleres Modell und eine garantieren können
bessere Skalierbarkeit. Bisher haben sich diese Modelle nicht sehr verbreitet in der Welt.
kommerziell, die weiterhin an den relationalen Modellen festhält, und nur einige große
Unternehmen haben begonnen, in solche Technologien zu investieren (zum Beispiel Google,

Facebook und Ebay.


Das Ziel dieser Arbeit wird es sein, zu verstehen, welche Vorteile entstehen können.
Datenbanken auf Graphenbasis übertragen. Der Vergleich wird auch aus der Perspektive erfolgen
leistungsbezogen die Kosten der Antwort auf einige Anfragen überprüfen. Die Datenbanken
verwendet werden, um die Modelle zu testen, sind MySQL für relationale Datenbanken und Neo4j für die

database a grafo, quest’ultimo DBMS sarà approfondito nel terzo capitolo della tesi.
KAPITEL 1 DIE GRAFDAtei

4
1.1 Entwicklung der Datenbankmodelle im Laufe der Jahre

ABBILDUNG 1Entwicklung der verschiedenen Datenbankmodelle.

Negli ultimi quarant’anni si sono sviluppati diversi modelli di database.


Der Begriff "Datenbankmodell" wurde erstmals 1976 eingeführt und bezeichnet
das logische/konzeptionelle Instrument, auf dessen Grundlage dann das entwickelt wird
Datenbank basiert auf drei Hauptmerkmalen: einer Reihe von Strukturtypen
Daten, Regeln, ein Satz von Operationen.
Datenbankmodelle sind grundlegend, um Graphdatenbanken zu verstehen und zu nutzen.
Wie in Abbildung 1 [1] dargestellt, werden in den Rechtecken die ...
Verschiedene Modelle, die sich im Laufe der Jahre entwickelt haben, bestimmen die Theorien.
daraus haben sich die verschiedenen Einflüsse entwickelt und die Pfeile.

5
Die ersten Modelle verwendeten hauptsächlich dateisystembasierte Strukturen und daher
sul modello fisico, in particolare parliamo del modello gerarchico (hierarchical
Datenbankmodell) und des Netzwerkdatenbankmodells.
Eine erste Entwicklung erfolgt mit der Entwicklung der relationalen Datenbank gemäß der
Formulierung von Codd [1], der die Idee hatte, die logische Ebene von derjenigen zu trennen
physisch.
Dieses Modell, das auf der Mengenlehre, der Prädikatenlogik und
strukturiert um das mathematische Konzept der Beziehung, ist es bis heute eines der Modelle
viel häufiger verwendet, da es viel intuitiver und ausdrucksvoller für die Strukturierung von Daten ist,

auch wenn es jedoch oft langsamer ist und mehr Massenspeicher


im Vergleich zu anderen Modellen.

Infolge des relationalen Modells entwickelt sich auch dank des Einflusses von
dieser letzte verbunden mit dem Einfluss der Graphentheorie, das semantische Modell, das versucht
um den konzeptionellen Level sehr nah am semantischen Bereich zu halten.
In den 80er Jahren wurde das objektorientierte Modell eingeführt, dessen Hauptidee war
die Darstellung der Daten als Sammlungen von Objekten [1].
Neben letzterem erscheinen auch die Graphmodelle, die
versuche, das Anwendungsgebiet in Form eines Graphen darzustellen, indem ich, wie
Wir werden später zahlreiche Vorteile sehen, insbesondere in Bezug auf die Leistung.
Das grafbasierte Modell wurde aufgrund seiner Wirksamkeit im Laufe der Jahre stark weiterentwickelt.

Beeinflussung neuer Modelle mit immer flexibleren Eigenschaften.


Unter diesen ist das semi-strukturierte Datenbankmodell zu finden, das angenommen wurde.
1997 von Buneman [1], der vorschlägt, Daten mit einer flexiblen Struktur zu behandeln.
wie die Webseiten oder die Dokumente.
Infine XML ist ein Software-System, das von Bray[1] im Jahr 1998 eingeführt wurde und es den Daten ermöglicht, zu

im XML-Format gespeichert werden.


I graph database sono stati sviluppati principalmente sulla base di due modelli: RDF e
Eigenschaftsgraphen, die in den nächsten Kapiteln vertieft werden.
Basierend auf diesem wurde 2007 Neo4j entwickelt.
1.2 I Datenbank NoSQL

6
Wie wir gesehen haben, trat die relationale Datenbank bereits in den 70er Jahren auf.
und auch aus diesem Grund ist es und war es sehr stark genutzt. Gerade wegen dieser Eigenschaft

Die verlängerte Nutzung wurde sehr entwickelt, aber trotz dessen ist die Datenbank
Relational ist nicht für die Unterstützung der horizontalen Skalierbarkeit heute konzipiert worden.

eine immer nützlicher und notwendiger werdende Eigenschaft [3].

Mit Skalierbarkeit ist die Fähigkeit einer Datenbank gemeint, zu wachsen oder zu schrumpfen in
Funktion der Bedürfnisse und Verfügbarkeiten und kann zwei Arten sein:
Vertikale Skalierbarkeit

Horizontale Skalierbarkeit
Die vertikale (Scale-up) betrifft die Fähigkeit eines Systems, sich zu verbessern.
Hardwaremerkmale der einzelnen Komponenten, während die horizontale (Scale Out)
kann beispielsweise erreicht werden, indem einem Rechner eine zusätzliche Einheit hinzugefügt wird
Berechnung der gleichen Leistung, die die geleistete Arbeit des Ersten unterstützen und erweitern kann.

so die Potenziale.
NoSQL-Datenbankmanagementsysteme sind Software-Systeme, die es ermöglichen,
Daten speichern und organisieren, ohne auf das relationale Modell zu setzen und
die horizontale Skalierbarkeit ermöglichen (effizienter und weniger kostspielig als die
Vertikale Skalierbarkeit). Der Begriff NoSQL bedeutet "nicht nur SQL". SQL ist der
Sprache, die häufig in relationalen Datenbanken verwendet wird und oft übernommen wird
Darstellung des gesamten relationalen Paradigmas.
Die NoSQL-Datenbanken werden in vier Hauptkategorien unterteilt.

1.2.1 Kategorien von NoSQL-Datenbanksystemen[3]

Schlüssel-Wert-Speicher

Dieses Modell ist sicherlich durch sehr einfache Datenstrukturen gekennzeichnet.


Im Wesentlichen werden die Datensätze gespeichert und abgerufen, indem ein Schlüssel verwendet wird, der

definiert eindeutig den Datensatz, um hervorragende Leistungen zu ermöglichen


(insbesondere beim Lesen). Die Werte folgen keinem festen Muster, aber jeder kann
verschiedene Felder (oder Attribute) besitzen, wie wir in Abbildung 2 sehen.

7
ABBILDUNG 2 Darstellung des Key-Value Stores

Dokumenten-Datenbank
Dokumentenorientierte Datenbanken speichern Daten nicht in Tabellen mit
campi uniformi per ogni record come nei database relazionali, ma ogni record
es wird als ein Dokument gespeichert, das bestimmte Merkmale aufweist.
Dem Dokument kann eine beliebige Anzahl von Feldern mit beliebigen
Länge, diese Felder können auch mehrere Datenstücke enthalten.
Questa caratteristica fa sì che non ci sia uno spreco di spazio, poiché i record
sie sind nicht verpflichtet, einem festen Schema zu folgen und sind daher gezwungen, auszufüllen

auch die Attribute, die keinen Wert "null" haben.

Spaltenorientierte Datenbank

Dieses Modell wurde entwickelt, um eine große Menge an Daten zu verarbeiten und
Merke die Datentabellen in Form von Datenspalten statt als
righe di dati. Il “Column-Oriented database” può essere visto come una
Entwicklung des „Key-Value-Stores“, da es im Gegensatz dazu zwei oder
mehr Ebenen der Indizierung. Der äußere Schlüssel (Zeilenschlüssel) wird verwendet für

jede "Spaltenfamilie" identifizieren und jede von ihnen definiert wiederum


wo die Daten auf der Festplatte gespeichert sind.

Graphdatenbank
Die Graphdatenbank ist eine auf der Graphentheorie basierende Datenbank und sehr nützlich.
um mit Leichtigkeit Millionen von Knoten zu durchqueren, die durch Beziehungen miteinander verbunden sind.

8
Diese Datenbanken sind äußerst skalierbar und flexibel und sind heute sehr
vor allem aufgrund der Entwicklung von sozialen Netzwerken, die de facto sind
Grafen mit Millionen von Knoten.
Im Folgenden werden wir dieses letzte Modell näher untersuchen.

1.3 Was ist ein Graph?

Wie die Mathematik eine wichtige Rolle in der Informatik spielt (zum Beispiel viele
Konzepte wie Kryptographie, Automatisierung und auch andere einfachere Konzepte wie
Die mathematische und boolesche Logik verbinden eng die Mathematik und die
Informatik), so ist die Graphentheorie ein weiteres sehr verwendetes Konzept in diesem
Wissenschaft. Viele Datenstrukturen wie die hierarchischen Organisationen, die Diagramme von

Flüsse und soziale Netzwerke werden durch Graphen dargestellt [3].


Die Graphentheorie befasst sich mit dem Studium vongrafi, oggetti discreti che permettono di
eine große Vielfalt von Situationen und Prozessen zu schematisieren und oft deren zulassen
die Analyse in quantitativen Begriffen undAlgorithmik, was sie in die Lage versetzt, sich anzupassen und

rappresentare ogni tipo di dato.


Ein Graph ist eine Menge von Elementen, die Knoten genannt werden, die durch Kanten miteinander verbunden sind.

Die Knoten im Graphen repräsentieren die Entitäten und die Kanten die Beziehungen zwischen den Knoten.

Formeller gesagt bezeichnet man eine Graphen als ein geordnetes Paar G = (V,E), wobei V die Menge der

nodi und E ist die Menge der Kanten. Eine Kante ist ein Paar (a,b) von Vertices, mit a∈V und
b ∈ V.

Nehmen wir das bekannte soziale Netzwerk Twitter als Beispiel, in Abbildung 3 sehen wir ein

kleines Netzwerk von Twitter-Nutzern.


Schon dieses einfache Beispiel (Abbildung 2) zeigt uns die Ausdruckskraft der Grafiken und von
wie intuitiv sie zu verstehen sind. Beziehungen sind der Schlüssel zum Verständnis des
semantischer Kontext, uns in diesem Fall sagend, wer von wem gefolgt wird.

9
FIGUR 3 Ein kleines Graf, das eine Gruppe von Followern mit hinzugefügtem darstellt
die Nachrichten von einer dieser.

1.3.1 Das Property-Graph-Modell


Die bekannteste Variante des Graphmodells ist das Property-Graph-Modell.
Der Property Graph hat die folgenden Eigenschaften:
Enthält Knoten und Beziehungen;

Die Knoten enthalten Eigenschaften in Form von Schlüssel-Wert-Paaren, wobei "Schlüssel" ist

Die Identifikationsnummer der Eigenschaft, "Wert" hängt hingegen vom Typ ab.
Datum;
Die Knoten können mit einem oder mehreren "Labels" gekennzeichnet werden. Die Labels geben an, dass

Rolle der Knoten innerhalb der Datenbank (Labeled Property Graph Modell);
Beziehungen haben einen Namen und sind gerichtet, und sie haben immer einen Knoten.
der Ausgangspunkt und ein Zielknoten;

Auch Beziehungen können Eigenschaften besitzen.

Wenn die Beziehungen effizient gespeichert werden, können zwei Knoten


teile beliebige Zahlen oder Arten von Beziehungen, ohne die Leistung von zu opfern
Überquerung des Graphen.

10
Eine wichtige Eigenschaft, die man sich bezüglich der Property Graphs merken sollte, ist jedoch

Bezüglich aller Grafen ist, dass eine Relation immer zwei Knoten verbindet und dass
Die Eliminierung eines Knotens führt zur Eliminierung der damit verbundenen Beziehungen.
Viele Menschen finden das Property Graph Model intuitiv und leicht verständlich, tatsächlich,
sebbene semplice, può essere usato per descrivere la stragrande maggioranza dei casi
d’uso grafici, in modo tale che diano indicazioni utili sui nostri dati.

FIGURA 4Ein Baustein des Property Graph

1.4 Ich graph DBMS

Un Graph Database Management System è un sistema per la gestioni dei database.


Das ist einSoftware-Systementwickelt, um die Erstellung, die Manipulation zu ermöglichen
und die effiziente Abfrage vonDatenbank.
Graph-DBMS sind in der Regel so konzipiert, dass sie mit den Systemen verwendet werden.

transaktionale OLTP. Folglich sind sie normalerweise optimiert, um zu fördern die


Leistungen und konzipiert für die Integrität und Verfügbarkeit der Transaktionsoperationen.
Es gibt zwei Komponenten von Graphdatenbanken, die man im Hinterkopf behalten sollte, wenn man ...

eine Technologie dieser Art analysieren:

11
Datenspeicherung
Einige Graph DBMS verwenden nativen Graphspeicher[4], das heißt, sie verfügen über eine
Plattform zur Speicherung von Informationen, die entwickelt und optimiert wurde, um Daten zu speichern

in Form eines Graphen. Verschiedene Graph-DBMS übersetzen und speichern die Informationen in

Modi differenti, ovvero innerhalb einer relationalen Datenbank, einer orientierten Datenbank
den Objekten oder einer anderen Art von Datenspeicher.

Verarbeitungseinheit
Wir können die Graph DBMS in zwei Kategorien unterteilen, wobei die erste aus all denen besteht,
die die indexfreie Nachbarschaft nutzen, native Verarbeitung Engine (leistungsfähiger); die
seconda quelli che non la usano, processing engine non nativo.
Ein Graph erfüllt die indexfreie Nachbarschaft, wenn das Vorhandensein einer Beziehung zwischen zwei Knoten

kann nur überprüft werden, indem man einen der Knoten besucht, und erfordert dagegen keinen Zugang zu einem

äußerer globaler Index. Das bedeutet, dass jedes Element einen Zeiger enthält
direkt zu seinen benachbarten Elementen, was die Suchanfragen über den Index überflüssig macht.

FIGUR 5 Eine Übersicht über die Modelle einiger heute vorhandener Graphdatenbanken
Markt.

12
KAPITEL 2 RELATIONALE VS GRAPH DATENBANK

2.1 Datenmodell

Das Relationale Modell


Das relationale Modell ist ein logisches Modell zur Darstellung oder Strukturierung.
deinDatensag einDatenbankimplementiert DatenbankmanagementsystemeDBMS),
dettí perciòsistemi di gestione di basi di dati relazionaliRDBMS) [2].
Dieses Modell entwickelt sich um das Konzept der Beziehung (oder Tabelle). Alle Daten
Innerhalb einer relationalen Datenbank werden sie durch Tabellen dargestellt und die
Die Spalten solcher Tabellen werden formal als Attribute der Relation bezeichnet, während die
Rigen-Tupel.

ABBBILDUNG 6 Beispiel für Beziehungen (Tabellen) in einer relationalen Datenbank.

Ein weiteres zentrales Konzept in diesem Modell ist die Normalisierung, die ein ...

Verfahren, das relationalen Datenbanken ermöglicht, beliebige Daten zu speichern


ohne Redundanz oder Informationsverlust und gewährleistet somit die Konsistenz der
Daten.
Sobald das Datenmodell konsistent entworfen wurde, werden die Daten
können eingegeben und manipuliert werden, indem die standardisierte strukturierte Sprache verwendet wird

relationale Datenbanken, das heißt SQL (Structured Query Language).

13
Das relationale Modell, obwohl es ein mittlerweile standardisiertes und weit verbreitetes Modell ist,

stellt verschiedene Probleme dar:

In Strukturen mit hochgradig vernetzten Daten, wie zum Beispiel Netzwerken oder den
Sozial, die Daten müssen unter Verwendung einer hohen Anzahl von Tabellen gespeichert werden.

Probleme verursachend aufgrund der hohen Anzahl an Join-Operationen


(sehr kostspielige Operationen zur Kombination der Tupel, die zu zwei gehören
Tabellen sind notwendig, um die Daten abzurufen; tatsächlich haben die JOIN-Operationen
geringe Leistung und nicht skalierbar mit der zunehmenden Anzahl von Tupeln.
Ein weiteres Problem dieses Modells betrifft seine Ineffizienz im
Daten, die semi-strukturiert und unstrukturiert sind, speichern (folgen keinen Strukturen)

fisse), die in Tabellen gespeichert werden, in denen der Großteil der


Die Spalte wird leer sein [3].
Die relationale Datenbank unterstützt sehr strenge Schemata, da alle Tupel in einer
Die Beziehungen folgen demselben Schema und haben daher die gleichen Spalten, weshalb
Oft bleiben viele Spalten teilweise gefüllt [3].

Das Graphmodell
Un modello a grafo usa nodi e archi per rappresentare e archiviare l'informazione. La
Darstellung der Daten durchGrafibietet eine Alternative zu derrelationales Modell.
Derzeit sind die Hauptreferenzmodelle für die Implementierung von Datenbanken
Grafo sind zwei:
Das Property-Graph-Modell (bereits im vorherigen Kapitel beschrieben)

Das RDF (Resource Description Framework)

Das Resource Description Framework ist ein Modell, das vom World Wide Web vorgeschlagen wurde.

Konsortium (W3C), eine internationale nichtstaatliche Organisation, die sich mit


Ziel ist es, alle Potenziale des World Wide Web zu entwickeln.
Dieses Modell basiert auf drei Objekten:
- Ressource (Risorse): bezeichnet das, was durch RDF beschrieben wird;
- Eigenschaft (proprietà): bezeichnet eine Eigenschaft, ein Attribut oder eine
Beziehung, die verwendet wird, um eine Ressource zu beschreiben;

14
- Aussage (Ausdruck): ist das Element, das eine Ressource beschreibt
besteht aus einem Subjekt, das die Ressource darstellt, einem Prädikat, das
esprime la Property e da un oggetto chiamato Value che indica il valore della
Eigentum.
Jede Instanz dieses Modells besteht daher aus einer Menge von Tripeln des Typs
Subjekt-Prädikat-Objekt, die eine Struktur in Form eines Graphen bilden, in der die Ressourcen sind

Darstellen durch Knoten und die Prädikate durch Bögen.

Die beiden Modelle (Property Graph Model und RDF) sind nicht vollständig identisch, auch
da normalerweise der Übergang von einem zum anderen sehr intuitiv ist. Für beide gibt es
spezifische Abfragesprachen, aber nur für RDF gibt es einen Standard
anerkannt inSPARQL[2].
Aus struktureller Sicht sind Graphdatenbanken im Gegensatz zu relationalen Datenbanken
sind viel flexibler: Jeder Knoten und jede Beziehung im Graph hat seine eigenen Eigenschaften
ohne dabei einem starren Schema wie im Fall der relationalen Datenbank zu folgen,
In diesem Schema wird das Problem der Nullwerte nicht auftreten und
Um Platz für diese Werte zu schaffen.

2.2 Die Beziehungen in relationalen und graphbasierten Datenbanken

Beziehungen in relationalen Datenbanken


Viele Jahrzehnte lang haben Entwickler versucht, verkettete und semi-
strukturiert innerhalb von relationalen Datenbanken, aber da die relationalen Datenbanken waren
Ursprünglich zur Codierung von Tabellstrukturen entworfen, konnten Schwierigkeiten auftreten.
bei der Modellierung dieser Art von Daten [4].
Wenn von Beziehungen in relationalen Datenbanken die Rede ist, ist damit die Art und Weise gemeint, wie die

Tabellen, die verschiedene Instanzen enthalten, stehen in Beziehung zueinander; um dies zu tun, nutzen sie

Der Join, der in der SQL-Sprache ein Operator ist, der es ermöglicht, die Tupel zu kombinieren.
die zwei Tabellen durch die Operation der Verbindung (oder Vereinigung) derAlgebra
relational.
Ein Nachteil von Beziehungen in relationalen Datenbanken ist, dass sie haben
semantische Ambiguität, da sie beispielsweise das Gewicht und die Stärke der nicht spezifizieren

15
Beziehungselbst und zudem sind die Join-Operationen sehr aufwendig, insbesondere
all’interno di contesti altamente connessi, come network e social (molto diffusi ai
heutige Tage)
Die Kosten einer Datenbankabfrageoperation steigen signifikant an
seconda del numero di join che vengono eseguiti. Si ponga ad esempio il caso che un
Soziales Netzwerk, strukturiert wie in Abbildung 7, um die Freunde eines Subjekts zu finden.
In der Tabelle "Person" innerhalb der Datenbank registriert. Bezüglich dieses Typs
Für die Abfrage ist eine Join-Operation erforderlich, da die Tabelle "Person"
Sie wird sich mit dieser "PersonFriend" auseinandersetzen müssen, daher würde die Abfrage nicht Ergebnis bringen.

besonders kostspielig oder schwierig, da es nur einen einzigen Join zwischen den Tabellen erfordert,
Die Anzahl der Tupel kann durch die WHERE-Klausel reduziert werden.

ABBILDUNG 7 Beispiel eines einfachen Datenschemas zu Personen in einem sozialen Netzwerk


Netzwerke und ihre entsprechenden Freundschaften.

Wenn man beispielsweise die Freunde der Freunde eines bestimmten Subjekts finden möchte,
Die Operation würde zwei Joins erfordern, und daher würden die Abfragen syntaktisch und
computationally more complex and would consequently increase the cost of the
Antwort.

Beziehungen in Graphdatenbanken
Wenn es verbundene Daten gibt, die semantische Abhängigkeiten zwischen den Entitäten umfassen, dann der

Das grafbasierte Modell ist viel geeigneter, da die Beziehungen, auf die sie sich beziehen können.
Als assoziierte Eigenschaften behalten sie diese semantischen Abhängigkeiten bei.

16
Im Falle von sozialen Netzwerken, ein einfaches Beispiel für hochgradig verbundene Daten und Netzwerke

Semi-strukturiert, die Struktur des Modells wird wie in Abbildung 8 erscheinen.

FIGUR 8 Einfaches Beispiel eines sozialen Netzwerks.

In diesem sozialen Netzwerk sind die Verbindungen zwischen den Entitäten nicht einheitlich für das gesamte

Domäne. Der Graph bietet ein reichhaltigeres Bild eines Netzwerk-Kontexts, tatsächlich aus der Abbildung
8 Wir können intuitiv verstehen, wer der Freund von wem ist und wer der Kollege von wem ist (durch)

die Beziehung FREUND_VON oder KOLLEGE_VON) und auch wenn diese Beziehung
wird erwidert.
Dank der Beziehungen ist es außerdem möglich, den Graphen zu "durchqueren", also sich zwischen den
Knoten, die durch Beziehungen verbunden sind. Daten durch diese Überschneidungen abfragen.
es verhindert, dass kostspielige Gruppierungsoperationen auf dem gesamten Datensatz durchgeführt werden.

come invece avviene con le operazioni di join nei database relazionali.

2.3 Abfragesprachen in relationalen und graphenbasierten Datenbanken

Relationale Datenbanken zum Abfragen, Einfügen, Ändern und Löschen von Daten im
Datenbank, verwenden den SQL-Standard.

17
SQL ist eine deklarative Sprache, die auf relationaler Algebra basiert. Mit diesem
Sprache ist möglich:
creare e modificare Datenbankschemata(DDL -Datenbeschreibungssprache);
einfügen, ändern und verwalten von gespeicherten Daten (DML -Datenmanipulation

Sprache);
Daten abfragen (DQL -Datenabfragesprache);
Erstellen und Verwalten von Werkzeugen zur Kontrolle und zum Zugang zu Daten (DCL -Datenkontrolle

Sprache).

Die SQL-Datenabfrage basiert auf den drei Hauptbefehlen SELECT, FROM,


e WO.
Ein Beispiel für eine Abfrage, die sich auf das soziale Netzwerk des vorhergehenden Absatzes bezieht.

(Abbildung 5) könnte sein:

Diese Abfrage wird uns als Ergebnis Bobs Freunde zurückgeben.

Die Stärke der Graph-Abfragesprache zeigt sich in ihrer Fähigkeit, zu durchqueren


effektiv den Graphen, der bedeutet, jeden Knoten des Graphen nacheinander zu durchlaufen, um
Mittel der Beziehungen, die sie verbinden.
Graphdatenbanken besitzen im Gegensatz zu relationalen Datenbanken keine eigene Sprache von
interrogazione standard, i linguaggi più utilizzati e famosi sono Cypher e Gremlin
[12].
Cypher ist eine deklarative Sprache (also eine Art von Sprache, die sich fokussiert auf
über die Beschreibung des betrachteten Eigentums, wobei der Algorithmus unbestimmt bleibt
usare per trovare la soluzione) inspiriert von SQL, das speziell für Neo4j ist, während Gremlin ein

Graphtraversalsprache entwickelt von Tinkerpop, die Abfragen unterstützt


deklarativ und imperativ. Neo4j bietet auch native Java-APIs für die Abfrage.

18
die Daten. Diese weisen einen geringeren Abstraktionsgrad im Vergleich zu den beiden Sprachen auf.
Oben erwähnt, aber eine ausgezeichnete Effizienz.

2.4 Skalierbarkeit

Die Skalierbarkeit ist ein sehr wichtiges Merkmal, das eine Nutzung bestimmt
Effizienz der Datenbank [3] und bis heute ist eines der wichtigsten Anforderungen für
moderne Anwendungen, da sie mit Millionen von Daten umgehen müssen.
Die Skalierbarkeit gibt es in zwei Arten: vertikal und horizontal. Um die erste Art zu erreichen, ist

Es ist notwendig, die Kapazitäten der Maschine zu erhöhen, was Kosten verursacht.
elevato. Aus diesem Grund ist horizontale Skalierbarkeit viel gebräuchlicher, und man kann
Erhalten durch zwei Techniken: Replikation, Sharding.

Replikation bedeutet, dass die Daten auf mehreren Knoten eines Computernetzwerks repliziert sind.
dadurch die Daten robuster machen. Tatsächlich, wenn ein Knoten ausfällt, gehen die verlorenen Daten verloren.

possono essere recuperati da un altro nodo. Inoltre incrementa le operazioni di


Lesen, da die Lesevorgänge auf verschiedene Knoten verteilt werden können. Für die
Bei Schreibvorgängen wird die Leistung hingegen schlechter, da die Daten müssen
auf allen Knoten geändert werden.
Sharding ist hingegen eine komplexere Methode zur Verteilung von Daten, die
vereinbart ihre Datenpartitionierung basierend auf verschiedenen Kriterien auf verschiedenen Knoten.

Das bedeutet, dass die Daten nicht auf einem einzelnen Computer gespeichert sein müssen, sondern

verteilte auf mehrere Knoten. Sharding ist eine sehr flexible Technik, bei der die
Knoten können hinzugefügt werden, wenn die Daten wachsen, und entfernt werden, wenn

Sie verringern sich, ohne die Anwendung zu betreffen.

Die Skalierbarkeit in relationalen Datenbanken stellt ein Problem dar, aufgrund von Operationen der

Tatsächlich ist aufgrund der Fragmentierung der Daten eine große Notwendigkeit gegeben.
Kommunikation zwischen den Knoten, die eine größere Anzahl von Beitritten erfordern wird, und daher ein Kostenaufwand.

größer; das ist der Grund, warum NoSQL-Datenbanken die Operationen nicht unterstützen
di join.

19
Die Skalierung der Daten eines Graphen durch Sharding kann komplizierter sein als
distribuire i dati negli altri database NoSQL anche se comunque è possibile [6].
Dies liegt an der sehr vernetzten Natur von Graphen. Wenn ein Graph verteilt wird,
Im Wesentlichen ist es besser, so weit wie möglich Beziehungen zu vermeiden, die mehrere umfassen.

Knoten des Rechnernetzes.

2.5 Behandlung der Transaktionen

In der Informatik ist eine Transaktion eine Abfolge von Operationen, die abgeschlossen werden kann oder

Mit einem Erfolg oder einem Misserfolg: Im ersten Fall muss das Ergebnis der Operationen ...
Im zweiten Fall muss der Zustand wieder konsistent gemacht werden.
vor dem Beginn der Transaktion [2].
In relationalen Datenbanken genießen Transaktionen vier Eigenschaften, die als Eigenschaften bezeichnet werden.

ACID:
Atomarität: Die Transaktion ist in ihrer Ausführung unteilbar, sodass sie daher
entweder vollständig oder gar nicht (Ausführungen sind nicht zulässig)
Teilweise);
Konsistenz: Es ist die Fähigkeit einer Transaktion, die Einschränkungen nicht zu verletzen.
Referenzen und Integrität der Datenbank, sodass jeder Client, der darauf zugreift,
Die Datenbank liest die letzten aktualisierten Daten.

Isolation: es ist die Garantie, dass das DBMS die Transaktionen ordnungsgemäß ausführt.
unabhängig und isoliert, sodass sie sich nicht gegenseitig stören, wenn
Die Ausführung dieser ist gleichzeitig.
Haltbarkeit: Die im Datenbank gespeicherten Daten werden auf der Festplatte gespeichert und
nach dem Neustart der Datenbank verfügbar.
Diese Eigenschaften ermöglichen es Transaktionen, korrekte und sichere Operationen auszuführen.
auf der Grundlage von Daten.

Die Konsistenz wird in relationalen Datenbanken durch das zentrale Sperrsystem gewährleistet.
grazie al quale i dati sono bloccati fino a quando non si raggiunge uno stato stabile.
Die neuen NoSQL-Datenbanken, einschließlich einiger Graphdatenbanken, haben sich für eine bessere entschieden.

schwache Form von Konsistenz (Eventuelle Konsistenz) zugunsten einer größeren

20
Verfügbarkeit der Daten (Hochverfügbarkeit). Diese Datenbanken folgen einem Paradigma
genannt BASE (Basically Available, Soft-state, Eventually consistent).
Der Unterschied zwischen den beiden Systemen ist durch das CAP-Theorem erklärbar, das vorgeschlagen wurde

Erstmals von Eric Brewer [3] im Jahr 2000 behauptet, dass ein verteiltes System
zur gleichen Zeit nur zwei der folgenden Garantien bereitstellen:
Konsistenz: Sie liegt vor, wenn in einer verteilten Umgebung alle
Server haben die gleichen Daten;
Verfügbarkeit: Sie liegt vor, wenn das System die Garantie bietet, dass
Zugang und Benutzerfreundlichkeit der Daten;

Partitionstoleranz: gewährleistet, dass das System


Funktionsfähiger Rimanga trotz des Verlusts von Nachrichten; in diesen Fällen einige
Knoten können von anderen isoliert bleiben und keine weiteren Informationen erhalten.

aktualisiert (sind partitioniert).

Wenn man sich entscheidet, die Partitionstoleranz zu vernachlässigen, können Operationen durchgeführt werden.

lesen und schreiben, bis alle Knoten online sind und es sicher ist, dass
i dati siano consistenti. Il problema si presenta quando si crea partizione tra i nodi, a
Ursache, warum die Daten die Synchronisierung verlieren. Um die Partition zu vermeiden, ...
sie könnten alle Daten in eine einzige Maschine eingeben, aber das würde führen zu
sicherlich Beschränkungen in der Skalierbarkeit.

Falls man sich entscheidet, auf die Verfügbarkeit zu verzichten, wird das System für die
Änderungsoperationen, wird die Konsistenz gewährleisten, indem die Daten für einen
gewisse Zeit. Das System bleibt nicht verfügbar, bis die Änderung nicht erfolgt ist.
auf alle Knoten verteilt. Dies ist die Idee, die den ACID-Eigenschaften folgt.
Falls stattdessen entschieden wird, die Konsistenz zu bestrafen, dann
die Verfügbarkeit der Daten und die Toleranz der Partitionierung bestimmen, sodass die Knoten
sie bleiben online, auch wenn sie nicht mit anderen kommunizieren können. Die Daten werden jedoch
synchronisiert nur nachdem die Partition gelöst wurde (es handelt sich genau um das Eventual)
Konsistenz
I problemi di inconsistenza di solito risultano più difficili da trattare. D’altro canto, i
Systeme benötigen nicht ständig Konsistenz.

21
Eine Besonderheit von Graphdatenbanken ist, dass, obwohl sie NoSQL-Datenbanken sind, einige
Modelle unterstützen die ACID-Eigenschaften, und das ist der Fall bei Neo4j, wie wir im
nächstes Kapitel.
2.6 Verwaltung der Indizes

Wenn man eine Graphstruktur in einer relationalen Datenbank speichern möchte, ist es
Es ist notwendig, wie folgt vorzugehen:

Erstelle eine ENTITY VERTICES für die Eckpunkte mit den Eigenschaften:

- ID des Scheitels;
- Variablenattribute für die im Knoten enthaltenen Informationen (Name usw.).
Erstellen Sie eine EDGES-Entität für die Kanten mit den Eigenschaften:

- ID des Bogens;
- VERTEX_FROM: ID del vertice di partenza;
- VERTEX_TO: ID des Zielknotens;
- Zusätzliche Informationen über die Beziehung zwischen den Spitzen.

Zusätzliche Indizes erstellen:

- Indizes auf EDGES.VERTEX_FROM;


- Index auf EDGES.VERTEX_TO.
Die Erstellung von Indizes ist nützlich, um einen schnelleren Zugriff auf die Daten zu ermöglichen. Die Indizes

Am häufigsten verwendet werden der B-Baum, B+-Baum oder Hash-Indizes.

Dieser Ansatz ist jedoch, obwohl er korrekt ist, mit einem schwerwiegenden Problem verbunden:

Mit der Erhöhung der Zeilen (insbesondere in der Tabelle der Spitzen) steigt die Lesegebühr.
aumenta sensibilmente. Il costo per una lettura tramite indice B-Tree infatti è
dell'ordine di O(log(n)), dove n = numero totale di vertici del grafo. Per esaminare gli
M archi in uscita dal vertice di partenza haben wir daher eine Berechnungskosten C von
C=(Mlog(n)) [7].
Grafdatenbanken bieten eine andere Lösung im Vergleich zu relationalen Datenbanken, indem sie die

Die Technik wird als indexfreie Nachbarschaft bezeichnet. Tatsächlich, um eine Lesung zu erreichen...

Jeder einzelne Punkt hat einen Ausgangs-Kantenindex, und das ermöglicht es zu


Überprüfen Sie die Existenz einer Kante zwischen zwei Knoten des Graphen, indem Sie einfach einen besuchen.

die beiden Ecken, und somit ohne die Notwendigkeit eines globalen Index [8]. Mit anderen Worten, jedes

22
nodo porta le informazioni sui nodi a cui è relazionato, rendendo indipendente le
Leistungsfähigkeit der globalen Datenbankgrößen und mögliche Graphanalyse
schwer mit globalen Indizes zu verwalten.
2.7 Vergleich zwischen Datenentwürfen

Bei der Gestaltung einer Datenbank können wir drei Phasen unterscheiden:
Die konzeptionelle Gestaltung, deren Ziel es ist, die Daten der Realität darzustellen (oder

Dominio) d'interesse in termini di un modello formale indipendente dal


DBMS. Die Beschreibung durch dieses Modell erzeugt ein Schema
konzeptionell.
Die logische Gestaltung hat das Ziel, das zu verwandeln
konzeptionelles Schema, das aus der vorherigen Phase eingegeben wurde, in ein Schema
logische Beschreibung der Daten, die zum gewählten DBMS-Typ gehören (also
beschrieben mit einer formellen Sprache, die vom DBMS unterstützt wird.

Die physikalische Gestaltung, in der das physikalische Schema implementiert wird, das in

Die Praxis besteht in einem logisch optimierten Schema in Bezug auf die Vorhersagen.
der Anwendungsbelastung.

Um die beiden Arten von Datenbanken (relationale und graphbasierte) zu vergleichen, kann man das einfache ...

Beispiel für das Design einer Datenbank zur Verwaltung eines Rechenzentrums, das heißt
ein Datenverarbeitungszentrum, dessen Struktur in Abbildung 9 dargestellt werden kann
[4].

23
FIGUR 9 Beispiel eines Rechenzentrums.

Entwurf für relationale Datenbanken


Die Planung wird von einer Phase der Anforderungserhebung und -analyse vorangegangen, die
definiert die Daten und die durchzuführenden Operationen. Die meiste Zeit
Dieser Übergang ist informell und erfolgt oft durch Skizzen an der Tafel.
Fortsetzung einer Diskussion zwischen dem Fachexperten und dem Daten- und Systemarchitekten.
Am Ende dieser Phase erhält man eine informelle Beschreibung der Anforderungen.
im natürlichen Sprachgebrauch, aus dem ein Glossar von Begriffen und manchmal ein
Diagramm wie das im vorherigen Beispiel (Abbildung 9).

Die nächste Phase ist das konzeptionelle Design, das das Ergebnis der Sammlung übersetzt.
die Anforderungen in einer formalen Beschreibung darzustellen, um typische Mehrdeutigkeiten zu beseitigen

von Sätzen in natürlicher Sprache ein konzeptionelles Schema zu erstellen. Sie wurden
verschiedene konzeptionelle Modelle vorgeschlagen, aber das bekannteste und am häufigsten verwendete ist sicherlich das

Entitäts-Beziehungsdiagramm (E-R).
In Bezug auf das vorherige Beispiel kann das folgende E-R-Diagramm erstellt werden:

24
ABBILDUNG 10 Ein Entity-Relationship-Diagramm für ein Rechenzentrum.

Da es gibt keine DBMS, die direkt auf den Konzepten eines operieren können.
Das E-R-Schema muss in relationale Schemata übersetzt werden, indem man also von einem ...

konzeptionelles Schema in ein logisches Schema. Diese Übersetzung erfolgt nach einfachen
Standardregeln und wird oft automatisch durchgeführt. Im logischen Modell sind die Daten
sind in normalisierten Tabellen strukturiert, um Redundanz zu eliminieren und mit dem
SQL-Sprache.
Die letzte Phase, die der eigentlichen Implementierung vorausgeht, ist die der
physikalische Entwurf, in dem die logischen Schemen in Abhängigkeit von der
Die voraussichtliche Arbeitsbelastung kann beispielsweise manchmal nützlich sein, um zu verbessern

die Effizienz und die Geschwindigkeit der Datenbank, eine Denormalisierung der Daten, Technik die

Es sieht die Duplizierung von Daten vor, um eine bessere Leistung zu erzielen.

Entwurf für Graphdatenbanken


Relationale Datenbanken mit ihren strengen Schemata sind gewiss kein Werkzeug
besonders gut geeignet für die Unterstützung schneller Veränderungen, daher ist ein
ein Modell, das eng mit dem Bereich abgestimmt ist, das die Leistung nicht opfert und das
unterstützt die Entwicklung, während die Integrität der Daten bei schnellen Änderungen gewahrt bleibt

Änderungen; dieses Modell ist das Graphmodell.


Die Phase vor der Planung, nämlich die Anforderungserhebung, stellt sich als
ähnlich der relationalen. Nach dieser Phase weicht die Methodik ab, da sie anstelle von

25
Mit einem Entity-Relationship-Diagramm verwendet man einen Graphen, um zu ...
eine genaue Darstellung des Bereichs [4].
In Bezug auf das Beispiel ist es möglich, das Graphmodell in Abbildung 11 zu erstellen.
Im Beispiel sieht man, wie die Knoten mit Eigenschaften angereichert wurden und wie die Kanten
geben Sie den Typ der Beziehung an, die zwischen den Knoten besteht (die Beziehungen sind in diesem Fall

orientieren und sie können auch Attribute besitzen.


Es ist auch erkennbar, dass das konzeptionelle Modell in Graphdatenbanken ansprechender ist.
espressivo und ähnlich der Struktur des Domänen (Abbildung 9) im Vergleich zu dem des relationalen
Datenbank.
Schließlich wird, nachdem die Knoten und Beziehungen in der Graphdatenbank erstellt wurden, das Modell getestet ...

Überprüfen, ob es geeignet ist, bestimmte Abfragen auszuführen, und die Fehler beheben oder
eventuelle Ungenauigkeiten. Die nachfolgenden Änderungen der Struktur des Graphen sind
Ermöglicht durch die Flexibilität des Graphmodells.

FIGUR 11 Beispiel eines Graphen, der ein Rechenzentrum beschreibt.

2.8 Vorteile von Graphdatenbanken

26
Leistungen
Einer der größten Vorteile, die durch die Graphdatenbank gebracht werden, ist die deutliche Verbesserung

der Leistung im Falle von stark verbundenen Daten, nicht nur im Hinblick auf die Datenbanken
relational, aber auch relativ zu den NoSQL.
Im Vergleich zu relationalen Datenbanken, wo die Leistung der Abfragen abnimmt mit
Mit dem Anstieg der Daten bleiben die Leistungen in Graph-Datenbanken konstant, auch
Mit der Zunahme der Daten, da die Abfragen aufgrund der indexfreien Adjazenz sich beziehen
nur zu einem Teil des Graphen. Dies führt dazu, dass die Zeit nur proportional ist zu
Teil des Graphen zu durchqueren.

Flexibilität
Graphdatenbanken haben im Gegensatz zu relationalen Datenbanken, die ein festes Schema besitzen, keine.

schemalos. Dies ermöglicht ihm, sich an die Entwicklung des Anwendungsbereichs anzupassen
ohne die gesamte Datenbank neu zu gestalten und zu konvertieren. Der Graph ist natürlich
Additiv, daher ist es möglich, neue Knoten, Beziehungen und Teilgraphen zu einem hinzuzufügen.
Struktur, ohne die Funktionen und Abfragen, die für die vorherige Version erstellt wurden, zu stören.

del-Datenbank.

Es gibt jedoch auch nachteilige Aspekte der Graphdatenbank, einer davon ist die
Es ist ein Fakt, dass viele Graphdatenbanken (wie zum Beispiel Neo4j) relativ sind.
„junge“ und haben ein niedrigeres Reifestadium im Vergleich zu relationalen Datenbanken
Mit Reife beziehen wir uns darauf, wie gut das System getestet wurde: Tatsächlich ist, wenn ein System
stato testato ein größeres Mal, bedeutet das, dass es stabiler ist und es wurde
Trovati und korrigiert eine größere Anzahl von Fehlern.
Relational-Datenbanken haben über Jahrzehnte Speicherunterstützung bereitgestellt,
dies hat sie reif und stabil gemacht, außerdem haben sie auch eine Standardsprache.
SQL, das sicherstellt, dass die Unterstützung für eine Implementierung der Datenbank möglich ist

angewendet und auch für andere Implementierungen genutzt.


Darüber hinaus verfügt ein relationales Datenbanksystem wie MySQL über umfassende Unterstützung

Multiutente, während einige Graphdatenbanken, wie zum Beispiel Neo4j, dies nicht haben.

innerhalb ihrer Struktur einen Mechanismus zur Verwaltung der Sicherheit und der

27
Multi-User-Zugriff (die Zugriffskontrollliste wird nur auf Anwendungsebene verwaltet)
[9].

KAPITEL 3 NEO4J

Neo4j [5][11] è un database a grafo open source, completamente transazionale,


unterstützt von Neo Technology, verwendet das Property-Graph-Modell und ist entwickelt
vollständig in Java.
Neo4j hat die folgenden Hauptmerkmale:
Verwende ein Graphmodell, um die Daten darzustellen;

Transaktionen folgen den ACID-Eigenschaften.


Es kann bis zu mehreren Milliarden Knoten, Beziehungen und Eigenschaften speichern;

Es verfügt über deklarative und ausdrucksstarke Abfragesprachen;


Es verfügt über eine hohe Abfragegeschwindigkeit durch Graphdurchquerungen;
Es ist schemalos;

Es verfügt über keine kontrollierte Zugangsrichtlinie;

Può essere usato sia in modalità server che embedded.


Um diesen letzten Punkt zu klären, eine Datenbank im Embedded-Modus ist in
Softwareanwendung, während die Datenbank im Servermodus ein eigenständiger Prozess ist.
auf die man zugreifen kann überRESTindem ich Abfragen mache und die Daten aus der Ferne erhalte.

28
REST (Representational State Transfer) können wir als die Gesamtheit der Methoden definieren
Um Ressourcen (zum Beispiel Seiten) zu erhalten (Get), zu senden (Post) und zu löschen (Delete)

web) über das Protokoll http.

3.1 Architektur

ABILDUNG 12 Architektur von Neo4j.

Die Grundstruktur eines Neo4j-Servers kann wie in Abbildung 12 dargestellt werden.


Wenn man sich seine Architektur ansieht, fallen an der Basis die Scheiben auf, in denen die Daten gespeichert sind.

werden in Form von Datendateien gespeichert, ein Caching-System zur Beschleunigung


die Datenwiederherstellung, das Transaktionsmodul, das das Transaktionsprotokoll und das beinhaltet

Transaktionsmanagement, durch das die ACID-Eigenschaften der


Transaktionen, ein Modul HA (High Availability), das die Clusterfähigkeit charakterisiert
des Systems und schließlich im oberen Layer die APIs (Application Programming Interface)
die die Schnittstelle bereitstellen [10].

3.1.1 Speicherstruktur

Alle Daten und Informationen des Graphen, die der Server speichert und verwaltet, werden
Gespeichert in einer Reihe von Dateien, die den Namen Store File tragen, welche
werden in einem einzigen Ordner gespeichert, dem Datenbankordner.
Die Daten zu den Knoten in der Neo4j-Datenbank werden in einer Datei namens gespeichert.

[Link] innerhalb der Festplatte. Jedes Element, das in den Store-Dateien gespeichert ist für

29
Die Knoten haben eine feste Speicherdauer, die als Datensatz bezeichnet wird (dies geschieht
in den meisten Datei-Stores von Neo4j).

ABBILDUNG 13 Struktur des Knotendatensatzes.

In der Abbildung sehen wir den Datensatz der Store-Datei für die Knoten, und jeder Datensatz hat einen

Länge von 9 Byte. Das erste Byte stellt ein Flag dar, das uns sagt, ob der Datensatz
obligatorisch oder nicht, um die Daten eines Knotens zu speichern, die folgenden vier Bytes

repräsentieren die ID der ersten Beziehung, die mit dem Knoten verbunden ist, die restlichen vier Bytes.

Stellen stattdessen die ID der ersten Eigenschaft des Knotens dar.

Die feste Länge ermöglicht eine schnellere Suche der Knoten innerhalb des Dateispeichers.
Zum Beispiel, wenn wir einen Knoten mit ID 100 haben, reicht es aus, bis zu 900 Byte zu scrollen.

innerhalb der Datei und so kann die Datenbank superschnelle Suchen zu einem Kosten
unterlegen

ABBILDUNG 14 Struktur des Beziehungsdatensatzes.

Die Beziehungsdaten in der Neo4j-Datenbank werden in einer Datei namens gespeichert


[Link] innerhalb der Festplatte. Wie der Datei-Speicher der Knoten, so ist auch dieser

Ein Datensatz fester Größe (wie in Abbildung 12) mit 33 enthält die Beziehungen.
Byte. Jedes Protokoll enthält neben dem Flag die IDs des Start- und Zielknotens, die
Zeiger auf den Beziehungstyp, die Zeiger auf den vorherigen und nächsten Datensatz

30
Beziehung des Ausgangs- und Zielknotens. Die letzten 4 Bytes enthalten hingegen die ID der
prima Eigenschaft der Beziehung.

ABBBILDUNG 15 Struktur des Eigenschaftsdatensatzes.

I dati delle proprietà sono memorizzati nel file [Link]


Disco. Auch die Datensätze der Eigenschaften sind 33 Byte lang und wie gewohnt ist das erste
Das Byte wird vom Flag belegt. Die Success-Bytes sind in der Reihenfolge vom Zeiger zum Typ belegt.

di proprietà, dal puntatore all’indice, da un blocco di memorizzazione e infine l’Id


der nachfolgenden Eigenschaft des Elements, zu dem es gehört. Der Block von
Die Speicherung enthält den Eigenschaftenwert nur, wenn der Wert von
kleine Abmessungen jedoch, falls die Eigenschaft aus Array oder lang besteht
Stringhe, diese Werte werden in dynamicStore-Datensätzen mit einer Größe von 125 gespeichert.
Byte-Inhalte in entsprechenden Store-Dateien ([Link], falls sie vorhanden sind)

stringhe, [Link] im Falle, dass es sich um Arrays handelt).

3.1.2 Cache

Mit dem Begriff Cache bezeichnet man einen kleinen Speicherbereich und
äußerst schnell, das die am häufigsten verwendeten Informationen speichert, in
um sie schnell wiederzulesen.
In Neo4j gibt es zwei verschiedene Arten von Caches:

Dateipuffer-Cache;
- Objektcache;

Il File Buffer Cache può essere anche chiamatolow level cacheofile system cache.
Dieser letzte agiert auf den Datei-Speichern, die dauerhaft auf der Festplatte gespeichert sind.

Laden von Teilen davon in den Speicher mit dem Ziel, die Leistung zu verbessern

31
Schreiben und Lesen. Der Dateisystem-Cache verbessert die Leistung, indem er in den Caches speichert und
Die permanente Speicherung auf der Festplatte bis zur Rotation des logischen Protokolls verschieben

(d.h. die Archivierung der alten Protokolldateien). Dieses Verhalten ist


sicher, da alle Operationen dauerhaft im logischen Protokoll aufgezeichnet sind,
il quale può infatti essere utilizzato per recuperare i file dell'archivio in caso di crash.
Jede Datei wird vom Dateisystem-Cache in eine Anzahl von Regionen unterteilt von
gleiche Dimensionen und läd die am häufigsten genutzten Speicherfile-Regionen in den Speicher. Wenn
Eine nicht im Cache gespeicherte Region übersteigt in der Anzahl der Nutzungen eine im Cache gespeicherte.

prima rimpiazza la seconda (si segue la politicaleast recentemente usata) [5].

Der Objektcache kann als High-Level-Cache bezeichnet werden.


Dieses letzte handelt auf hoher Ebene, indem es einzelne Knoten, Beziehungen und deren speichert.
Eigenschaften, in Form von Objekten mit einer Darstellung, die darauf ausgerichtet ist, die APIs zu unterstützen

di Neo4j und das Durchqueren des Graphen, was es ermöglicht, die eigene zu verbessern
Durchschnittsgeschwindigkeit. Die Lesevorgänge können 5 bis 10 Mal betragen.
schneller als die der Dateipuffer-Cache[5].
Während die Datensätze der Beziehungen auf der Festplatte den Großteil der
Informationen und die der Knoten enthalten nur Verweise auf ihre erste Beziehung,
Im Object Cache kehrt sich die Situation um. Hier halten die Knoten tatsächlich die Referenzen zu
Alle Beziehungen und die Aufzeichnungen der Beziehungen werden erheblich vereinfacht, indem
nur die ID der Eigenschaften.

3.1.3 Transaktionsmodul

All’interno del transaction module è possibile trovare il transaction management e il


Transaktionsprotokolle, die dafür sorgen, dass die ACID-Eigenschaften der Transaktionen gewährleistet sind.

Neo4j.
Gerade weil diese Eigenschaften garantiert werden, wird die Transaktionsverwaltung in
Neo4j ist ziemlich ähnlich dem, was in relationalen Datenbanken passiert, in denen
Rollback werden durchgeführt (eine Operation, die es ermöglicht, die Datenbank auf einen
stato korrekt vorher zu einem möglichen Fehler) im Falle, dass die Transaktion nicht durchgeführt wurde.

korrekt abgeschlossen und Locks verwendet (echte "Lese- und Schreibsperren")

32
um den Zugang zu einer gemeinsam genutzten Ressource in einer Multitasking-Umgebung zu begrenzen

die Isolation und Konsistenz der Lese- und Schreiboperationen garantieren.


Transaktionen in Neo4j können andere verschachtelte Transaktionen enthalten.
(verschachtelte Transaktion), von denen jede, wenn sie nicht ordnungsgemäß abgeschlossen wird, kann

comportare il rollback della transazione madre a cui appartiene e di tutte le altre


Transaktionen, die von letzterer abhängen.

Das Transaktionsprotokoll ist ein Prozess, der das „Tagebuch“ verwaltet, also einen stabilen Speicher.

wo die durch die Transaktionen durchgeführten Aktionen aufgezeichnet werden. Diese Komponente ist

sehr wichtig, um die Datenbank auch im Falle eines konsistenten Zustands zu halten
fehlerhaft, denn ohne das Transaktionsprotokoll wäre es unmöglich, das Rollback durchzuführen.

3.1.4 Neo4j Hochverfügbarkeit (HA)

FIGUR 16Neo4j HA-Clusterstruktur

Neo4j HA ist eine Master/Slave-Clusterstruktur, die entwickelt wurde für


das System in die Lage versetzen, einen kontinuierlichen Datenbereitstellungsdienst anzubieten.

Neo4j HA bietet hauptsächlich die folgenden Funktionen an:

33
Unafaul-tolerant database architecture[5], dove diversi database (Slave)
können so konfiguriert werden, dass sie eine exakte Kopie einer einzelnen Datenbank sind

(Master) e ciò permette al sistema di essere completamente funzionale sia in


Lesen, das in Schreiben im Falle eines Hardwarefehlers, mit anderen Worten im Falle von
Eine Maschine, die den Cluster zusammensetzt, „geht kaputt“.

Bietet eine horizontal skalierende, überwiegend lesende Architektur, die es ermöglicht, den

System zur besseren Handhabung von Leseeinheiten als es ein Einzelner tun kann
Datenbank.

Die Neo4j-Clusterstruktur besteht aus einem Load Balancer, dessen Funktion darin besteht, dass
die Lese- und Schreibbefehle von den Anwendungen zu empfangen und sie zuzuweisen
Server. Der Load Balancer führt normalerweise die Schreibvorgänge auf dem Master aus, während
Die Slaves werden anschließend über das HA-Cluster mit dem Master synchronisiert.
Protokoll, damit jeder Knoten aktuelle und konsistente Daten halten kann. Im Falle
Stattdessen wird die Schreiboperation auf einem Slave durchgeführt, diese wird zuerst erfolgen.
mit dem Master synchronisiert und wird nicht als abgeschlossen betrachtet, bis es nicht vorhanden ist.

stato das COMMIT (Signal, dass die Transaktion erfolgreich abgeschlossen wurde) auf beiden
Ich Server. Dieser Ansatz ist sicherlich sicherer als der erste (da die
Transaktionen werden auf zwei Servern anstelle von einem ausgeführt), aber andererseits ergibt sich auch

langsamer. Die Leseoperationen sind viel einfacher (da sie keine ...
Transaktionen) und werden von jedem Knoten bearbeitet [10].

Der Zookeeper-Dienst ist eine Komponente, die den Status der Dienste überwacht und im Falle von

Fehler von der Master-Node, es wählt einen neuen aus. Normalerweise, wenn dies
Es geschieht, dass ein neuer Master gewählt wird und innerhalb weniger Sekunden aktiv wird und

Während dieses Zeitraums kann keine Schreiboperation stattfinden, sie werden


blockiert.
Der Cluster-Manager kümmert sich stattdessen um die Verwaltung des Zookeper-Dienstes und derselben Last.

Balcer, indem er die Konfigurationsanweisungen für den Cluster bereitstellt und hervorhebt, was sie sind

die verfügbaren Datenbankinstanzen.

3.1.5 API

34
Systemprogrammierer interagieren selten direkt mit dem Dateisystem oder
mit Caches, da sie es vorziehen, andere Tools zu verwenden: die APIs.
Die Abkürzung API steht für Application Programming Interface und entspricht einer Menge
die dem Programmierer zur Verfügung stehenden Verfahren, die es ermöglichen, mit einem
Technologie, ohne die internen Mechanismen der Technologie kennen und verwalten zu müssen.
Frage.
Neo4j stellt verschiedene APIs zur Verfügung:

Core Java API. Es ist eine imperative Java API, die es ermöglicht zu exécutieren

Abfrage-, Erstellungs-, Lösch- und Änderungsoperationen über


Java-Code. Da es imperativ måste man die Struktur des Graphen nachbilden.
innerhalb des Java-Codes.
Traversal API. Es ist eine deklarative Java-API, mit der man abfragen kann
der Graph, indem einfach die allgemeinen Einschränkungen angegeben werden, die es ermöglichen, zu begrenzen

die Überquerung (zum Beispiel angeben, welche Art von Beziehung


folgen und die Tiefe, mit der man den Graphen durchquert.
Cypher ist eine deklarative Sprache von Neo4j, die von SQL inspiriert ist und zusätzlich zu
sehr einfach zu sein, ermöglicht das Durchführen von ausdrucksstarken und effizienten Abfragen

(Wir werden es im nächsten Abschnitt genauer beschreiben).

Wenn Neo4j im Servermodus läuft, spricht man von REST-APIs. Die APIs, von denen es heißt,
Das Server wird eingerichtet, um es den Clients zu ermöglichen, Anfragen im JSON-Format (JavaScript) zu senden.

Objektnotation, ein Format, das für den Austausch von Daten zwischenAnwendungenclient-
Server) hauptsächlich über das Protokoll HTTP.

3.2 Cypher-Abfragesprache

Cypher [4][5] ist, wie bereits erwähnt, eine deklarative Sprache, die von SQL inspiriert ist, die

erlaubt es Benutzern oder Anwendungen, die Datenbank unter Nutzung des Konzepts abzufragen
dipattern(sottografi). Der Vorgang, mit dem ein spezifisches Muster gefunden wird
Innerhalb des Graphen wird es als Graph-Mustererkennung bezeichnet.

35
Come la maggior parte dei linguaggi query, Cypher è composto da clausole le più
Wichtig sind sicherlich die Klauseln START, MATCH und RETURN.
Ein Beispiel für eine Abfrage könnte sein:

START A = node:people(name:‘Luca’)
MATCH (A)-[:KENNT]->(B)-[:KENNT]->(C); (A)-[:KENNT]->(C)
GIB B, C ZURÜCK;

- START
Geben Sie einen oder mehrere Ausgangspunkte an, die Knoten oder Beziehungen sein können, innerhalb von

des Graphen. Sie werden durch Recherchen über einen Index oder mehrere erhalten.
selten, mit direktem Zugang zu einem Knoten oder einer Beziehung über eine ID.
Im Beispiel wird ein Knoten über den Index mit dem Namen "people" gesucht, der besitzt
Die Eigenschaft "name" mit dem Wert "Luca". "A" hingegen wird der Identifikator dieses Knotens sein.

(o nodi) von Ausgang und wird verwendet, um auf den Ausgangsknoten innerhalb zu verweisen
unsere Anfrage.

-SPIEL
Diese Klausel ermöglicht es einem Benutzer oder einer Anwendung, die Muster zu beschreiben, die
werden dann von der Datenbank gefunden.
Um diese Muster zu beschreiben, werden ASCII-Zeichen (amerikanischer Standardcode für)
Die Kodierung der Zeichen). Runde Klammern werden verwendet, um die Knoten anzuzeigen, und
Paare von Bindestrichen (-), gefolgt von dem Größer- oder Kleinerzeichen (die die Richtung anzeigen)

der Beziehung) um die Beziehungen zu zeichnen (- - > und <- -). Zwischen den Strichen, innerhalb
delle parentesi quadre e prefissato dai due punti, è presente il nome del tipo di
Beziehung.
Das Muster unseres Beispiels wird wie folgt aussehen:

36
FIGURA 17 Muster der MATCH-Klausel: (A)-[:KNOWS]->(B)-[:KNOWS]->(C);
(A)-[:KENNT]->(C).
Dieses Muster, das die drei Knoten (A, B, C) durch die Beziehungen „KENNT“ verbindet
könnte theoretisch viele Male innerhalb des Graphen vorkommen. Auch deshalb
Tatsächlich wird die START-Klausel verwendet, die in unserem Fall "A" nur einengt.
Die Knoten, die das Attribut "name" mit dem Wert "Luca" besitzen.
Dank der MATCH-Klausel werden die kostspieligen JOIN-Operationen vermieden.

-RÜCKGABE
Diese Klausel legt fest, welche Knoten, Beziehungen und Eigenschaften zurückgegeben werden müssen.
In Bezug auf das Beispiel sind die interessierenden Knoten die, die mit den Identifikatoren verbunden sind.

‚B‘ und ‚C‘.


Andere von Cypher verwendete Klauseln sind:
-WO: bietet Bedingungen zum Filtern der aus dem Match erhaltenen Ergebnisse;

-EINNEUEN: Erstelle Knoten und Beziehungen;

-LÖSCHEN: entfernt Knoten, Beziehungen und Eigenschaften;

-SET: legt die Werte fest, die den Eigenschaften zugeordnet sind;

-UNION: vereint die Ergebnisse von zwei oder mehr Abfragen;

-MIT: Teilen Sie eine Abfrage in mehrere separate Teile.

3.3 Leistungsvergleich zwischen APIs

37
Wie in den vorherigen Abschnitten zu sehen ist, verfügt Neo4j über verschiedene Methoden zur Abfrage und

Interagieren mit den Daten: Core Java API, Traversal API und Cypher.

In diesem Absatz werden die Leistungen der


verschiedene Methoden zur Abfrage der Neo4j-Datenbank.
Das Basismodell des Tests [10] ist in Abbildung 18 dargestellt:

FIGUR 18Basismodell des Tests


In diesem Modell wird es zwei Arten von Knoten geben: die Knoten, die von den Autoren (author) gebildet werden und die

Knoten der Publikationen oder Essays (Paper). Die Essays werden mit den Autoren verbunden sein (oder

all’autore) die sie durch beziehungsorientierte [author] geschrieben haben, während


Falls eine Veröffentlichung auf eine andere verweist, werden diese sich miteinander verbinden.

con le reletionship [ref].


Die Tests werden auf Datenbanken mit zwei unterschiedlichen Größen und durch zwei durchgeführt.
Abfrage mit unterschiedlicher Komplexität zusammengefasst in der folgenden Tabelle.

Testergebnisse
Nachfolgend listen wir die Ergebnisse der verschiedenen Tests auf, die sich jeweils voneinander unterscheiden.

für die gewählte Datenbankgröße (Data1 oder Data 2) und/oder für die verwendete Abfragetyp
(Komplexität1 oder Komplexität2). Um die Skalierbarkeit des Systems zu zeigen, wird ein
Anzahl der Abfragen (die wir uns erinnern, können vom Typ Complexity1 sein oder
Komplexität 2) die von 10 bis 9000 reicht, die Antwortzeit auf solche Anfragen wird ausgedrückt in

Sekunden.

38
1. Data1 e Complexity1:

ABBILDUNG 19Testergebnis
Daten1 e Komplexität2:

FIGUR 20Ergebnis Test 2

3. Daten2 e Komplexität1:

FIGUR 21Testergebnis 3
4. Daten2 e Komplexität2:

39
FIGURA 22Ergebnis Test 4
Bei der Analyse der Testergebnisse bieten die Core Java APIs den schnellsten Ansatz.
Beim Abfragen der Datenbank ist Cypher deutlich der Langsamste.
Die Motivation liegt darin, dass Cypher eine deklarative Sprache verwendet,
Im Abfragecode wird nur ausdrücken, "was" man erreichen möchte, ohne das zu vernachlässigen.
Aufgabe, das "Wie" zu definieren, um es der Maschine zu ermöglichen, die folglich einen haben wird

compito più oneroso. D’altro canto Cypher risulta un linguaggio più astratto e
semplice dal punto di vista sintattico e per questo spesso è preferibile alle Core Java
API. Die Traversal-API stellt einen guten Kompromiss zwischen den beiden oben genannten Sprachen dar.

Der Einfluss der Datenbankgröße auf die Leistung


Ein Aspekt, der beim Vergleich der Abbildungen 19 und 21 auffällt, ist, dass, wenn die "Abfrage

„Nummer“ ist klein, die Größe der Datenbank beeinflusst die Leistung nicht, während
Wenn die Kostendifferenz hoch ist, wird sie sehr sensibel und resulta sehr.
langsamer in größeren Datenbanken (Abbildung 19). Aus der Kurve in Abbildung 19
notiere auch, wie die Größe der Datenbank viel offensichtlicher Auswirkungen hat auf
Cypher im Vergleich zu den Core Java APIs oder den Traversal APIs.

Der Einfluss der Komplexität der Abfrage auf die Leistung


Die Abbildungen 19, 20 zeigen, dass innerhalb von Datenbanken derselben Größe die Zeit
Die Antwort auf eine Anfrage wird nicht von der Komplexität der Abfrage beeinflusst.
wenn die "Abfragenummer" niedrig ist. Mit steigenden Werten hingegen die

40
Die Komplexität der Abfrage beeinflusst erheblich die Kosten der Leistung (höher
Je größer die Komplexität, desto höher werden die Kosten bei gleicher Anzahl an Abfragen.

3.4 Leistungsvergleich zwischen Neo4j und MySQL

In diesem Kapitel wird versucht, die Fähigkeiten von Neo4j und MySQL im Umgang mit
Mit einer Graphstruktur dargestellte verbundene Daten.
Die Graphstruktur ist ziemlich verbreitet und reale Beispiele sind soziale Netzwerke, die
chemisch/biologisches Netzwerk (um molekulare Bindungen und Karten darzustellen
genetische) und die Verkehrsnetze (um die Straßenwege darzustellen).
Das Benchmarking wird aus einer objektiven Perspektive durchgeführt, indem getestet wird:

- ihre Leistungen bei der Beantwortung einer festgelegten Reihe von Anfragen;
- der benötigte Speicherplatz;
die Skalierbarkeit;
aus einer subjektiveren Perspektive bewertend:
Maturität;
-Programmierfreundlichkeit;
-Flexibilität.

Testgestaltung
Um die beiden Datenbanken zu testen, werden 12 Grafen erstellt, in denen jeder Knoten eine Eigenschaft enthält.

Die Werte der Eigenschaften von 4 der Graphen werden ganzzahlig (integers) sein, die folgenden 4
sarannostring(Zeichenfolgen oder Zeichenfolgen) von 8KB und die letzten 4 immer
Strings von 32KB. Es werden 4 Grafen jedes Typs verwendet, sodass der erste
enthalten 1000 Knoten, der zweite 5000, der dritte 10000 und der vierte 100000 Knoten (siehe
Abbildung 23) [13], um die Skalierbarkeit zu bewerten.
Gemäß den vorherigen Anweisungen wird die Struktur jedes Graphen erzeugt
zufällig aus einem Programm.
Anschließend wird jeder der Graphen in einer MySQL-Datenbank gespeichert und in einem
Datenbank Neo4j, wie in Abbildung 23 gezeigt, in der auch der Raum dargestellt ist.
die von den beiden Datenbanken geforderte Archivierung.

41
FIGUR 23Datenbank des Tests

Um Graphen in der relationalen Datenbank (MySQL) zu speichern, werden zwei Tabellen verwendet:
- nodecon die Attribute „nodeId“ (also die Identifikationsnummer des Knotens) und „Eigenschaften“;

-edgecon die Attribute "source" (das den Startknoten angibt) und "sink" (das angibt
Ankunftsname).

Abfrage
Um die Datenbank zu testen, werden sechs Abfragen durchgeführt, die in zwei Gruppen unterteilt werden können.

categorie:structural queryedata [Link] differenza tra questi due tipi di query è


aufgrund der Tatsache, dass die ersten, im Gegensatz zu den zweiten, sich nur auf die beziehen
Struktur des Graphen und nicht die Eigenschaften der darin enthaltenen Knoten.

Lestructural querysono:
alle Orphan-Nodes finden (d.h. ohne Eingangs- und Ausgangskanten) innerhalb des
Graph
S4: attraversare il grafo fino a profondità 4 e determinare il numero di nodi trovati.
S128: Durchqueren Sie den Graphen bis zu einer Tiefe von 128 und bestimmen Sie die Anzahl der Knoten.
gefunden.
Ledata Abfragen:
I1: Bestimmen Sie die Anzahl der Knoten, die eine Eigenschaft mit Wert (integer) haben
gleich einem bestimmten zugewiesenen Wert.

I2: Bestimmen Sie die Anzahl der Knoten, die eine Eigenschaft mit Wert (Integer) haben.
unter einem bestimmten zugewiesenen Wert.

42
C1: die Anzahl der Knoten bestimmen, deren Eigenschaften eine bestimmte Zeichenfolge enthalten (oder
Zeichenfolge).
Die von MySQL verwendete Sprache zur Abfrage von Daten ist selbstverständlich SQL, während
Für Neo4j wurden die Traversal-APIs verwendet.

Risultati
In den folgenden Tabellen sind die Ergebnisse in zeitlicher Hinsicht der Abfragen aufgeführt.
Beschreiben Sie den vorherigen Absatz.

FIGUR 24 Ergebnisse der strukturellen Abfragen S4, S128, S0 in Millisekunden.

FIGURA 25 Ergebnisse der Datenabfragen I1, I2 in Millisekunden.

ABBILDUNG 26 Ergebnisse der Datenabfrage C1 in Millisekunden. Der Test wurde durchgeführt für

Strings unterschiedlicher Größen (von 4 bis 8 Zeichen).

Objektive Bewertungen

43
Für die Abfragen S4 und S128 ist Neo4j in den meisten Fällen deutlich mehr
rapido (Abbildung 24). Dies liegt daran, dass Neo4j profitieren kann, auch dank
Beim indexfreien Adjazenz ermöglicht das Durchqueren des Graphen einem Knoten, ...
sich über seine Beziehungen zu anderen damit verbundenen Knoten zurückverfolgen. Dieser Typ von
Die Operation wird von relationalen Datenbanken nicht unterstützt, die stattdessen durchführen müssen.

kostspielige Join-Operationen. Die Abfrage S0 liefert in Bezug auf Ergebnisse ähnlicher.


leistungsfähig, da die verwaisten Knoten keine zugeordneten Kanten haben.
Es ist möglich, die Graphdurchquerung zu nutzen.
Die Datenabfragen für Datenbanken, die Daten vom Typ Integer (I1, I2) enthalten, zeigen eine
höhere Effektivität der relationalen Datenbank (Abbildung 25), dies ist darauf zurückzuführen

hauptsächlich daran, dass Neo4j einen indexierungsdienst verwendet, der auf


Lucene [13] (eine Bibliothek, die den Dienst zur Definition und Erstellung von
indici) die eine Volltextsuche nutzt. Diese Art der Suche behandelt alle die
Daten als Textdaten sind für die Abfragen I1 und I2 nicht besonders effektiv.
Die Abfrage C1 (Abbildung 26) liefert interessante Ergebnisse, denn in den Datenbanken von
Bei geringeren Größen (diese mit 1000 Knoten) sind die Leistungen von MySQL ähnlich und
addirittura migliori di quelle di Neo4j, aumentando invece le dimensioni, Neo4j
ist deutlich schneller und zeigt eine bessere Skalierbarkeit.
In Abbildung 23 ist jedoch zu erkennen, dass Neo4j im Durchschnitt einen Platz von

Archivierung, die über die von MySQL hinausgeht.

Subjektive Bewertungen
Diese Art von Bewertungen sind nicht in quantitativen Zahlen messbar, sondern sind
dennoch wichtig, wenn es darum geht, welche Art von Datenbank gewählt werden soll
verwendet. Die Merkmale, die analysiert und verglichen werden sollen, sind:
Reife, Programmierfreundlichkeit und Flexibilität.
Man spricht von einem ausgereiften System, wenn es gründlich getestet wurde, denn je mehr
Je mehr Tests durchgeführt werden, desto mehr werden die identifizierten „Fehler“ sein und folglich die

stabiles System. Relationaldatenbanken sind sicherlich die Art von Datenbank


Die weltweit am häufigsten verwendeten, sie werden in kommerziellen und ...
akademische Forschung und haben verschiedene "kommerziellen Unternehmungen" hervorgebracht, wie zum Beispiel

Beispiel Oracle [13] und Microsoft [13], die viel in diese investiert haben.

44
Datenbanken. Stattdessen haben Graphdatenbanken im Allgemeinen eine geringere
Marktdurchdringung, die vor allem darauf zurückzuführen ist, dass eine Sprache fehlt
die einzige Befragung und auch deshalb sind sie weniger reif als die
relational
Die Tatsache, eine einzigartige Programmiersprache zu haben, macht die Transaktionen
tra verschiedene Implementierungen einfacher in relationalen Datenbanken als in denen
ein Graph. Die Leichtigkeit beim Schreiben von Abfragen hängt hingegen stark von der Art der ...

Befragungen, zum Beispiel das Schreiben von Durchquerungsabfragen in Neo4j, erweist sich als

Viel einfacher, da die Traversal-APIs Algorithmen dafür enthalten.


einfacher im Gegensatz zu MySQL, das stattdessen mehrere Joins ausführen muss. Al
Im Gegensatz dazu kann der Wert eines Attributs innerhalb der Datenbank recherchiert werden.
risultare meno costoso in un database relazionale (anche se le prestazioni dei
Graphdatenbanken hängen stark von der verwendeten Indizierung ab.
Neo4j ist als Graphdatenbank viel flexibler als MySQL.
da dies, wie bereits im vorherigen Kapitel erklärt, die Graphdatenbanken
sie haben kein festes Schema.
SCHLUSSFOLGERUNGEN

In dieser Arbeit wird nach einer kurzen Einführung in den Bereich der NoSQL-Datenbanken
presentato un confronto tra i database a grafo e quelli relazionali analizzandone i
Modelle, die Transaktionen, die Indizes, die Programmierung und schließlich die Leistung für die
welche Abfragen wurden auf der relationalen Datenbank MySQL und derjenigen zu ...
Grafo Neo4j.
Das relationale Modell im Vergleich zum grafbasierten Modell hat insbesondere Einschränkungen gezeigt, hauptsächlich aufgrund von

Sicht der Flexibilität und der Leistung (insbesondere bei großen Mengen von
dati) während es in Reife, Konsistenz und Sicherheit besser abgeschnitten hat.
Aus der Analyse, die in der Thesis durchgeführt wurde, kann man schließen, dass zu definieren, was das Beste ist

database da utilizzare dipende molto dai casi d’uso.


Sicherlich funktionieren Graphdatenbanken, insbesondere Neo4j, sehr gut im
mit verbundenen Daten zu repräsentieren und schnell auf Anfragen zu antworten, die
erfordern das Durchqueren des Graphen, während relationale Datenbanken perfekt im

45
strukturierte Daten darstellen. Beide Datenbanken weisen daher positive Aspekte auf und
Negativen und einen passendere Anwendungsbereich.
Man kann jedoch sagen, dass die Daten in vielen Realitäten heute immer mehr verbunden sind und die
Die Menge der zu verwaltenden Daten wird immer größer und verändert sich ständig (eine Eigenschaft, die

erfordert Flexibilität des Modells). Diese Merkmale sind sicherlich besser


unterstützt durch Graphdatenbanken, die in den letzten Jahren viel Aufmerksamkeit erregt haben
Interesse von großen Konzernen wie Google, Facebook und eBay, die nutzen
Proprio Neo4j als Plattform zur Speicherung und Verwaltung von Daten.

Bibliografia

Renzo Angles und Claudio Gutierrez. „Überblick über Graphdatenbankmodelle“. IEEE


28. Internationale Konferenz über Datenengineering-Werkstätten, S. 171-176, 2012.

[2]Wikipedia. ([Link]

Mehak Gupta. "Ein neuartiger Ansatz zur Transformation von relationalen Datenbanken in Graphen

Datenbank mit Neo4j. Fachbereich Informatik und Ingenieurwissenschaften Thapar


Universität, 2014.

[4] Ian, Robinson, Jim Webber und Emil Eifrem. „Graphdatenbanken“. O’Reilly
Media Inc., 2013.

Handbuch online von Neo4j v2.3.2 (Februar - März 2014)

46
Jaroslav Pokorný. "Graphdatenbanken: ihre Macht und Einschränkungen."
Internationale Föderation für Information Processing (IFIP), S. 58–69, 2015.

[7] Dimitri De Franciscis. "Relationale Datenbanken und NoSQL im Vergleich". 2013.

[8] Roberto De Virgilio, Antonio Maccioni und Riccardo Torlone. „Modellgetriebene


Design von Graphdatenbanken. Dipartimento di Ingegneria Università Roma Tre,
Rom, Italien, S. 172–185, 2014.

Shalini Batra und Charu Tyagi. "Vergleichende Analyse von relationalen und graphbasierten"
Datenbanken. International Journal of Soft Computing and Engineering (IJSCE)
Band-2, Ausgabe-2, 2012.

[10] Hongcheng Huang, Ziyu Dong. „Forschung zu Architektur und Abfrage


performance based on distributed graph database Neo4j”.Chongqing University of
Post und Telekommunikation, 2013.

[11] Pradeep. D. Jadhav, Ruhi Oberoi. "Vergleichende Analyse verschiedener Graphen


Datenbanken”. Internationale Zeitschrift für Ingenieurforschung & Technologie (IJERT),
Bd. 3 Ausgabe 9, 2014.

[12] Florian Holzschuher und Prof. Dr. René Peinl. „Leistung von Graphabfragen
Sprachen. Vergleich von Cypher, Gremlin und Native Access in Neo4j. Institut
für Informationssysteme (iisys) Hochschule Hof Alfons-Goppel-Platz 1 DE-95028
Hof, Deutschland, 2013.

[13] Chad Vicknair, Michael Macias, Zhendong Zhao, Xiaofei Nan, Yixin Chen und
Dawn Wilkins. „Ein Vergleich zwischen einer Graphdatenbank und einer relationalen Datenbank“.

Fachbereich für Informatik und Informationswissenschaften, Universität von Mississippi, 2010.

47

Das könnte Ihnen auch gefallen