Vjeran Marčinko

Graf baze i Neo4j
Vjeran Marčinko
Kapsch CarrierCom Croatia
Graf baze i Neo4j
.
|1
Kapsch – O kompaniji
Graf baze i Neo4j
.
|2
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
Graf baze i Neo4j
.
|3
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
Graf baze i Neo4j
.
|4
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!
Graf baze i Neo4j
.
|5
Graf data model – SQL ekvivalent
Grubi ekvivalent graf data modela u SQL bazi:
• Tablica „NODES”
• Tablica „RELATIONSHIPS”
Graf baze i Neo4j
.
|6
Skiciranje na ploči - graf
Graf baze i Neo4j
.
|7
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 {…}
Graf baze i Neo4j
.
|8
Object-Graph Mapping
Ti me kompletiraš!
• 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 baze i Neo4j
Graf baza
.
|9
Područja primjene graf bazi
•
•
•
•
•
•
•
Social data
Geospatial
Katalozi proizvoda
Upravljanje sustavima
Bioinformatika
Business Intelligence
Preporuke
Graf baze i Neo4j
.
| 10
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
Graf baze i Neo4j
.
| 11
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)
Graf baze i Neo4j
.
| 12
Neo4j – Cypher API - Pattern Matching
• Neimenovani node-ovi i relacije
( ) --> ( )
• Imenovani node-ovi i relacije
( A ) -[ :LOVES ]-> ( B )
• Umrežene strukture
( A ) --> ( B ) --> ( C ) <-- ( A )
Graf baze i Neo4j
.
| 13
Neo4j – Cypher API – Primjer pretrage
Suradnici „Jim”-a koji dijele interese za iste teme?
Graf baze i Neo4j
.
| 14
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
Graf baze i Neo4j
.
| 15
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
Graf baze i Neo4j
.
| 16
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;
…
}
Graf baze i Neo4j
.
| 17
Neo4j - web konzola
Graf baze i Neo4j
.
| 18
Vizualiziranje grafa (1)
Kako prikazati graf?
Tablice, bar/pie chartovi…?
Hmmm…
Graf ima jedinstvenu strukturu.
ISKORISTITE TO!
Graf baze i Neo4j
Budite atraktivni!
.
| 19
Vizualiziranje grafa (2)
•
•
•
•
•
Graf baze i Neo4j
Max de Marzi Blog
D3 Javascript lib
Gephi tool
VivaGraphJS
…
.
| 20
The end my friend…
Hvala!
Graf baze i Neo4j
.
| 21