Neo4j Introduction at Imperial College London

1,611 views

Published on

Slides from January 22nd 2013

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,611
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • WelcomeIntroduce myself, NeoTechMotivations:Presented this at a conference Conversations with FriendsTalked to Serena, no affiliationBigData and NOSQL popular termsGraphs are getting more and more popular (Facebook)Not much attention at ImperialAsk about the audience, heard about graph databases? Graphs? Databases?Outcomes:Learn about a new technologySee application of graph theory in practiceTailored to students (not industry)Agenda:Intro to NOSQLIntro to Graph DatabasesIntro to Neo4jPractical part – how to work with oneReal experiencesCurrent researchQ & A
  • Why now?Not woke up one day thinking Rel DBs are not cool any moretrends
  • Generate, process, store and work with
  • UGC = User Generated ContentGGG = Giant Global Graph (what the web will become)– každýkousíček, každájednotkazajímavýchdat je sémantickypropojená s každoudalšízajímavoujednotkoudat (Tim Berners-Lee)Data jsoupropojenější (lineárně)RDFa (Resource Description Framework in attributes), českysystémpopisuzdrojů v atributech, je technologie pro přenosstrukturovanýchinformacíuvnitřwebovýchstránek. RDFa je jedenzezpůsobůzápisu (serializace) datovéhoformátu Resource Description Framework (RDF). Ontologie je v informaticevýslovný (explicitní) a formalizovanýpopisurčitéproblematiky. Je to formální a deklarativníreprezentace, kteráobsahujeglosář (definicipojmů) a tezaurus (definicivztahůmezijednotlivýmipojmy). Ontologie je slovníkem, kterýslouží k uchovávání a předáváníznalostitýkající se určitéproblematiky.
  • Data losing predictable structureIndividualisation of data, can’t box each individual, want data about meShape of data, less predictable structureDecentralisation of data creation accelerates this trend
  • Apps can choose what makes sense to store the data
  • This is strictly about connected data – joins kill performance there.No bashing of RDBMS performance for tabular transaction processing
  • Krásavesvětě NOSQL - nikdovámnepřikazuje, vybratdatabázi, kteráodpovídátypučicharakteristicedat, se kterýmipracujete. key-value databáze: jedenklíč - jednahodnota, hash mapy, Redis, Riak (Amazon Dynamo), Většinouvysocetolerantnívůčivýpadkům, Jednoduchýdatový model, Vynikajícíhorizontálníškálovatelnost, Dostupnost, BigTabledatabáze: k-vvvvvvv store s implicitnímiindexy, Cassandra (Google), PodporačástečněstrukturovanýchdatAutomatický index (sloupce), Dobráhorizontálníškálovatelnost, opětnevhodné pro propojená dataDokumentovédatabáze, známá je například subversion, MongoDB, CouchDB, …Kolekcedokumentů, Dokument je kolekce key-value párů, Index je důležitý, hodně map-reduce,Škálovatelnostcelkemdobrá. (Ne takjako key-value, složitějšímdatovýmmodelem, Jednoduchý a výkonýdatový model, jako subversion.Nevýhodouvšech 3 je nejsouúplněvhodné pro hustěpropojená data. Přílišjednoduchýdatový (HashMap, rychlá, ale…) model znamená, žechceme-li získatjakékolivokamžitéhlubšíporozuměníuloženýmdatům. Musí to býtzodpovědnostíaplikačnívrstvy (čili to musímenějaknaprogramovat). Velmičastojsoutedytytodatabázespojeny s frameworkyjako Map-Reduce, pro kterémusímevytvořitúlohy, kterénámtotoporozuměníumožnízískat.Map-reduce je dávkováoperace (to bychuvedl v kontrastu s on-line / in-the-click-stream synchronníoperací), abystezískalipohlednavašepropojená data.Všechny 3 pracují s agregovanýmidaty, tzn. Ževyžadujístruktutupředem, data, kterápatřílogicky k sobě (jakoobjednávka a jejíjednotlivépoložky), jsou v databáziuloženy u sebe a je k nimtaké v dotazechpřistupovánojako k celku. V key-value úložištích je tímcelkemhodnota, v CF CF a v Dok. Dbsdokumenty.OKvpřípadech, kdypřístup k datůmvyžadujepřesnětutostrukturu. Pokud se ale chcemena data podívatjinak, napříkladanalyzovat z objednávekcelkovéprodejejednotlivýchproduktů, musíme s toustrukturoutrochubojovat a to je ten důvod, proč se tolikmluví o map-reduce vespojení s těmitodatabázemi. Výhodouukládánídat v neagregovanýchformách je to, že se dajíanalyzovat a prezentovat z různáchúhlůpohledy v závislotinakonkrétnímpřípadě.A samozřejměgrafovédatabáze, kvůlikterýmtudnesjsme a o kterých se tohodozvíme o něcovíczaminutku
  • History – Amazon decide that they always wanted the shopping basket to be available, but couldn’t take a chance on RDBMSSo they built their ownBig risk, but simple data model and well-known computing science underpinning it (e.g. consistent hashing, Bloom filters for sensible replication)+ Massive read/write scale- Simplistic data model moves heavy lifting into the app tier (e.g. map reduce)
  • Mongo DB has a reputation for taking liberties with durability to get speedCouch DB has good multimaster replication from Lotus Notes
  • People talk about Codd’s relational model being mature because it was proposed in 1969 – 42 years old.Euler’s graph theory was proposed in 1736 – 275 years old.
  • Can’t easily shard graphs like documents or KV stores.This means that high performance graph databases are limited in terms of data set size that can be handled by a single machine.Can use replicas to speed things up (and improve availability) but limits data set size limited to a single machine’s disk/memory.Some domains can shard easily (.e.g geo, most web apps) using consistent routing approach and cache sharding – we’ll cover that later.
  • Teoriegrafůzkoumávlastnostistruktur, zvanýchgrafy. Ty jsoutvořenyvrcholy, kteréjsouvzájemněspojenéhranami. Znázorňuje se obvyklejakomnožinabodůspojenýchčárami. Formálně je grafuspořádanoudvojicímnožinyvrcholů V a množinyhran E.
  • SedmmostůměstaKrálovce (dnes Kaliningrad)Kdodělá pro velkoufirmu, tímmyslímněkolikvrstevmanagementu, softwarovýarchitektnajinémpatřenežvývojářiTatoinformace je pro Vás, v těchtofirmáchbývátěžképrosadit “nové” technologie. Ale relační model, se kterýmpřišel E.F. Codd v roce 1969, je pouze 43 let starý. Grafový model je 276 starý. TakžepříštěažVámšéfnebochytrýarchitektřeknenaadopci NOSQL něcovesmyslu “tadypoužívámejenomzralé a prokázanévyspělétechnologie”, víte, kterýmsměrem ho máteposlat… tímmámnamyslitřebatutopřednáškunawebunebopříslušnéstránkynawikipedii. Takžejakukládáme data v grafu…
  • Takžejakukládáme data v grafu…V grafuukládámedata jakovrcholy a vrcholyjsouvlastnědokumenty, kterémodoumítlibovolnéklíče a k nimpřiřazenéhodnoty. Stejnějakodokument v MongoDB. V čem se grafliší od MongoDB je že v grafujsouvztahymezivrcholy. A to je trade-off, MongoDB je lépeškálovatelné, protožetohlenedělá. Neo4J je lepší pro propojená data, tohledělá. Ukládávztahymezijednotlivýmivrcholy. Ale nenítakdobřeškálovatelné. A do musímevzít v potazpřiřešeníVašichproblémů: chcetemasivníškálovatelnost, nebookamžitýnáhled do propojenostiVašich dat. POPSAT GRAFVztahymajisemantickyvyznam! Recnici, prednasky v RDBMSJe to poměrněintuitivnízpůsobukládánídat! Úkolgrafovédatabáze je vzíttatointuitivní data, kterásimůžemejednodušenačrtnoutnatabulinebokuspapíru a rychle je procházetvevašichprogramech.
  • A to je jednahezkávlastnostgrafů – jsouideální pro tabule,zadnístranyobálek, pivníchtácků a krabiček od cigaret… to jsouvěci, nakterýchtynejlepšídesigny (zejménavestartupech) většinouvznikajíJájsemsivybraljakopříkladWebExpo, původnějsemchtělzmapovatkorupčníaféryčeskýchpolitiků, ale tohle je o něconeškodnější. Vztahymeziřečníky, přednáškam, tématy, účastníky a podobněsimůžemenakreslitnapivnítácek! WebExpo je doména,kterámáspoustuvztahů – řečnícimajípřednášky, …To simůžetejednodušenakreslitnatabuli, to je mimochodem to, co dělámejakoprogramátoři, kdyžsedíme s lidmi, kteřípotřebujínějakýkussoftwaru a my se snažímetomu business problému, tédoméněporozumět. Sednemsi k tabuli, nakreslímezákazníky, objednávky, faktury, produkty a podobně a vztahymezinimi!A co udělámepak – vezmemenášpěkný design a denormalizujeme ho. Potíme se vymýšlením, jak to všechnonaládujeme do tabulek. A jsmešťastní a usměvaví, než to zpustímenaživo, do provozu…. A ono to bežíjakželva… Co uděláme? Denormalitzujemenáš model! Všechnaenergie, kteroujsmeinvestovali, krev, pot a slzy, všechno v niveč. U grafovédatabáze, to co je napapíře je přesně to, co naházíte do databáze.
  • To neznamená,žejsteomluveni s designovéfáze. Pořád se musítehlubocezamysletnadtím, jaké entity (neboobjekty) tvořívašidoménu a jakéjsoumezinimivztahy! Stálepotřebujete design.Nemůžetejednoduševzít data ztabulek, kterámáte a násilím je natřískat do vašízbrusunovégrafovédatabáze. Člověkmusízačítmyslet v nódách a vztazích.Přinavrhovánídatovéhomodelu pro WebExpomusímeudělathodnědesignovýchrozhodnutí: jakodlišitřečníky od účastníků? A je to vůbecpotřeba? Udělatzepátka a sobotynódy, nebojenomvlastnostnajednotlivýchpřednáškách?Stálemusítedělat design, ale pointa je že design datovéhomodelu pro grafovoudatabázimůžebýtpříjemná a přirozenázkušenost.
  • Stará se proVás o nódy, vztahymezinimi a indexy.Neo4j je stabilní a běží od roku 2003ProcházíaktivnímvývojemPrimárně pro Javu, ale použitelná se spoustoudalšíchtechnologiíIdeální pro škáludesítekserverů v clusteru, ne pro stovkyPro hustěpropojená data, není to KV store
  • 32 billion nodes, 32 billion relationships, 64 billion properties
  • Plně a militantně ACID. Kdoneví, co to znamená?Rychlevysvětlit: atomicity, consistency, isolation, durabilityNěkterédalší NOSQL databáze se vzdávajíněkterýchgarancíveprospěchvýkonu, u Neo4j tohlevypnoutnejde. Data jsouvždyzapsánana disk.
  • Vyhledatzacatek v indexu (Lucene)Prozkoumavatokoli
  • Vyhledatzacatek v indexu (Lucene)Prozkoumavatokoli
  • Neo mázabudovanoucelouknihovnugrafovýchalgoritmů, jakonejkratšícesta, všechnycesty, atp
  • 1m hops zasekundunanormálnímlaptopu, žádnýrozdílpřiznásobenípočtudatHigh performance graph operationsTraverses 1,000,000+ relationships / second on commodity hardware
  • Obecněpokudpoužíváte MySQL a neplatítezaněj, nebudeteplatitaniza Neo.
  • Pojďmesikázatpoužití v embedded módunakonkrétnímpříkladu. Vytvořiljsemgraf z webexpa, řečníci a přednáškyjsouopravdové, 1000 účastníkůmánáhodněvygenerovanájména. Popsatgraf a scénář.KdonečteJavuKodbudenagithubu
  • Vztahymůžoubýtbuďřetězceznaků, neboEnum, kterévámdajívýhodustatickéhotypování v IDE, pro Neo4j v tom nenížádnýrozdíl.Postupopakujemedokudnemámecelýgraf
  • Tohle je screenshot z webovékonzole, kdemůžemegrafvizálněprocházet. Běžínalaptopu, dámVámnakonci URL, abystesi s tímmohlipohrát.Tak, mámegraf, ale jak z nějteďdostaneme data ven?
  • Existujeněkolikzpůsobů,jakpsátdotazy v Neo4j, liší se čitelností, složitostí, výkonem a úrovníabstrakce. UkážuVámněkterézezpůsobů a začnuodspoda, tzn. On nativníhonejrychlejšího API.
  • Core API pracujepřímo s jednotkami, kteréjsme do databázeuložili – vrcholy, hrany a jejichvlastnosti.
  • Podívejme se ještějednounavelýgraf. Novýgrafmávždyjednunódu s ID 0, z téjsmeudělalliWebExpo.
  • Tohle je imperativní API, všechnupráciděláprogramátor, je nejvýkonnější
  • Pojďme se podívat o úroveňvýš co se abstrakcetýčenatakzvané traversal API, kterénámumožnípsátdotazydeklarativně, to znamenápopsat, jakchcemegrafprocházet. Samotnéprocházeníudělá Neo4J zanás.
  • Můžemepsátvlastníevaluatory
  • Dalšípovedenoufunkcí je knihovnaalgoritmů pro hledánícestmezidvěmauzly.
  • Takénejkratšícesta, Dijkstra a další
  • Těžké pro neprogramátory, pojďmě se podívatnaněcojednoduššího
  • Na nejvyššíúrovniabstrakce Neo4j zprostředkovávásvůjvlastníjazyk pro psanídotazů, částečněinspirovaný SQL. Ten jazyk se jmenuje Cypher a rozumílidskyčitelnýmpříkazům, jakonapříkladtomu, kterýtadyteďvidíte.
  • Musímenědezačít, napomocsivezmeme index s názvem people, kdenajdemepanaEmilaVotrubupodlejména.Dálemusímeupřesnit, co za data vlastněchcemezískat, v tomtopřípadějménočlověka a skóre, kolikvěcímámespolečnýchNakonecasinechcemejítnapivoúplně se všemi, ale janomřekněme s 5 lidmi, se kterýmitohomámespolečnéhonejvícAsividítevliv SQL----- Meeting Notes (09/09/2012 20:18) -----animace
  • Musímenědezačít, napomocsivezmeme index s názvem people, kdenajdemepanaEmilaVotrubupodlejména.Dálemusímeupřesnit, co za data vlastněchcemezískat, v tomtopřípadějménočlověka a skóre, kolikvěcímámespolečnýchNakonecasinechcemejítnapivoúplně se všemi, ale janomřekněme s 5 lidmi, se kterýmitohomámespolečnéhonejvícAsividítevliv SQL----- Meeting Notes (09/09/2012 20:18) -----animace
  • Musímenědezačít, napomocsivezmeme index s názvem people, kdenajdemepanaEmilaVotrubupodlejména.Dálemusímeupřesnit, co za data vlastněchcemezískat, v tomtopřípadějménočlověka a skóre, kolikvěcímámespolečnýchNakonecasinechcemejítnapivoúplně se všemi, ale janomřekněme s 5 lidmi, se kterýmitohomámespolečnéhonejvícAsividítevliv SQL----- Meeting Notes (09/09/2012 20:18) -----animace
  • A výsledek pro panavotrubu.
  • “Tales from the Trenches” for further tips
  • Neo4j Introduction at Imperial College London

    1. 1. An Introduction to Neo4j Michal Bachman @bachmanm
    2. 2. Roadmap• Intro to NOSQL• Intro to Graph Databases• Intro to Neo4j• A bit of hacking• Current research• Q&A @bachmanm
    3. 3. Not Only SQL @bachmanm
    4. 4. Why NOSQL now? Driving trends @bachmanm
    5. 5. Trend 1: Data Size @bachmanm
    6. 6. Trend 2: Connectedness GGG Onotologies RDFa FolksonomiesInformation connectivity Tagging Wikis UGC Blogs Feeds Hypertext Text Documents @bachmanm
    7. 7. Trend 3: Semi-structured Data @bachmanm
    8. 8. Trend 4: Application Architecture (80’s) Application DB @bachmanm
    9. 9. Trend 4: Application Architecture (90’s) App App App DB @bachmanm
    10. 10. Application Application Application DB DB DB @bachmanm
    11. 11. Side note: RDBMS performance Salary List @bachmanm
    12. 12. Four NOSQL Categories @bachmanm
    13. 13. Key-Value Stores• “Dynamo: Amazon’s Highly Available Key- Value Store” (2007)• Data model: – Global key-value mapping – Big scalable HashMap – Highly fault tolerant (typically)• Examples: – Riak, Redis, Voldemort @bachmanm
    14. 14. Pros and Cons• Strengths – Simple data model – Great at scaling out horizontally • Scalable • Available• Weaknesses: – Simplistic data model – Poor for complex data @bachmanm
    15. 15. Column Family (BigTable)• Google’s “Bigtable: A Distributed Storage System for Structured Data” (2006)• Data model: – A big table, with column families – Map-reduce for querying/processing• Examples: – HBase, HyperTable, Cassandra @bachmanm
    16. 16. Pros and Cons• Strengths – Data model supports semi-structured data – Naturally indexed (columns) – Good at scaling out horizontally• Weaknesses: – Unsuited for interconnected data @bachmanm
    17. 17. Document Databases• Data model – Collections of documents – A document is a key-value collection – Index-centric, lots of map-reduce• Examples – CouchDB, MongoDB @bachmanm
    18. 18. Pros and Cons• Strengths – Simple, powerful data model (just like SVN!) – Good scaling (especially if sharding supported)• Weaknesses: – Unsuited for interconnected data – Query model limited to keys (and indexes) • Map reduce for larger queries @bachmanm
    19. 19. Graph Databases• Data model: – Nodes with properties – Named relationships with properties – Hypergraph, sometimes• Examples: – Neo4j (of course), Sones GraphDB, OrientDB, InfiniteGraph, AllegroGraph @bachmanm
    20. 20. Pros and Cons• Strengths – Powerful data model – Fast • For connected data, can be many orders of magnitude faster than RDBMS• Weaknesses: – Sharding • Though they can scale reasonably well • And for some domains you can shard too! @bachmanm
    21. 21. Social Network “path exists” Performance• Experiment: • ~1k persons # persons query time • Average 50 friends per Relational 1000 2000ms database person Neo4j 1000 2ms • pathExists(a,b) Neo4j 1000000 2ms limited to depth 4 • Caches warm to eliminate disk IO @bachmanm
    22. 22. Four NOSQL Categories @bachmanm
    23. 23. What are graphs good for?• Recommendations• Business intelligence• Social computing• Geospatial• MDM• Systems management• Web of things• Genealogy• Time series data• Product catalogue• Web analytics• Scientific computing (especially bioinformatics)• Indexing your slow RDBMS• And much more! @bachmanm
    24. 24. Neo4j is a Graph DatabaseSo we need to detour through a little graph theory @bachmanm
    25. 25. @bachmanm
    26. 26. Meet Leonhard Euler • Swiss mathematician • Inventor of Graph Theory (1736) @bachmanmhttp://en.wikipedia.org/wiki/File:Leonhard_Euler_2.jpg
    27. 27. http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg @bachmanm
    28. 28. Property Graph Model name: Michal Bachman• nodes / vertices• relationships / edges title: Intro to Neo4j• properties duration: 45 name: Neo4j name: NOSQL @bachmanm
    29. 29. Graphs are very whiteboard-friendly @bachmanm
    30. 30. @bachmanm
    31. 31. Neo4j @bachmanm
    32. 32. 32 billion nodes32 billion relationships64 billion properties @bachmanm
    33. 33. @bachmanm
    34. 34. http://opfm.jpl.nasa.gov/ @bachmanm
    35. 35. http://news.xinhuanet.com @bachmanm
    36. 36. @bachmanm
    37. 37. @bachmanm
    38. 38. Community Advanced Enterprise @bachmanm
    39. 39. How do I use it? @bachmanm
    40. 40. Getting started is easy• Single package download, includes server stuff – http://neo4j.org/download/• For developer convenience, Ivy (or whatever): – <dependency org="org.neo4j" name="neo4j-community" rev="1.9.M04"/> @bachmanm
    41. 41. Run it!• Server is easy to start stop – cd <install directory> – bin/neo4j start – bin/neo4j stop• Provides a REST API in addition to the other APIs we’ve seen• Provides some ops support – JMX, data browser, graph visualisation @bachmanm
    42. 42. Embed it!• If you want to host the database in your process just load the jars• And point the config at the right place on disk• Embedded databases can be HA too – You don’t have to run as server @bachmanm
    43. 43. name: Phil Johnsontitle: Cognitive Psychologyduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Jeremy White INTERESTED name: Neo4j name: NOSQL @bachmanm
    44. 44. 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
    45. 45. @bachmanm
    46. 46. Core API• Nodes – Properties (optional K-V pairs)• Relatiosnhips – Start node (required) – End node (required) – Properties (optional K-V pairs) @bachmanm
    47. 47. All Conference Topics @bachmanm
    48. 48. name: Phil Johnsontitle: Cognitive Psychologyduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Jeremy White INTERESTED name: Neo4j name: NOSQL @bachmanm
    49. 49. All Conference Topics 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
    50. 50. Which talks should I attend? @bachmanm
    51. 51. name: Phil Johnsontitle: Cognitive Psychologyduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Jeremy White INTERESTED name: Neo4j name: NOSQL @bachmanm
    52. 52. Which talks should I attend? 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", ”Jeremy White").getSingle(); Iterable<Node> talks = talksTraversal.traverse(attendee).nodes(); //iterate over talks and print------------------------------------------Suggesting talks for 100 random attendees....Aneta Lebedova: Measure Everything!, To the USA, The real me. Took: 1 msBohumir Kubat: Beyond the polar bear, How (not) to do API, Critical interface design. Took: 1 msVladimir Vales: Application Development for Windows 8 Metro. Took: 1 msSuggested talks for 100 random attendees in 449 ms
    53. 53. What do we have in common? @bachmanm
    54. 54. name: Phil Johnsontitle: Cognitive Psychologyduration: 30 name: Michal Bachman name: UX title: Intro to Neo4j duration: 45 name: Martin Macke name: Jeremy White INTERESTED name: Neo4j name: NOSQL @bachmanm
    55. 55. What do we have in common? //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 Phil Smith:(Karel Kunc)--[INTERESTED]-->(ux)<--[INTERESTED]--(Phil Smith),(Karel Kunc)--[DISLIKED]-->(Be a punk consumer!)<--[DISLIKED]--(Phil Smith),(Karel Kunc)--[DISLIKED]-->(Beyond the polar bear)<--[LIKED]--(Phil Smith),(Karel Kunc)--[LIKED]-->(Shipito.com – business in USA)<--[LIKED]--(Phil Smith).Took: 0 ms....Found things in common for 100 random couples of attendees in 142 ms.
    56. 56. Youngsters, Y U No Like Java? @bachmanm
    57. 57. Who is my beer mate?myself beerMate:? talk:? @bachmanm
    58. 58. Who is my beer mate?(myself) (beerMate) (talk) @bachmanm
    59. 59. Who is my beer mate?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
    60. 60. Cypher Querystart myself=node:people(name = ”Alex Smart")match (myself)-[:LIKED]->(talk)<-[:LIKED]-(beerMate)return distinct beerMate.name, count(beerMate)order by count(beerMate) desclimit 5; @bachmanm
    61. 61. Cypher Querystart myself=node:people(name = ”Emil Votruba")match (myself)-[:LIKED]->()<-[:LIKED]-(beerMate)return distinct beerMate.name, count(beerMate)order by count(beerMate) desclimit 5; @bachmanm
    62. 62. Who is my beer mate? @bachmanm
    63. 63. Current Research• Graph partitioning• Graph analytics (“OLAP” and predictive)• Performance improvements• Query languages• MVCC and single-threaded write models• ACID (tradeoffs for weakening C and I)• Yield and Harvest in distributed systems• Application-level – Recommendations – Protein interactions –… @bachmanm
    64. 64. Questions?Neo4j: http://neo4j.orgNeo Technology: http://neotechnology.comTwitter: @bachmanmCode: git://github.com/bachmanm/neo4j-imperial.git

    ×