graf baze i neo4j - javacro conference · graf baze i neo4j . | 3 nosql baze (1) • key-value •...
TRANSCRIPT
| 1 Graf baze i Neo4j .
Graf baze i Neo4j
Vjeran Marčinko
Kapsch CarrierCom Croatia
| 2 Graf baze i Neo4j .
Kapsch – O kompaniji
| 3 Graf baze i Neo4j .
NoSQL baze (1)
• Key-value
• zasnovane na Amazon Dynamo arhitekturi
• K-V kolekcije
• Primjeri: Voldemort, Redis, Riak
• Big-Table
• zasnovane na Google BigTable arhitekturi
• big table strukture, column families
• Primjeri: HBase, Cassandra
• Document
• inspirirane od Lotus Notes-a
• K-V kolekcije unutar K-V kolekcija
• Primjeri: CouchDB, MongoDB
| 4 Graf baze i Neo4j .
NoSQL baze (2)
Graf
• zasnovane na teoriji graf struktura
• Primjeri:
• InfiniteGraph
• OrientDB
• Neo4j
• Visoka povezanost data modela:
• Normalizirani podaci (kao RDBMS)
• Izvlačenja informacija nepredviđenih u trenutku zapisa
• Teže horizontalno skaliranje
• Kada koristiti:
• Dosta „join” tablica (pretraga >1000x brža od RDBMS baza)
• Dosta polu-struktuiranih podataka
• Želite fleksibilan model
| 5 Graf baze i Neo4j .
Graf data model
Dijelovi graf data modela:
• Node-ovi
• Relacije između node-ova
• Property-ji na node-ovima i relacijama
Nema DB „scheme” ne postoje različiti „tipovi” node-ova aplikacijski sloj
brine o upisu!
| 6 Graf baze i Neo4j .
Graf data model – SQL ekvivalent
Grubi ekvivalent graf data modela u SQL bazi:
• Tablica „NODES”
• Tablica „RELATIONSHIPS”
| 7 Graf baze i Neo4j .
Skiciranje na ploči - graf
| 8 Graf baze i Neo4j .
Object-Relational Mapping
• OO model (npr. Java) bogatiji od SQL modela
• Problem referenciranja objekta po „ulozi”:
• OO model: višestruko klasificiranje objekta kroz različite jezične
konstrukcije (klasa, superklasa, interface, mixin, trait …) višestruke
„uloge” nekog objekta
• SQL model: klasificiranje objekta (recorda) po samo jednom tipu (tablici)
Primjer objektnog modela:
public class User implements UserOwner {
private UserOwner owner;
… }
public class Company implements UserOwner { …. }
public class Department implements UserOwner {…}
| 9 Graf baze i Neo4j .
Object-Graph Mapping
• Objektni model u
runtime-u je graf!
• Referenciranje
objekta po više
njegovih „uloga” se
implementira kao
različite relacije
prema jednom te
istom node-u
Objektni model Graf baza
Ti me kompletiraš!
| 10 Graf baze i Neo4j .
Područja primjene graf bazi
• Social data
• Geospatial
• Katalozi proizvoda
• Upravljanje sustavima
• Bioinformatika
• Business Intelligence
• Preporuke
| 11 Graf baze i Neo4j .
Neo4j - uvod
• trenutno najpopularnija graf baza
• vlasništvo Neo Technologies Inc.
• izrađena u Javi
• početak razvoja oko 2001.g., u 24/7 produkciji od 2004.g.
• transakcijska baza (ACID)
• nema scheme podataka
• klijenti za mnoge jezike: Java, Ruby, .NET, PHP, Scala, Clojure, Haskell …
• različiti deploymenti:
• embedded
• single server
• master-slave cluster
• milijarde zapisa na jednom stroju
| 12 Graf baze i Neo4j .
Neo4j – Cypher API - Uvod
• graf „pattern matching” jezik („SQL” za grafove)
• agregacije, sortiranje, offset, limit…
• mutacije podataka (create, update, delete)
• Deklarativan:
• Odredite početne node-ove (Lucene index)
• Odredite graf „pattern” ciljanih node-ova
• Algoritam se „ispod haube” prilagođava query-u
Brzina pretrage neovisna o količini podataka! (uglavnom)
| 13 Graf baze i Neo4j .
Neo4j – Cypher API - Pattern Matching
• Neimenovani node-ovi i relacije
• Imenovani node-ovi i relacije
• Umrežene strukture
( ) --> ( )
( A ) -[ :LOVES ]-> ( B )
( A ) --> ( B ) --> ( C ) <-- ( A )
| 14 Graf baze i Neo4j .
Neo4j – Cypher API – Primjer pretrage
Suradnici „Jim”-a koji dijele interese za iste teme?
| 15 Graf baze i Neo4j .
Neo4j – Cypher API – Primjer pretrage
START startEmployee = node:employees(name = „Jim”)
MATCH (startEmployee) – [ :WORKS_FOR ] -> (company),
(coworker) – [ :WORKS_FOR ] -> (company),
(startEmployee) – [ :INTERESTED_IN ] -> (topic),
(coworker) – [ :INTERESTED_IN ] -> (topic)
RETURN cowoker.name AS coworker_name,
count(topic) as common_topic_count
ORDER BY common_topic_count DESC
| 16 Graf baze i Neo4j .
Neo4j – Java API – Spring Data Neo4j
• Spring Data projekt
• POJO-centričan (anotacije)
• Template-centričan (Neo4jTemplate)
• Inversion-of-Control
• Spring XML namespaces
• Mapiranje graf modela:
• Node @NodeEntity klasa
• Relacija @RelationshipEntity klasa
• Property Field-ovi u klasama
| 17 Graf baze i Neo4j .
Neo4j – Java API – Spring Data Neo4j - Primjer
@NodeEntity
public class Actor {
@RelatedToVia(type = „ACTS_IN”)
private Set<Role> roles;
private String name;
}
@RelationshipEntity
public class Role {
@StartNode private Actor actor;
@EndNode private Movie movie;
private String roleName;
…
}
| 18 Graf baze i Neo4j .
Neo4j - web konzola
| 19 Graf baze i Neo4j .
Vizualiziranje grafa (1)
Tablice, bar/pie chartovi…?
Hmmm…
Graf ima jedinstvenu strukturu.
ISKORISTITE TO!
Kako prikazati graf?
Budite atraktivni!
| 20 Graf baze i Neo4j .
Vizualiziranje grafa (2)
• Max de Marzi Blog
• D3 Javascript lib
• Gephi tool
• VivaGraphJS
• …
| 21 Graf baze i Neo4j .
The end my friend…
Hvala!