26
Application Modeling with Graph Databases – Relationships are cool! Lars Martin, JUG Saxon y Day, 04.04.2014

Application Modeling With Graph Databases - Relationships are cool!

Embed Size (px)

DESCRIPTION

My slides on Application Modeling with Graph Databases at JUG Saxony Day 2014.

Citation preview

  • Application Modeling with Graph Databases Relationships are cool!

    Lars Martin, JUG Saxony Day, 04.04.2014

  • Application Modeling with Graph Databases Relationships are cool!

    Developer, Architect, Consultant

    Java Enterprise, Eclipse, Continuous

    Entrepreneur since 1998

    Whos the guy?

  • Agenda

    Status Quo

    SQL Join Hell

    Graph Basics

    Application Modeling

    Application Modeling with Graph Databases Relationships are cool!

  • Application Modeling with Graph Databases Relationships are cool!

    Status Quo

    http://db-engines.com/en/ranking_definition

  • Application Modeling with Graph Databases Relationships are cool!

    SQL Join Hell (1)

    Customer Id Name Address

    1 Robert 3 2 Lars 7 3 Michael 23

    Address Id Location

    3 Berlin 4 Munich 7 Dresden

    23 Leipzig

    CustomerAddress CId AId

    1 3 2 7 2 8 3 23

    Address Id Location

    3 Berlin 7 Dresden 8 New York

    23 Leipzig

    Address Id Customer Location

    3 1 Berlin 7 2 Dresden 8 2 New York

    23 3 Leipzig

    Customer Id Name

    1 Robert 2 Lars 3 Michael

    1:1 Relationship

    m:n Relationship

    1:n Relationship

    Customer Id Name

    1 Robert 2 Lars 3 Michael

  • Application Modeling with Graph Databases Relationships are cool!

    SQL Join Hell (2)

  • Application Modeling with Graph Databases Relationships are cool!

    SQL Join Hell (3)

    all JOINs are executed every time you query (traverse) the relationship

    executing a JOIN means to search for a key in another table

    with Indices executing a JOIN means to lookup a key B-Tree Index: O(log(n)) more entries more lookups slower JOINs

  • Application Modeling with Graph Databases Relationships are cool!

    Graphs a Crash Course in Coolness

    G = (V, E) G

    raph

    Vert

    ex

    Edge

    h"p://de.wikipedia.org/wiki/Graph_(Graphentheorie)

  • Application Modeling with Graph Databases Relationships are cool!

    Graphs a Crash Course in Coolness

  • Application Modeling with Graph Databases Relationships are cool!

    Graphs a Crash Course in Coolness

    Vertices unique identifier outgoing edges incoming edges key/value pairs Edges unique identifier start vertex end vertex type key/value pairs

    https://github.com/tinkerpop/gremlin/wiki/Defining-a-Property-Graph

    index-free adjacency ( O(1))

  • Application Modeling with Graph Databases Relationships are cool!

    Real World Graphs (1)

    maps closely to the data model noun = vertex verb = edge

  • Application Modeling with Graph Databases Relationships are cool!

    Real World Graphs (2)

    whiteboard friendly

  • Application Modeling with Graph Databases Relationships are cool!

    Social: Facebook, Twitter, LinkedIn Recommendations: Amazon, MovieDB

    Logistics: Package Routing

    Financial: Fraud Detection Software: Dependency Management

    Authorization & Access Control:

    Real World Graphs (3)

  • Application Modeling with Graph Databases Relationships are cool!

    Social: Facebook, Twitter, LinkedIn Recommendations: Amazon, MovieDB

    Logistics: Package Routing

    Financial: Fraud Detection Software: Dependency Management

    Authorization & Access Control:

    Real World Graphs (3)

    our area of activities

  • Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

    Spring Data projects.spring.io/spring-data

    Spring Data Neo4j supports property graph features

    XO - eXtended Objects github.com/buschmais/xo

    Lightweight Datastore-agnostic ORM Implementation of Composite Pattern Interface based (no POJOS), multiple inheritance XO-Neo4j supports property graph features

  • Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

  • Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

    @Labelpublic interface User { @Indexed(unique = true) String getName(); void setName(String name); @Relation("POSTED") @Outgoing Set getTweets(); @Relation("FOLLOWS") @Outgoing Set getFollowing();}

    @Labelpublic interface Tweet { @Indexed(unique = true) long getTweetId(); void setTweetId(long id); String getText(); void setText(String text); @Relation("POSTED") @Incoming User getSender(); void setSender(User sender); @Relation("MENTIONED") @Outgoing Set getMentions();

    }

  • MATCH(me)-[:POSTED]->(tweet)-[:MENTIONED]->(user)

    WHEREme.name = 'Neo4j AND NOT (me)-[:FOLLOWS]->(user)

    WITHuser ORDER BY user.name

    RETURNDISTINCT user

    Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

    @ResultOf@Cypher("MATCH (me)-[:POSTED]->(tweet)-[:MENTIONED]->(user) WHERE id(me) = id({this}) AND NOT (me)-[:FOLLOWS]->(user) WITH user ORDER BY user.name RETURN DISTINCT user")Result suggestFriends();

  • Demo

    Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

  • Relational Database tabular data structures

    Graph Database

    connected data, esp. multiple degrees

    schema-less

    Application Modeling with Graph Databases Relationships are cool!

    Application Modeling

    A relational database may tell you the average age of everyone in this place

    but a graph database will tell you who is most likely to buy you a beer.

  • SMB GmbH Plauenscher Ring 21 D-01187 Dresden

    Dipl.-Inf. Lars Martin +49-(0)173-64 24 461 [email protected]