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
© Copyright 2024 Paperzz