Graphdatenbanksysteme



Ähnliche Dokumente
NoSQL HANSER. Einstieg in die Web 2.0 Datenbanken. Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer Markus Brückner

Stefan Edlich Achim Friedland Jens Rampe Benjamin Brauer. NoSQL. Einstieg in die Welt nichtrelationaler Web 2.0 Datenbanken HANSER

Inhaltsverzeichnis. Stefan Edlich, Achim Friedland, Jens Hampe, Benjamin Brauer, Markus Brückner. NoSQL

Stefan Edlich, Achim Friedland, Jens Hampe, Benjamin Brauer. NoSQL. Einstieg in die Welt nichtrelationaler Web 2.0 Datenbanken ISBN:

Java Forum Stuttgart 2013 twitter.com/kspichale spichale.blogspot.de

Überblick und Vergleich von NoSQL. Datenbanksystemen

Java Einführung Abstrakte Klassen und Interfaces

Agenda. (1) Einleitung (2) neo4j. (3) Beispiel + Demo

Abstrakt zum Vortrag im Oberseminar. Graphdatenbanken. Gero Kraus HTWK Leipzig 14. Juli 2015

ANALYTICS, RISK MANAGEMENT & FINANCE ARCHITECTURE. NoSQL Datenbanksysteme Übersicht, Abgrenzung & Charakteristik

Graphdatenbanksysteme Überblick und Benchmark

4. Hierarchische und netzwerkartige Datenbankmodelle

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Hadoop. Eine Open-Source-Implementierung von MapReduce und BigTable. von Philipp Kemkes

Diplomarbeit: GOMMA: Eine Plattform zur flexiblen Verwaltung und Analyse von Ontologie Mappings in der Bio-/Medizininformatik

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

PostgreSQL in großen Installationen

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Projektgruppe. Knowledge Representation Persistence and Reasoning

Binärbäume. Prof. Dr. E. Ehses,

5. Programmierschnittstellen für XML

Ich liebe Java && Ich liebe C# Rolf Borst

Algorithmen & Datenstrukturen 1. Klausur

Breiten- und Tiefensuche in Graphen

Sprecher. Stephan Krauß Enterprise Portale E-Commerce. Dipl.-Phys. Johannes Knauf Business Analytics Data Science

Big Data Informationen neu gelebt

Test-Driven Design: Ein einfaches Beispiel

Auszug aus JAX-WS Folien

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

5. Programmierschnittstellen für XML

Verknüpfte Daten abfragen mit SPARQL. Thomas Tikwinski, W3C.DE/AT

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Projekt AGB-10 Fremdprojektanalyse

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Wie Google Webseiten bewertet. François Bry

Apache HBase. A BigTable Column Store on top of Hadoop

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Data Warehousing. Sommersemester Ulf Leser Wissensmanagement in der Bioinformatik

Algorithmen und Datenstrukturen

XMLBeam. Einfach XML-Handling. W3L AG

Klausur Interoperabilität

Event Stream Processing & Complex Event Processing. Dirk Bade

Persistenz unter Kontrolle mit JDBI für Java

Graphdatenbanksysteme

Seminar Informationsintegration und Informationsqualität. Dragan Sunjka. 30. Juni 2006

Themen. Web Service - Clients. Kommunikation zw. Web Services

AutoSPARQL. Let Users Query Your Knowledge Base

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Andere Datenbankmodelle. Graphendatenbanken

Fragenkatalog zum Kurs 1666 (Datenbanken in Rechnernetzen) Kurstext von SS 96

Datenbank und Informationssysteme

EndTermTest PROGALGO WS1516 A

Index- und Zugriffsstrukturen für. Holger Brämer, 05IND-P

Algorithmen und Datenstrukturen Suchbaum

Agenda. Anwendungsfälle. Integration in Java

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Datenmanagement in Android-Apps. 16. Mai 2013

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

NoSQL mit Postgres 15. Juni 2015

Datenbanksysteme 2 Frühjahr-/Sommersemester Mai 2014

Solaris Cluster. Dipl. Inform. Torsten Kasch Bielefeld.DE> 8. Januar 2008

Einführung in die Programmierung für Wirtschaftsinformatik

EHCache und Terracotta. Jochen Wiedmann, Software AG

Java: Vererbung. Teil 3: super()

Übungen zu Softwaretechnik

Datenbanken. Datenbanken. Datenbanken. Taschenbuch. Taschenbuch Taschenbuch. Thomas Kudraß. 2. Auflage. Thomas Kudraß.

Fabian Grimme und Tino Krüger 1 INDREX. Evaluierung von H2O. Enterprise Data Management Beuth Hochschule für Technik

Dokumentenorientierte Datenbanken - MongoDB

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

SQL Teil 2. SELECT Projektion Selektion Vereinigung, Schnitt, Differenz Verbund Komplexer SELECT-Ausdruck

Datenbanksysteme 2015

Web Data Management Systeme

Transformations on. Graph Databases. for. Polyglot Persistence Johannes Schildgen. Yannick Krück Stefan Deßloch

Informatik I WS 07/08 Tutorium 24

6.4 Nicht-Relationale Datenbanksysteme

Große Übung Praktische Informatik 1

Spring Dynamic Modules for OSGi Service Platforms

IV. Datenbankmanagement

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Anwendungsbeschreibung an einem Beispiel

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert.

Assoziation und Aggregation

It's time to rethink Datenbank-Design in der schönen neuen Welt

Bibliografische Informationen digitalisiert durch

Struts 2 Das Imperium schlägt zurück?

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Seminar Werkzeuggestütze. tze Softwareprüfung. fung. Slicing. Sebastian Meyer

Objektorientierte Programmierung

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Transkript:

Graphdatenbanksysteme Ein Überblick Benjamin Gehrels benjamin@gehrels.info GitHub: @BGehrels

Was ist das? WITH RECURSIVE manager ( level, managerid) AS ( SELECT 1 AS depth, employees.managerid AS managerid FROM employees WHERE employees.employeeid=13 UNION ALL SELECT manager.depth+1, employees.managerid FROM manager INNER JOIN employees ON employees.employeeid=manager.managerid ) SELECT manager.depth, manager.employeeid FROM manager ORDER BY manager.depth ASC;

Relationale Datenbank employeeid employeename managerid 1 Alice 6 2 Anja 11 3 CEO null 4 COO 3 5 CTO 3 6 Peter 4 7 Geraldine 8 8 Jane 5 9 John 6 10 Karin 8 11 Mary 11 12 Paul 4 13 Eve 6

Graph CEO COO CTO Peter Paul Mary Jane Alice Eve John Anja Karin Geraldine

Graph CEO COO CTO Peter Paul Mary Jane Alice Eve John Anja Karin Geraldine

Relationale Datenbank employeeid employeename managerid 1 Alice 6 2 Anja 11 3 CEO null 4 COO 3 5 CTO 3 6 Peter 4 7 Geraldine 8 8 Jane 5 9 John 6 10 Karin 8 11 Mary 11 12 Paul 4 13 Eve 6

Relationale Datenbank employeeid employeename managerid 1 Alice 6 2 Anja 11 3 CEO null 4 COO 3 5 CTO 3 6 Peter 4 7 Geraldine 8 8 Jane 5 9 John 6 10 Karin 8 11 Mary 11 12 Paul 4 13 Eve 6

Graphdatenbanken

Datenmodell

Datenmodell

Datenmodell

Datenmodell

Datenmodell

Graphdatenbanksysteme Neo4j InfiniteGraph DEX Allegro Graph HyperGraphDB Sones GraphDB FlockDB VertexDB OrientDB InfoGrid Apache Giraph GraphLab

Graphdatenbanksysteme Neo4j InfiniteGraph DEX Allegro Graph HyperGraphDB Sones GraphDB FlockDB VertexDB OrientDB InfoGrid Apache Giraph GraphLab

Anfragemechanismen

Anfragemechanismen Elementare Operationen Lesend node by id edge by id Attribute Eingehende Kanten Ausgehende Kanten Nachbarknoten Schreibend CRUD node CRUD edge CRUD attribute CRUD label Indexupdates Indizes

Anfragemechanismen Mengenbasierte Anfragen List<PagedNodeIdList> result = myflockdbconnection.select( difference( intersect( simpleselection(personaid, FOLLOWS, INCOMING), simpleselection(personbid, FOLLOWS, INCOMING) ), simpleselection(personcid, BLOCKS, OUTGOING) ) ).execute();

Anfragemechanismen Traversierende Anfragen Iterable<Path> traverser = traversal().breadthfirst().relationships(withname("like"), OUTGOING).relationships(withName("FRIEND"), INCOMING).relationships(withName("LOVES"), BOTH).evaluator(includingDepths(1,3)).traverse(startNodes); for (Path traversedpath : traverser) System.out.println(traversedPath);

Anfragemechanismen SPARQL Für RDF und Semantic Web entwickelt PREFIX abc: <http://example.com/ontology#> SELECT?capital?country WHERE {?x abc:cityname?capital ; abc:iscapitalof?y.?y abc:countryname?country ; abc:isincontinent abc:africa. }

Anfragemechanismen Gremlin g.v(1).oute.filter{it.weight<1.0}.inv

Anfragemechanismen Cypher START employee=node(13) MATCH manager-[pfad:manages*]->employee RETURN manager.id, length(pfad) AS depth ORDER BY depth ASC

Anfragemechanismen Cypher START person = node:personen(name="john Doe"), c = node(15) MATCH a-[:liebt]->b, b-[:liebt]->c, c-[:liebt]->a, p=shortestpath(person-[:freund_von*3]-a) WHERE c.alter < 18 RETURN a, b, c, c.alter, LENGTH(p) AS abstand ORDER BY abstand ASC

Die Graphdatenbanksysteme im Einzelnen

HyperGraphDB Entwicklerin: Kobrix Software Embedded (Java); LGPL Gerichteter Multihypergraph (wow) Forciert Schemata Automatisches Mapping von Java-Beans Mächtige Indizierungsmöglichkeiten Unterstützt Traversierung und Mengenbasierte Anfragen

DEX Entwicklerin: Sparsity Technologies Embedded (Java, C++,.Net); Kommerziell Unglaublich schnell. Unterstützt Atomare Anfragen, Traversierung und einige Mitgelieferte Graphalgorithmen Master-Slave-Replikation Schlechte Transaktionskontrolle Forciert Schema

Neo4j Entwicklerin: Neo Technologies Embedded (Java) & REST; GPL/AGPL/Kommerziell Traversierende Anfragen, Cypher (!) Master-Slave-Replikation Leider kaum Anfrageoptimierung bei Cypher Schemalos, ACID-Transaktionen

FlockDB Entwicklerin: Twitter Inc. Thrift-API; Apache License 2.0 Skaliert Horizontal bzgl. Schreiblast (Sharding) Sehr mageres Datenmodell (gelabelte Graphen) Basiert auf MySQL

FlockDB Architektur Anwendung 1 Anwendung 2 Thrift FlockDB Gizzard MySQL

FlockDB Sharding anhand von Kantenlabel Knoten-ID ranges Eingehende und ausgehende Kanten stets im selben Shard Redundant

Anfragemechanismen Mengenbasierte Anfragen List<PagedNodeIdList> result = myflockdbconnection.select( difference( intersect( simpleselection(personaid, FOLLOWS, INCOMING), simpleselection(personbid, FOLLOWS, INCOMING) ), simpleselection(personcid, BLOCKS, OUTGOING) ) ).execute();

Graphen & Big Data Pregel, GraphLab und Apache Giraph Verlagerung des Algorithmus in die Knoten I. (Neu-) Berechnung des Knotenwertes II. Voting: Berechnung beenden? III. Messaging: Nachrichten an Nachbarknoten IV. Zurück zu I. Dezentrale Berechnung direkt auf den Verteilten Daten Flüsterpost-Algorithmen Giraph basiert auf Hadoop, bestehende Infrastruktur nutzbar

Graphen & Big Data PageRank public void compute(iterable<doublewritable> msgiterator) { if (getsuperstep() >= 1) { double sum = 0; for ( DoubleWritable msg : msgiterator ) { sum += msg.get(); } DoubleWritable vertexvalue = new DoubleWritable( (0.15f/getTotalNumVertices()) + 0.85f*sum ); setvalue(vertexvalue); } } if (getsuperstep() < NUM_ITERATIONS) { long edges = getnumedges(); sendmessagetoalledges(new DoubleWritable(getValue().get() / edges)); } else { votetohalt(); }

Framework-Unterstützung

Spring Data Neo4j @NodeEntity public class Movie { @GraphId Long id; @Indexed(type = FULLTEXT, indexname = "search") String title; Person director; @RelatedTo(type="ACTS_IN", direction = INCOMING) Set<Person> actors; } @Query("start movie=node({self}) match movie-->genre<--similar return similar") Iterable<Movie> similarmovies;

Spring Data Neo4j interface MovieRepository extends GraphRepository<Movie> { @Query("start movie={0} match m<-[rating:rated]-user return rating") Iterable<Rating> getratings(movie movie); } @Autowired MovieRepository repo; Iterable<Movie> movies = repo.findall(); Movie movie = repo.findbypropertyvalue("title","matrix"); repo.save(movie); Iterable<Rating> ratings = repo.getratings(movie);

Tinkerpop Blueprints Graph graph = new Neo4jGraph("/tmp/my_graph"); Vertex a = graph.addvertex(null); Vertex b = graph.addvertex(null); a.setproperty("name","marko"); b.setproperty("name","peter"); Edge e = graph.addedge(null, a, b, "knows"); e.setproperty("since", 2006); graph.shutdown();

Tinkerpop Blueprints Besteht aus mehreren Komponenten: Blueprints: Einheitliche low-level API Frames: OO-Mapping Gremlin: Anfragesprache Furnace: Sammlung von Graphalgorithmen Rexter: REST-Server

Tinkerpop Blueprints Frames public interface Person { @Property("name") public String getname(); @Adjacency(label="knows") public Iterable<Person> getknowspeople(); @Adjacency(label="knows") public void addknowsperson(final Person person); @GremlinGroovy("it.out('knows').out('knows').dedup") public Iterable<Person> getfriendsofafriend() } public class Frames { public Frames() { FramedGraph<NeoGraph> graph = new FramedGraph<NeoGraph>(new NeoGraph("local:/path/to/db")); Person person = graph.getvertex(1, Person.class); person.getname(); // equals "marko" } }

Eine Letzte Aufgabe Paul, 17 Jana, 32 Jonathan, 73 Michael, 29 Peter, 12 Eve, 63 Mary, 32 Jane, 58 John, 82 Alice, 17 Anja, 45 Karin, 22 Geraldine, 42

Danke! Benjamin Gehrels benjamin@gehrels.info GitHub: @BGehrels