+ All Categories
Home > Technology > Daten natuerlich modellieren und verarbeiten mit Neo4j

Daten natuerlich modellieren und verarbeiten mit Neo4j

Date post: 22-Nov-2014
Category:
Upload: patrick-baumgartner
View: 942 times
Download: 4 times
Share this document with a friend
Description:
 
45
Neo4j Daten natürlich modellieren und verarbeiten mit Neo4j Berlin Expert Days 2013 | Berlin | 04.04.2013
Transcript
Page 1: Daten natuerlich modellieren und verarbeiten mit Neo4j

Neo4jDaten natürlich modellieren und verarbeiten mit Neo4j

Berlin Expert Days 2013 | Berlin | 04.04.2013

Page 2: Daten natuerlich modellieren und verarbeiten mit Neo4j

2

Speaker Profil

Patrick Baumgartner• Senior Software Consultant | Partner @ Swiftmind

• Spring Framework, OSGi, Neo4j• Spring Trainer• Co-Autor von „OSGi für Praktiker“

• Agile Projektmethoden & Praktiken• Scrum.org Trainer - PSD Java

• @patbaumgartner

Page 3: Daten natuerlich modellieren und verarbeiten mit Neo4j

3

Swiftmind

Ihre Experten für Enterprise Java

Spezialgebiete• Java EE• Spring Framework• OSGi• Agile Projektmethoden• Software Engineering Best Practices

Standort• Zürich, Schweiz• @swiftmind• http://www.swiftmind.com

Page 4: Daten natuerlich modellieren und verarbeiten mit Neo4j

4

Agenda

• Einführung• Usecases• Neo4j• Querying • Import / Export• Tools und APIs• Polyglot Persistence• Highlights & Challenges beim Einsatz• Q & A

Page 5: Daten natuerlich modellieren und verarbeiten mit Neo4j

5

New Types of Data Stores

Page 6: Daten natuerlich modellieren und verarbeiten mit Neo4j

6

NoSQL

Datengrösse

Datenkomplexität

Key-Value Stores

Column Family

Document Databases

Graph Databases

Relational Databases

90% aller Usecases

Page 7: Daten natuerlich modellieren und verarbeiten mit Neo4j

7

Property Graph Modell

• Graphen bestehen aus– Knoten / Nodes– Beziehungen / Relations– Eigenschafen / Properties

Alice

Bob

Car

name:Bobage:63sex:male

name:Aliceage:21sex:female

type:carvendor:tesla

type:KNOWS

time:42 days ty

pe:O

WN

Stype:DRIVES

Page 8: Daten natuerlich modellieren und verarbeiten mit Neo4j

8

Wo finde ich meinen Graphen?

Usecases

Page 9: Daten natuerlich modellieren und verarbeiten mit Neo4j

9

Social Data

AliceCarol

KNOWS

Luke

Bob

Sam

PeteKNOWS

KN

OW

S

KNOWS

KNOWS

KNOWS

KNOW

S

KNO

WS

Page 10: Daten natuerlich modellieren und verarbeiten mit Neo4j

10

Ein einziger Anwendungsfall?

Social Graph

Page 11: Daten natuerlich modellieren und verarbeiten mit Neo4j

11

Spatial Data

12

type:ROADlength:5km

5

3

13

8ROAD

RO

AD

ROAD

ROAD

type:ROADlength:3km

ROAD

type:Hotelname:Radisson Blulat:47.452549 long:8.564615

type:Hotelname:Widderlat:47.373517 long:8.539252

ROAD RO

AD

Page 12: Daten natuerlich modellieren und verarbeiten mit Neo4j

12

Schienennetz in Deutschland

Page 13: Daten natuerlich modellieren und verarbeiten mit Neo4j

13

Social & Spatial Data

AliceMat

type:LIKESweight:5

5

Bob

13

8ROAD

RO

AD

ROAD

LIKESKNOWS

SIBLING

type:Hotelname:Radisson Blulat:47.452549 long:8.564615

KNO

WS

Page 14: Daten natuerlich modellieren und verarbeiten mit Neo4j

14

Financial Data

AliceHotel Luke

Bank

ATM

PeteWITHDRAW

TRAN

SFE

R

WITHDRAW

TRANSFER

OWNS

DEPO

SIT

DEPOSIT

Page 15: Daten natuerlich modellieren und verarbeiten mit Neo4j

15

Eine beliebige Business Domäne

Process

KPI

Device

Activity

Function

ServiceDEPENDS_OND

EPEN

DS_O

N RUNS_ON

DEPENDS_ONDEPEND

S_ON

DEPENDS_ON

Page 16: Daten natuerlich modellieren und verarbeiten mit Neo4j

16

Neo4jThe Big Picture

Page 17: Daten natuerlich modellieren und verarbeiten mit Neo4j

17

Neo4j – Big Picture

• Die verbreiteste Graphendatenbank der Welt– Robust: Im Betrieb 24/7 seit 2003– Reifegrad: Vielfach in Produktion ausgerollt– Community: Ecosystem mit Tools, Bindings, Frameworks

• Lizenzen– AGPLv3 Community Edition – OpenSource– Advanced/Enterprise – für kommerzielle Anwendungen

• Neo Technology– Entwicklung & Support– ~ 50 Personen / 6 Länder / 3 Kontinente– Total 24 Mio $ VC Finanzierung

Page 18: Daten natuerlich modellieren und verarbeiten mit Neo4j

18

Eigenschaften

• Objektorientiert, flexible Netzwerkstruktur• Support für ACID Transaktionen• Horizontal skalierbar• Java API

– Anbindung mittels Java, Groovy, Scala, JRuby• Runtime

– Standalone Server– Embedded Database

• Diskbasierter Storage Manager• Support für Erweiterungen und Testing

Page 19: Daten natuerlich modellieren und verarbeiten mit Neo4j

19

Wie komme ich an meine Daten?

Querying

Page 20: Daten natuerlich modellieren und verarbeiten mit Neo4j

20

Graph Querying

• Wie erhalte ich die richtigen Nodes aus dem Graphen?– Nenne mir alle Freunde und Freunde von Freunden

welche den Film XY mit mehr als 3 Sternen bewertet haben.

– ...

• Queryingmethoden– Traversing mit Neo4j API– Traversal Descriptions– Graphalgorithmen– Index Queries– Cypher Queries

Page 21: Daten natuerlich modellieren und verarbeiten mit Neo4j

21

Neo4j API

Node bob = ...;

for ((Relationship rel: bob.getRelationships(RelTypes.KNOWS)) {

Node friend = rel.getEndNode();

System.out.println(friend.getProperty("name"));

}

• Einfache, aber sehr „low level“ API• Zu „verbose“ für komplexe Traversals

Page 22: Daten natuerlich modellieren und verarbeiten mit Neo4j

22

Traversal API

• Beschreibt Bewegungen durch den Graphen• Callback basiert• Abfrage API für Graphen• Fluent API• Konstrukte

• Neo4j implementiert folgende Algorithmen:– A*– Dijkstra– pathsWithLength– shortestPath– allSimplePaths– allPaths

Page 23: Daten natuerlich modellieren und verarbeiten mit Neo4j

23

Traversal API – Konstrukte

Page 24: Daten natuerlich modellieren und verarbeiten mit Neo4j

24

Beispiel: Traversal API

TraversalDescription directFriends = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS).evaluator(Evaluators.toDepth(1)).evaluator(Evaluators.excludeStartPosition());

for(Path p : directFriends.traverse(bob)) {System.out.println(p.endNode().getProperty(„firstname“));

}

Page 25: Daten natuerlich modellieren und verarbeiten mit Neo4j

25

Index Queries

• Unterstützung von Node und Relationship Indices

• Lucene als Standard-implementierung

node id property value

15 name Alice

15 yearOfBirth 1972

16 name Bob

46 name Carol

46 yearOfBirth 1983

Page 26: Daten natuerlich modellieren und verarbeiten mit Neo4j

26

Cypher Query Language

• Graph Query Language ähnlich SQL• Deklarative Sprache• Definiert das „Was“ – nicht das „Wie“• Nutzt Pattern Matching• Support für

– Filterung– Paginierung

• Update-Funktionalität

Page 27: Daten natuerlich modellieren und verarbeiten mit Neo4j

27

Cypher Query Language – Elemente

Element Bedeutung

START Startelement(e) (Angabe von Index- o. Id-Lookup)

MATCH Pattern für zu findende Knoten, beschrieben durch Pfade auf Identifiern (a) –[knows]-> (b)

WHERE Resultatsfilterung (boolean-Ausdruck)

SKIP LIMIT Paginierung

RETURN Definiert Rückgabe-Elemente

ORDER BY Sortierung nach Properties

PARAMETERS Parameter-Map, die im Cypher mittels Key oder Position verwendet werden kann

CREATE Erzeugt einen Knoten

Page 28: Daten natuerlich modellieren und verarbeiten mit Neo4j

28

Beispiel: Cypher Query

String query = "START person=node(12) “+ “MATCH person-[:KNOWS]-friend “+ “RETURN friend“;

ExecutionEngine engine = new ExecutionEngine(graphDb);ExecutionResult result = engine.execute(query);

Iterator<Object> column = result.columnAs("friend");while(column.hasNext()) {

Node friendNode = (Node)column.next();System.out.println(friendNode.getProperty(PROP_FIRSTNAME));

}

Page 29: Daten natuerlich modellieren und verarbeiten mit Neo4j

29

Beispiel: Cypher Create Query

CREATE (carol {name:“Carol“}) return carol;

+------------------------+| carol |+------------------------+| Node[1]{name:“carol“} |+------------------------+

START carol=node(1) CREATE (bob {name:“Bob"}), (bob)-[:knows]->(carol) return carol;

START carol=node(1) CREATE (apple {name:“Apple“,typ:“Fruit“}), (carol)-[:owns {number: 5}]->(apple);

Page 30: Daten natuerlich modellieren und verarbeiten mit Neo4j

30

Wie lese und schreibe ich Daten?

Import / Export

Page 31: Daten natuerlich modellieren und verarbeiten mit Neo4j

31

Erzeugung von Nodes mit Java

org.neo4j.graphdb.GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

Transaction tx = graphDb.beginTx();

try {Node peter = createNode(graphDb, "Peter");Node carol = createNode(graphDb, “Carol");peter.createRelationshipTo(carol, RelTypes.KNOWS);..

tx.success();} finally {tx.finish();}

public Node createNode(GraphDatabaseService graphDb, String firstname) {Node person = graphDb.createNode();person.setProperty(„firstname“, firstname);return person;

}

Page 32: Daten natuerlich modellieren und verarbeiten mit Neo4j

32

NeoClipse

Page 33: Daten natuerlich modellieren und verarbeiten mit Neo4j

33

Thinkerpop – Blueprint

Thinkerpop Blueprint Extensions• GraphML Reader/Writer

Library• GraphSon Reader/Writer

Library• GML Reader/Writer Library• Java Universal

Network/Graph Framework

Page 34: Daten natuerlich modellieren und verarbeiten mit Neo4j

34

GraphML

• GraphML (http://graphml.graphdrawing.org/ )– Standardisierte Beschreibungssprache für Graphen– Modellierungswerkzeuge– XML

<graph id="G" edgedefault="directed"> <node id="n0"/> <node id="n1"/>

<edge source="n0" target="n1"/> </graph>

Page 35: Daten natuerlich modellieren und verarbeiten mit Neo4j

35

Neo4j Bordmittel

• GraphML– Gremlin Plugin

• CSV– BatchInserter– ParallelBatchInserter

Page 36: Daten natuerlich modellieren und verarbeiten mit Neo4j

36

Nützliche Helfer bei der täglichen Arbeit

Tools & APIs

Page 37: Daten natuerlich modellieren und verarbeiten mit Neo4j

37

Tools & APIs (2)

• Admin Web-Interface– Datenübersicht– Abfrage– Commandline Tool

• Neo4j Shell– Commandline Tool– Send UNIX-like Commands via RMI (cd, ls, pwd)– Support für Cypher Queries

• REST API– Zugriff mittels HTTP und JSON– Clients für div. Sprache (Java, .NET, PHP, Ruby,...)

• Neoclipse– Eclipse basiertes Tool für graphische Darstellung– Filteroptionen für Teilgraphendarstellung

Page 38: Daten natuerlich modellieren und verarbeiten mit Neo4j

38

Tools & APIs (3)

• Gremlin Plugin– Groovy basierte Graph Traversal Language via REST

API– Graph importer

• Indexing– Lucene

• Third Party Libraries– Thinkerpop– Spring Data Neo4j (SDN)

• ...

Page 39: Daten natuerlich modellieren und verarbeiten mit Neo4j

39

Gibt es nur EINEN zentralen Datentopf?

Polyglot Persistence

Page 40: Daten natuerlich modellieren und verarbeiten mit Neo4j

40

Polyglot Persistence

Applikation

User Sessions Shopping Card Recommendations

Product Catalog Analytics Financial Data

Redis Riak Neo4j

MongoDB Casandra MySQL

Page 41: Daten natuerlich modellieren und verarbeiten mit Neo4j

41

Challenges and Highlights

Page 42: Daten natuerlich modellieren und verarbeiten mit Neo4j

42

Challenges

• Developer Onboarding

• Indexierung

• “Schemaänderungen” -> Migrationen

• Extrem viele Daten

• Oft neue Neo4j Releases

• Bugs – keine Showstopper

• Übersicht im Modell nicht verlieren / Dokumentation pflegen

Page 43: Daten natuerlich modellieren und verarbeiten mit Neo4j

43

Highlights

• Community mit gutem Support

• Sourcen auf Github

• Gute Performance

• Whiteboard friendliness

• Spring Programmier-Modell mit Spring Data Neo4j

Page 44: Daten natuerlich modellieren und verarbeiten mit Neo4j

44

Q&A

Page 45: Daten natuerlich modellieren und verarbeiten mit Neo4j

45

Herzlichen Dank!

Patrick Baumgartner, @patbaumgartner

patrick.baumgartner [at] swiftmind [dot] com

http://www.swiftmind.com @swiftmind


Recommended