• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Neo4j Introduction at Imperial College London
 

Neo4j Introduction at Imperial College London

on

  • 1,244 views

Slides from January 22nd 2013

Slides from January 22nd 2013

Statistics

Views

Total Views
1,244
Views on SlideShare
1,215
Embed Views
29

Actions

Likes
2
Downloads
0
Comments
0

1 Embed 29

https://twitter.com 29

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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 Neo4j Introduction at Imperial College London Presentation Transcript

  • An Introduction to Neo4j Michal Bachman @bachmanm
  • Roadmap• Intro to NOSQL• Intro to Graph Databases• Intro to Neo4j• A bit of hacking• Current research• Q&A @bachmanm
  • Not Only SQL @bachmanm
  • Why NOSQL now? Driving trends @bachmanm
  • Trend 1: Data Size @bachmanm
  • Trend 2: Connectedness GGG Onotologies RDFa FolksonomiesInformation connectivity Tagging Wikis UGC Blogs Feeds Hypertext Text Documents @bachmanm
  • Trend 3: Semi-structured Data @bachmanm
  • Trend 4: Application Architecture (80’s) Application DB @bachmanm
  • Trend 4: Application Architecture (90’s) App App App DB @bachmanm
  • Application Application Application DB DB DB @bachmanm
  • Side note: RDBMS performance Salary List @bachmanm
  • Four NOSQL Categories @bachmanm
  • 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
  • Pros and Cons• Strengths – Simple data model – Great at scaling out horizontally • Scalable • Available• Weaknesses: – Simplistic data model – Poor for complex data @bachmanm
  • 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
  • Pros and Cons• Strengths – Data model supports semi-structured data – Naturally indexed (columns) – Good at scaling out horizontally• Weaknesses: – Unsuited for interconnected data @bachmanm
  • Document Databases• Data model – Collections of documents – A document is a key-value collection – Index-centric, lots of map-reduce• Examples – CouchDB, MongoDB @bachmanm
  • 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
  • Graph Databases• Data model: – Nodes with properties – Named relationships with properties – Hypergraph, sometimes• Examples: – Neo4j (of course), Sones GraphDB, OrientDB, InfiniteGraph, AllegroGraph @bachmanm
  • 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
  • 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
  • Four NOSQL Categories @bachmanm
  • 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
  • Neo4j is a Graph DatabaseSo we need to detour through a little graph theory @bachmanm
  • @bachmanm
  • Meet Leonhard Euler • Swiss mathematician • Inventor of Graph Theory (1736) @bachmanmhttp://en.wikipedia.org/wiki/File:Leonhard_Euler_2.jpg
  • http://en.wikipedia.org/wiki/Seven_Bridges_of_Königsberg @bachmanm
  • Property Graph Model name: Michal Bachman• nodes / vertices• relationships / edges title: Intro to Neo4j• properties duration: 45 name: Neo4j name: NOSQL @bachmanm
  • Graphs are very whiteboard-friendly @bachmanm
  • @bachmanm
  • Neo4j @bachmanm
  • 32 billion nodes32 billion relationships64 billion properties @bachmanm
  • @bachmanm
  • http://opfm.jpl.nasa.gov/ @bachmanm
  • http://news.xinhuanet.com @bachmanm
  • @bachmanm
  • @bachmanm
  • Community Advanced Enterprise @bachmanm
  • How do I use it? @bachmanm
  • 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
  • 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
  • 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
  • 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
  • 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
  • @bachmanm
  • Core API• Nodes – Properties (optional K-V pairs)• Relatiosnhips – Start node (required) – End node (required) – Properties (optional K-V pairs) @bachmanm
  • All Conference Topics @bachmanm
  • 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
  • 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
  • Which talks should I attend? @bachmanm
  • 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
  • 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
  • What do we have in common? @bachmanm
  • 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
  • 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.
  • Youngsters, Y U No Like Java? @bachmanm
  • Who is my beer mate?myself beerMate:? talk:? @bachmanm
  • Who is my beer mate?(myself) (beerMate) (talk) @bachmanm
  • 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
  • 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
  • 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
  • Who is my beer mate? @bachmanm
  • 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
  • Questions?Neo4j: http://neo4j.orgNeo Technology: http://neotechnology.comTwitter: @bachmanmCode: git://github.com/bachmanm/neo4j-imperial.git