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



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

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

Die Java-basierte Graphdatenbank Neo4j. Olaf Herden Duale Hochschule BW Campus Horb

Graphendatenbanken. Sven Schönung Hochschule Mannheim Fakultät für Informatik Paul-Wittsack-Straße Mannheim

XAMPP-Systeme. Teil 3: My SQL. PGP II/05 MySQL

Abstract Graphdatenbanken. Autor: Thi Minh Phuong Pham Modul: Oberseminar Datenbanksysteme Betreuer: Prof. Dr.-Ing. Thomas Kudrass

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

SQL und MySQL. Kristian Köhntopp

Breiten- und Tiefensuche in Graphen

Beispiel 1: Filmdatenbank

Überblick und Vergleich von NoSQL. Datenbanksystemen

Dokumentenorientierte Datenbanken - MongoDB

Interaktive Visualisierung der Projektmanagement-Prozesse

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Neo4j. Daten natürlich modellieren und verarbeiten mit Neo4j. Patrick

Projektgruppe. Knowledge Representation Persistence and Reasoning

Ich liebe Java && Ich liebe C# Rolf Borst

4. Hierarchische und netzwerkartige Datenbankmodelle

SQL structured query language

NoSQL mit Postgres 15. Juni 2015

Bibliografische Informationen digitalisiert durch

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Java- Programmierung

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

Computeranwendung und Programmierung (CuP)

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Java Persistence API 2.x. crud + relationships + jp-ql

Die Grundbegriffe Die Daten Die Informationen

Datenbanken (WS 2015/2016)

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing.

Neo4J & Sones GraphDB. Graph-Datenbanken. Von Toni Fröschke. Problemseminar NoSQL-Datenbanken (WS 2011/12)

Wirtschaftsinformatik 2. Tutorium im WS 11/12

Relationales Modell: SQL-DDL. SQL als Definitionssprache. 7. Datenbankdefinitionssprachen. Anforderungen an eine relationale DDL

Thomas Matzner Berater für Systemanalyse Couchbase. Java User Group München

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

PostgreSQL in großen Installationen

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Android Java Specifics / Basic IO

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

4. Objektrelationales Mapping Grundlagen der Programmierung II (Java)

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

SODA. Die Datenbank als Document Store. Rainer Willems. Master Principal Sales Consultant Oracle Deutschland B.V. & Co. KG

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

SQL (Structured Query Language) Schemata Datentypen

Graphdatenbanksysteme

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

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

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

MICROSERVICES-SCHNITT JETZT MIT GRAPHQL!

C++11 ist da. Und jetzt?

Datensicherung an der Universität Bern Tivoli Storage Manager

Mercurial. or how I learned to stop worrying and love the merge. Ted Naleid IAIK

MySQL, phpmyadmin & SQL. Kurzübersicht

PayPal PLUS für Shopware

CouchDB & CouchApps. Strukturlose Speicherung von Daten und Anwendungen. B1 Systems GmbH. March 18,

Datenbanken für Online Untersuchungen

Proseminar Datenbanken

Cassandra Query Language (CQL)

Institut für Dokumentologie und Editorik. XML-Datenbanken und XQuery

MS SQL Server: Index Management. Stephan Arenswald 10. Juli 2008

Modul 122 VBA Scribt.docx

Liste Programmieren Java Überblick

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

Praktikum Planare Graphen

DB2 for VM / VSE 7.5. News & Experiences. Torsten Röber. GSE Frühjahrstagung April 2008, Bonn. IBM Software Group

NoSQL Datenbanken am Beispiel von CouchDB

Präsentation mongodb. David Wild

Persistenz unter Kontrolle mit JDBI für Java

Übersicht über Datenbanken

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

Löschen eines erkannten aber noch nicht konfigurierten Laufwerks

Suchen und Finden mit Lucene und Solr. Florian Hopf

DB Restore mit SQL Server7

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

C++ Tutorial: Timer 1

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Fortgeschrittene OLAP Analysemodelle

OP-LOG

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Inhalt. 1 Übersicht. 2 Anwendungsbeispiele. 3 Einsatzgebiete. 4 Systemanforderungen. 5 Lizenzierung. 6 Installation.

Bibliothekssysteme / Verbundsysteme / Netze

SQL, MySQL und FileMaker

DB2 Codepage Umstellung

Java Database Connectivity-API (JDBC)

Die Alternative zum Web-Form Modell

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Programmieren was ist das genau?

WebService in Java SE und EE

Andere Datenbankmodelle. Graphendatenbanken

Query Transformation based on XSLT

Client-Server-Beziehungen

Sinn (und Unsinn) für Informix Benutzer

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering

NoSQL. Einblick in die Welt nicht-relationaler Datenbanken. Christoph Föhrdes. UnFUG, SS

Modellierung und Programmierung 1

Datenmanagement in Android-Apps. 16. Mai 2013

Transkript:

Agenda (1) Einleitung (2) neo4j (1) neo4j Embedded (2) neo4j Server (REST-Interface) (3) Cypher Query Language (4) High Availability Cluster (3) Beispiel + Demo 2

Einleitung 3

Einleitung: Geschichte 1960er: Hierarchische Datenbanken (IBM) 1969: Netzwerkdatenbanken (Charles Bachman, CODASYL) 1970: Relationale Datenbank (E.F. Codd) 2000er: Graphendatenbanken (NoSQL ) 4

Einleitung: Warum Graphendatenbanken? User-generiert Hohe Nutzerzahlen Hohes Datenaufkommen Freunde User-zentriert Sozialer Graph RDBs skalieren schlecht RDBs sind umständlich 5

Einleitung: Typische Probleme Gib mir alle Personen, die mit meinen Freunden befreundet sind, mit denen ich noch nicht befreundet bin Welches sind die TOP10 Bücher, die Leute mögen, die Buch x auch mögen? Welche Orte sind auf kürzester Strecke nicht weiter als x von meiner aktuellen Position entfernt? 6

neo4j 7

neo4j Hersteller: Neo Technology Erscheinungsjahr: 2007 (Version 1.0: 2010) Aktuelle Version: 1.7.1 Programmiersprache Website: Lizenz Java http://neo4j.org/ GPL3/AGPL3 8

neo4j: Anwender For anything with multiple relationships, multiple connections, Neo4j absolutely ROCKS! --Werner Vogels, CTO Amazon 9

neo4j: Features Transaktionsfähig (ACID) Embedded und Server REST-Interface Cypher Query Language High Availability Cluster 10

neo4j: Knoten (Node) id: 1 id: 2 prename: Fred surname: Foobar age: 42 city: Mannheim planet: Earth title: The C Programming Language author: [ Brian Kernighan, Dennis Ritchie ] year: 1988 edition: 2nd publisher: Prentice-Hall Fortlaufende ID Optional: Eigenschaften boolean byte short int long float double char String array of 11

neo4j: Kanten (Relationship) :READS, 1 id: 1 id: 2 time: 15:00 place: bed :OWNS, 2 id: 1 id: 2 since: 2008 store: Amazon Fortlaufende ID Start-Knoten End-Knoten Typ Richtung Optional: Eigenschaften boolean byte short int long float double char String array of 12

neo4j: Pfade (Paths) prename: Fred surname: Foobar age: 42 city: Mannheim planet: Earth title: The C Programming Language author: [ Brian Kernighan, Dennis Ritchie ] year: 1988 edition: 2nd publisher: Prentice-Hall :READS, 1 id: 1 id: 2 time: 15:00 place: bed :REFERENCES, 3 page: 23 id: 2 13

neo4j: Indizes index: persons name: Fred Foobar name: Bernd age: 42 id: 1 id: 6 index: books title: The C Programming Language title: Programming Perl year: 1988 year: 2012 id: 2 id: 6 14

neoj4: Embedded vs. Server Embedded Server Applikation neo4j embedded Applikation REST neo4j Server DB DB 15

neoj4: Embedded Neue Graphendatenbank öffnen: GraphDatabaseService graphdb = new GraphDatabaseFactory(). newembeddeddatabase("target/dir"); 16

neoj4: Embedded Neuen Knoten erstellen: Node fred = graphdb.createnode(); fred.setproperty("name", "Fred"); fred.setproperty("age", 42); Neuen Knoten indizieren: IndexManager index = graphdb.index(); Index<Node> persons = index.fornodes( "persons" ); persons.add(fred, "name", fred.getproperty("name")); 17

neoj4: Embedded Kantentyp definieren: public enum RelTypes implements RelationshipType { FRIENDS, ENEMIES } Neue Kante erstellen: Relationship rel = fred.createrelationshipto(bernd, RelTypes.FRIENDS); rel.setproperty("since", "2008"); 18

neoj4: Embedded Traversal Durchlaufen des Graphen nach bestimmten Kriterien Starting node: Wo soll ich die Suche starten? Expander: Welchen Kanten soll ich folgen? Order: Tiefensuche oder Breitensuche? Uniqueness: Knoten mehrfach besuchen? Evaluator: Wann soll die Suche abbrechen? 19

neoj4: Embedded Beispiel "Gib mir alle Freunde der Freunde von Fred." Iterator<Path> paths = Traversal.description().expand(new OrderedByTypeExpander().add(RelType.FRIENDS)).order(CommonBranchOrdering.PREORDER_BREADTH_FIRST).uniqueness(Uniqueness.NODE_GLOBAL).evaluator(Evaluators.atDepth(2)).traverse(fred) 20.iterator();

neoj4: Server Client neo4j Server REST Client neo4j embedded DB 21

neoj4: Server REST-API Client Libraries Sprache Java.NET Python PHP Ruby JavaScript (node.js) Closure Client Library Java-Rest-Binding Neo4jClient py2neo Neo4jPHP neography Node-neo4j Neocons 22

neoj4: Cypher Query Language RDBMS - SQL SELECT INSERT UPDATE DELETE neo4j - Cypher START RETURN CREATE SET DELETE 23

24

Beispiel + Demo 25

Beispiel + Demo: Problemstellung Six Degrees of Separation Kevin Bacon 26

Beispiel + Demo: Problemstellung 27

Beispiel + Demo: Datenmodell ACTED_WITH movie: The Departed name: Matt Damon name: Matt Damon ACTED_IN ACTED_IN movie: The Departed name: Jack Nicholson ACTED_WITH movie: A Few Good Men movie: A Few Good Men ACTED_IN ACTED_IN name: Jack Nicholson name: Kevin Bacon name: Kevin Bacon 28

Beispiel + Demo: Daten Dateigröße : ca. 1GB 29

Beispiel + Demo: Datenimport Problem: Transaktionen langsam (Two-Phase Commit) Lösung: org.neo4j.unsafe.batchinsert.batchinserter! Keine Transaktionen Keine Thread-Safety 30

//Boilerplate init BatchInserter batch = BatchInserters.inserter("/home/sven/imdb"); BatchInserterIndexProvider prov = new LuceneBatchInserterIndexProvider(ins); BatchInserterIndex actors = prov.nodeindex("actors", MapUtil.stringMap("type", "exact")); BatchInserterIndex movies = prov.relationshipindex("movies", MapUtil.stringMap("type", "exact")); Map<String, Object> props = new HashMap<String, Object>(); //Kevin Bacon Knoten anlegen props.put("name", "Kevin Bacon"); long kevin = batch.createnode(props); actors.add(kevin, props); //Jack Nicholson Knoten anlegen props.put("name", "Jack Nicholson"); long jack = batch.createnode(props); actors.add(jack, props); //Film-Kante "A Few Good Men" anlegen RelationshipType actedwith = DynamicRelationshipType.withName("ACTED_WITH"); props.clear(); props.put("movie", "A Few Good Men"); long fewgoodmen = batch.createrelationship(kevin, jack, actedwith, props); movies.add(fewgoodmen, props); //Boilerplate shutdown prov.shutdown(); batch.shutdown(); 31

Beispiel + Demo: Datenbank Dauer des Import: ca. 3-4h 32

Beispiel + Demo: Webapplikation 33

Beispiel + Demo: Cypher Query start n1=node:actors(name={fromactor}), n2=node:actors(name={toactor}) match p=shortestpath( n1-[:actedwith*..{max}]-n2 ) return p limit 1 34

Vielen Dank für die Aufmerksamkeit Noch Fragen? 35