Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Neo4jgrafová databáze Michal Bachman   @bachmanm #webexpo #neo4j
Not Only SQL          @bachmanm
Objem dat            @bachmanm
Propojenost dat                                                                                      GGG                  ...
Ztráta struktury                   @bachmanm
Architektura aplikací (80’s)                     Aplikace                       DB                                @bachmanm
Architektura aplikací (90’s)                 Aplikace   Aplikace   Aplikace                              DB               ...
Aplikace   Aplikace   Aplikace  DB         DB         DB                                 @bachmanm
Výkonnost RDBMS            Seznam zaměstnanců                       Relační databáze                                      ...
Čtyři kategorie NOSQL                        @bachmanm
Grafové databáze                   @bachmanm
@bachmanm
http://en.wikipedia.org/wiki/File:Leonhard_Euler_2.jpg   @bachmanm
http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg   @bachmanm
name: Michal Bachman• vrcholy, uzly (nodes, vertices)• hrany (relationships, edges)                                    tit...
• Výkonný datový model        • Shardování• Rychlost                      – Ale jsou poměrně dobře  – Několikanásobně     ...
Výkonnost na příkladu sociální sítě         (existuje cesta?)• Experiment:  • cca 1000 lidí                  # lidí   čas ...
Výkonnost na příkladu sociální sítě         (existuje cesta?)• Experiment:  • cca 1000 lidí                  # lidí   čas ...
Výkonnost na příkladu sociální sítě         (existuje cesta?)• Experiment:  • cca 1000 lidí                  # lidí    čas...
Použití grafů•   Sociální sítě•   Doporučovací systémy•   Telekomunikační sítě•   Business intelligence•   Geoprostorové p...
Graf nakreslíte na tabuli                            @bachmanm
@bachmanm
Neo4j        @bachmanm
32 miliard vrcholů32 miliard hran64 miliard vlastností                        @bachmanm
@bachmanm
http://opfm.jpl.nasa.gov/                      @bachmanm
http://news.xinhuanet.com                       @bachmanm
@bachmanm
@bachmanm
Community  Advanced    Enterprise                 @bachmanm
Server mode  – cd <install directory>  – bin/neo4j start  – bin/neo4j stop• REST API• JMX, prohlížeč dat, vizualizace     ...
Embedded mode• Ve stejném procesu, jako aplikace  – Stáhnout .jar knihovny  – Nasměrovat na místo na disku• Embedded mode ...
name: Jan Šrůtektitle: Kognitivní psychologieduration: 30                                            name: Michal Bachman ...
GraphDatabaseService neo = new EmbeddedGraphDatabase("/data/webexpo");Transaction tx = neo.beginTx();try {      Node speak...
@bachmanm
Core API• Vrcholy  – Vlastnosti (volitelné KV páry)• Hrany  – Počáteční vrchol (start, povinný)  – Konečný vrchol (konec, ...
Jaká jsou na WebExpu témata? (Give me all WebExpo topics)                           @bachmanm
name: Jan Šrůtektitle: Kognitivní psychologieduration: 30                                            name: Michal Bachman ...
Jaká jsou na WebExpu témata?    Node webExpo = neo.getReferenceNode();    for (Relationship talksAt : webExpo.getRelations...
Na jaké přednášky mám jít?(Which talks should I attend?)                             @bachmanm
name: Jan Šrůtektitle: Kognitivní psychologieduration: 30                                            name: Michal Bachman ...
Na jaké přednášky mám jít?   TraversalDescription talksTraversal = Traversal.description()        .uniqueness(Uniqueness.N...
Co máme společného?(What do we have in common?)                          @bachmanm
name: Jan Šrůtektitle: Kognitivní psychologieduration: 30                                            name: Michal Bachman ...
Co máme společného?      //retrieve attendeeOne and attendeeTwo from index      int maxDepth = 2;      Iterable<Path> path...
Y U No Like Java?                    @bachmanm
S kým na pivo?         (Who is my beer mate?)myself                       beerMate:?                talk:?                ...
S kým na pivo?(myself)                    (beerMate)               (talk)                                  @bachmanm
S kým na pivo?start myself=node:people(name = "Emil Votruba")match (myself)-[:LIKED]->(talk)<-[:LIKED]-(beerMate)return di...
Cypher Querystart myself=node:people(name = ”Aleš Havlík")match (myself)-[:LIKED]->(talk)<-[:LIKED]-(beerMate)return disti...
Cypher Querystart myself=node:people(name = ”Aleš Havlík")match (myself)-[:LIKED]->()<-[:LIKED]-(beerMate)return distinct ...
S kým na pivo?                 @bachmanm
Novinky a budoucnost• Verze 1.8.RC1 vydána tento měsíc• Cypher dotazy mohou zapisovat do grafu  – CREATE, SET, DELETE, …• ...
Tipy a triky•   Design!•   Nepoužívejte interní ID mimo Neo4j•   Vyvarujte se operací přes celý graf•   “Tales from the Tr...
Závěr• Neo4j 1.8 community edition je zdarma• Grafy mají expresivní datový model• Neo4j rychle prochází grafy  – Žádné joi...
http://www.561studios.com/blog/wp-content/uploads/2010/07/commonsense.jpg
Otázky?Neo4j: http://neo4j.orgNeo Technology: http://neotechnology.comOpenCredo: http://opencredo.comJá: @bachmanmKód: git...
WebExpo Prague 2012 - Introduction to Neo4j (Czech)
Nächste SlideShare
Wird geladen in …5
×

WebExpo Prague 2012 - Introduction to Neo4j (Czech)

5.404 Aufrufe

Veröffentlicht am

Slides from my talk (in Czech) about Neo4j at WebExpo Prague on 22nd September 2012.

Veröffentlicht in: Technologie
  • Login to see the comments

WebExpo Prague 2012 - Introduction to Neo4j (Czech)

  1. 1. Neo4jgrafová databáze Michal Bachman @bachmanm #webexpo #neo4j
  2. 2. Not Only SQL @bachmanm
  3. 3. Objem dat @bachmanm
  4. 4. Propojenost dat GGG Ontologie RDFaPropojenost informací Folksonomie Tagování Wiki UGC Blogy Feedy Hypertext Textové dokumenty @bachmanm
  5. 5. Ztráta struktury @bachmanm
  6. 6. Architektura aplikací (80’s) Aplikace DB @bachmanm
  7. 7. Architektura aplikací (90’s) Aplikace Aplikace Aplikace DB @bachmanm
  8. 8. Aplikace Aplikace Aplikace DB DB DB @bachmanm
  9. 9. Výkonnost RDBMS Seznam zaměstnanců Relační databáze Náročnost aplikace Spousta webových aplikacíVýkonnost Sociální síť Lokační služby Komplexita dat @bachmanm
  10. 10. Čtyři kategorie NOSQL @bachmanm
  11. 11. Grafové databáze @bachmanm
  12. 12. @bachmanm
  13. 13. http://en.wikipedia.org/wiki/File:Leonhard_Euler_2.jpg @bachmanm
  14. 14. http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg @bachmanm
  15. 15. name: Michal Bachman• vrcholy, uzly (nodes, vertices)• hrany (relationships, edges) title: Intro to Neo4j• vlastnosti (properties) duration: 45 name: Neo4j name: NOSQL @bachmanm
  16. 16. • Výkonný datový model • Shardování• Rychlost – Ale jsou poměrně dobře – Několikanásobně škálovatelné rychlejší pro propojená – Některé grafy se data ve srovnání s shardovat dají RDBMS @bachmanm
  17. 17. Výkonnost na příkladu sociální sítě (existuje cesta?)• Experiment: • cca 1000 lidí # lidí čas dotazu • Každý průměrně 50 Relační 1000 2000ms databáze kamarádů • pathExists(a,b) do hloubky 4 • Cached (nečteme z disku) @bachmanm
  18. 18. Výkonnost na příkladu sociální sítě (existuje cesta?)• Experiment: • cca 1000 lidí # lidí čas dotazu • Každý průměrně 50 Relační 1000 2000ms databáze kamarádů Neo4j 1000 2ms • pathExists(a,b) do hloubky 4 • Cached (nečteme z disku) @bachmanm
  19. 19. Výkonnost na příkladu sociální sítě (existuje cesta?)• Experiment: • cca 1000 lidí # lidí čas dotazu • Každý průměrně 50 Relační 1000 2000ms databáze kamarádů Neo4j 1000 2ms • pathExists(a,b) Neo4j 1000000 2ms do hloubky 4 • Cached (nečteme z disku) @bachmanm
  20. 20. Použití grafů• Sociální sítě• Doporučovací systémy• Telekomunikační sítě• Business intelligence• Geoprostorové problémy• MDM• ACL (access control lists)• Rodokmeny• Časové řady dat• Web analytics• Vědecká informatika (zejména bioinformatika)• Indexování pomalých RDBMS• Spousta dalších…! @bachmanm
  21. 21. Graf nakreslíte na tabuli @bachmanm
  22. 22. @bachmanm
  23. 23. Neo4j @bachmanm
  24. 24. 32 miliard vrcholů32 miliard hran64 miliard vlastností @bachmanm
  25. 25. @bachmanm
  26. 26. http://opfm.jpl.nasa.gov/ @bachmanm
  27. 27. http://news.xinhuanet.com @bachmanm
  28. 28. @bachmanm
  29. 29. @bachmanm
  30. 30. Community Advanced Enterprise @bachmanm
  31. 31. Server mode – cd <install directory> – bin/neo4j start – bin/neo4j stop• REST API• JMX, prohlížeč dat, vizualizace @bachmanm
  32. 32. Embedded mode• Ve stejném procesu, jako aplikace – Stáhnout .jar knihovny – Nasměrovat na místo na disku• Embedded mode má naprostou většinu funkcí @bachmanm
  33. 33. name: Jan Šrůtektitle: Kognitivní psychologieduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Aleš Havlík INTERESTED name: Neo4j name: NOSQL @bachmanm
  34. 34. GraphDatabaseService neo = new EmbeddedGraphDatabase("/data/webexpo");Transaction tx = neo.beginTx();try { Node speaker = neo.createNode(); speaker.setProperty("name", "Michal Bachman"); Node talk = neo.createNode(); talk.setProperty("title", "Intro to Neo4j"); Relationship delivers = speaker.createRelationshipTo(talk, DynamicRelationshipType.withName("DELIVERS")); delivers.setProperty("day", ”Saturday"); neo.index().forNodes("people") .add(speaker, "name", "Michal Bachman");} finally { tx.finish();} name: Michal Bachman DELIVERS title: Intro to Neo4j day: Saturday @bachmanm
  35. 35. @bachmanm
  36. 36. Core API• Vrcholy – Vlastnosti (volitelné KV páry)• Hrany – Počáteční vrchol (start, povinný) – Konečný vrchol (konec, povinný) – Vlastnosti (volitelné KV páry) @bachmanm
  37. 37. Jaká jsou na WebExpu témata? (Give me all WebExpo topics) @bachmanm
  38. 38. name: Jan Šrůtektitle: Kognitivní psychologieduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Aleš Havlík INTERESTED name: Neo4j name: NOSQL @bachmanm
  39. 39. Jaká jsou na WebExpu témata? Node webExpo = neo.getReferenceNode(); for (Relationship talksAt : webExpo.getRelationships(INCOMING, TALKS_AT)) { Node speaker = talksAt.getStartNode(); for (Relationship delivers : speaker.getRelationships(OUTGOING, DELIVERS)) { Node talk = delivers.getEndNode(); for (Relationship about : talk.getRelationships(OUTGOING, ABOUT)) { String topicName = (String) about.getEndNode().getProperty(NAME); //add to result... } } }-------------------Printing all topicsAll topics: development, data, advertising, education, usa, business, microsoft, webdesign, software,responsiveness, ux, e-commerce, php, psychology, crm, api, chef, javascript, patterns, product design,marketing, metro, social media, web, startup, analytics, lean, cqrs, node.js, branding, cloud, testing, neo4j,rest, css, design, publishing, nosql. Took: 2 ms
  40. 40. Na jaké přednášky mám jít?(Which talks should I attend?) @bachmanm
  41. 41. name: Jan Šrůtektitle: Kognitivní psychologieduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Aleš Havlík INTERESTED name: Neo4j name: NOSQL @bachmanm
  42. 42. Na jaké přednášky mám jít? TraversalDescription talksTraversal = Traversal.description() .uniqueness(Uniqueness.NONE) .breadthFirst() .relationships(INTERESTED, OUTGOING) .relationships(ABOUT, INCOMING) .evaluator(Evaluators.atDepth(2)); Node attendee = neo.index().forNodes("people").get("name", ”Aleš Havlík").getSingle(); Iterable<Node> talks = talksTraversal.traverse(attendee).nodes(); //iterate over talks and print------------------------------------------Suggesting talks for 100 random attendees....Aneta Lebedová: Co nezměříš, nezměníš!, Do ameriky, The real me. Took: 1 msBohumír Kubát: Beyond the polar bear, Jak (ne)dělat api, Critical interface design. Took: 1 msVladimír Valeš: Vývoj aplikací pro windows 8 metro. Took: 1 msSuggested talks for 100 random attendees in 449 ms
  43. 43. Co máme společného?(What do we have in common?) @bachmanm
  44. 44. name: Jan Šrůtektitle: Kognitivní psychologieduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Aleš Havlík INTERESTED name: Neo4j name: NOSQL @bachmanm
  45. 45. Co máme společného? //retrieve attendeeOne and attendeeTwo from index int maxDepth = 2; Iterable<Path> paths = GraphAlgoFactory .allPaths(Traversal.expanderForAllTypes(), maxDepth) .findAllPaths(attendeeOne, attendeeTwo); for (Path path : paths) { //print it }------------------------------------------------------------Finding things in common for 100 random couples of attendees...Karel Kunc and Aleš Matějka:(Karel Kunc)--[INTERESTED]-->(ux)<--[INTERESTED]--(Aleš Matějka),(Karel Kunc)--[DISLIKED]-->(Buď punkový konzument!)<--[DISLIKED]--(Aleš Matějka),(Karel Kunc)--[DISLIKED]-->(Beyond the polar bear)<--[LIKED]--(Aleš Matějka),(Karel Kunc)--[LIKED]-->(Shipito.com - podnikání v usa)<--[LIKED]--(Aleš Matějka).Took: 0 ms....Found things in common for 100 random couples of attendees in 142 ms.
  46. 46. Y U No Like Java? @bachmanm
  47. 47. S kým na pivo? (Who is my beer mate?)myself beerMate:? talk:? @bachmanm
  48. 48. S kým na pivo?(myself) (beerMate) (talk) @bachmanm
  49. 49. S kým na pivo?start myself=node:people(name = "Emil Votruba")match (myself)-[:LIKED]->(talk)<-[:LIKED]-(beerMate)return distinct beerMate.name, count(beerMate)order by count(beerMate) desclimit 5; @bachmanm
  50. 50. Cypher Querystart myself=node:people(name = ”Aleš Havlík")match (myself)-[:LIKED]->(talk)<-[:LIKED]-(beerMate)return distinct beerMate.name, count(beerMate)order by count(beerMate) desclimit 5; @bachmanm
  51. 51. Cypher Querystart myself=node:people(name = ”Aleš Havlík")match (myself)-[:LIKED]->()<-[:LIKED]-(beerMate)return distinct beerMate.name, count(beerMate)order by count(beerMate) desclimit 5; @bachmanm
  52. 52. S kým na pivo? @bachmanm
  53. 53. Novinky a budoucnost• Verze 1.8.RC1 vydána tento měsíc• Cypher dotazy mohou zapisovat do grafu – CREATE, SET, DELETE, …• “Labels” pro vrcholy (1.9?)• Zaměření na škálovatelnost a shardování @bachmanm
  54. 54. Tipy a triky• Design!• Nepoužívejte interní ID mimo Neo4j• Vyvarujte se operací přes celý graf• “Tales from the Trenches” pro další tipy• Experimetujte: git@github.com:bachmanm/neo4j- webexpo.git @bachmanm
  55. 55. Závěr• Neo4j 1.8 community edition je zdarma• Grafy mají expresivní datový model• Neo4j rychle prochází grafy – Žádné joiny – Žádné šílené indexy – Žádný map reduce• Podpora nejen Javy @bachmanm
  56. 56. http://www.561studios.com/blog/wp-content/uploads/2010/07/commonsense.jpg
  57. 57. Otázky?Neo4j: http://neo4j.orgNeo Technology: http://neotechnology.comOpenCredo: http://opencredo.comJá: @bachmanmKód: git://github.com/bachmanm/neo4j-webexpo.git

×