graphs fun intro - michael hunger

65
How Graphs make Databases Fun again Value in Rela*onships Michael Hunger (@mesirii) Webinar Mar 2016

Upload: neo4j-the-fastest-and-most-scalable-native-graph-database

Post on 22-Jan-2017

341 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Graphs fun intro - Michael Hunger

HowGraphsmakeDatabasesFunagainValueinRela*onships

MichaelHunger(@mesirii)WebinarMar2016

Page 2: Graphs fun intro - Michael Hunger

(Michael)-[:HELPS]->(People)-[:WORK_WITH]->(Neo4j)

• Coding• Wri*ng• Speaking• Helping• Connec*ng• Organizing

Page 3: Graphs fun intro - Michael Hunger

Topics

•  DatabaseswereNoFun•  AstoryofPain• WhyshouldIcare?•  TheworldisaGraph

•  Rela*onalPain=>GraphPleasure•  Neo4j:Model,Query,Import•  HavingFunintheDeveloperZone•  GitHubEvents•  SoSwareAnaly*cs•  Neo4jfromJava

Page 4: Graphs fun intro - Michael Hunger

Topics

• DatabaseswereNoFun• AstoryofPain• WhyshouldIcare?• TheworldisaGraph• Rela*onalPain=>GraphPleasure• Neo4j:Model,Query,Import

Page 5: Graphs fun intro - Michael Hunger

DatabaseswereNoFun

Wehaveallbeenthere

Page 6: Graphs fun intro - Michael Hunger

Whatpainedme

•  Objectvs.DatabaseModel=Pain•  HardtoModel•  Objectrela*onalimpedancemismatch(andORMs)

•  Schemaevolu*on=DBAFights•  Slowqueries=JOINPain•  ComplexQueries=PagesofSQL•  QueryOp*miza*on=Denormaliza*on•  Roundtrips(n+1select,complexopera*ons)=Cumbersome

Page 7: Graphs fun intro - Michael Hunger

Whatsavedme?–MeeRngEmil

GeekCruisein2008

Page 8: Graphs fun intro - Michael Hunger

Neo4j:AStoryofPain

WithaHappyEnding

Page 9: Graphs fun intro - Michael Hunger

HistoryofNeo4j-Problem

•  DigitalAssetManagementSystemin2000•  SaaSmanyusersinmanycountries•  Twoharduse-cases•  Mul*languagekeywordsearch•  Includingsynonyms/wordhierarchies

•  AccessManagementtoAssetsforSaaSScale•  Groups,Hierarchies,Permissions,Real*me

Page 10: Graphs fun intro - Michael Hunger

HistoryofNeo4j–RelaRonalAVempt

•  Triedwithmanyrela*onalDBs•  JOINPerformanceProblems•  Hierarchies,Networks,Graphs

•  ModelingProblems•  DataModelevolu*on

•  NoSuccess,even…•  Withexpensivedatabaseconsultants!

Page 11: Graphs fun intro - Michael Hunger

HistoryofNeo4j–FirstworkingImplementaRon

•  GraphModel&APIsketchedonanapkin•  NodesconnectedbyRela*onships•  Justlikeyourconceptualmodel

•  Implementednetwork-databaseinmemory•  JavaAPI,fastTraversals•  Workedwell,but…•  Nopersistence,NoTransac*ons•  Longimport/export*mefromrela*onalstorage

Page 12: Graphs fun intro - Michael Hunger

HistoryofNeo4j-SoluRon

•  EvolvedtofullfledgeddatabaseinJava•  Withpersistenceusingfiles+memorymapping•  Transac*onswithTransac*onLog(WAL)•  Luceneforfasten*tylookup

•  FoundedCompanyin2007•  Neo4j(REST)-Server•  Neo4jClustering&HA •  CypherQueryLanguage

•  Today…

Page 13: Graphs fun intro - Michael Hunger

NeoTechnologyOverview

Product• Neo4j-World’sleadinggraphdatabase

• 1M+downloads,adding70k+permonth

• 150+enterprisesubscrip*oncustomersincludingover50oftheGlobal2000

Company• NeoTechnology,CreatorofNeo4j• 140+employeeswithHQinSiliconValley,London,Munich,ParisandMalmö

• $45MinfundingfromFidelity,Sunstone,Conor,Creandum,DawnCapital

Page 14: Graphs fun intro - Michael Hunger

What,Who,Where,How?FinancialServices Communications Health &

Life Sciences HR &

Recruiting Media &

Publishing SocialWeb

Industry & Logistics

Entertainment Consumer Retail Information Services Business Services

hop://neo4j.com/use-cases hop://neo4j.com/customers

Page 15: Graphs fun intro - Michael Hunger

WhyshouldIcare?

BecauseRelaRonshipsMaVer

Page 16: Graphs fun intro - Michael Hunger

WhatisitwithRelaRonships?

• Worldisfullofconnectedpeople,events,things•  Thereis“ValueinRela*onships”!• WhataboutDataRela*onships?• Howdoyoustoreyourobjectmodel?• HowdoyouexplainJOINtablestoyourboss?

Page 17: Graphs fun intro - Michael Hunger

Neo4j–allowsyoutoconnectthedots

• Wasbuilttoefficiently•  store,• queryand• managehighlyconnecteddata

•  Transac*onal,ACID• Real-*meOLTP• Opensource• Highlyscalablealreadyonfewmachines

Page 18: Graphs fun intro - Michael Hunger

ValuefromDataRelaRonshipsCommonUseCases

InternalApplicaRonsMasterDataManagement

NetworkandITOpera*ons

FraudDetec*on

Customer-FacingApplicaRonsReal-TimeRecommenda*ons

Graph-BasedSearchIden*tyand

AccessManagement

Page 19: Graphs fun intro - Michael Hunger

Neo4jBrowser–Built-inLearning

Page 20: Graphs fun intro - Michael Hunger

RDBMStoGraph–FamiliarExamples

Page 21: Graphs fun intro - Michael Hunger

Neo4jBrowser–VisualizaRon

Page 22: Graphs fun intro - Michael Hunger

DemoMeetupImport

Page 23: Graphs fun intro - Michael Hunger

Teaser:Meetup.comImport

•  ForaMeetupEvent•  ImportAVendees•  ForeachAoendee•  ImportInterests/Topics•  ImportotherMeetupMemberships•  ImportCi*es,Countries

•  Othergroupsourmembersarein•  Top10topics•  Topics&Groupsofac:veMember hops://github.com/ikwaoro/meetup2neohop://markhneedham.com/blog?s=meetup

Page 24: Graphs fun intro - Michael Hunger

FromRDBMStoNeo4j

RelaRonalPains=GraphPleasure

Page 25: Graphs fun intro - Michael Hunger

RelaRonalDBsCan’tHandleRelaRonshipsWell

•  Cannotmodelorstoredataandrela*onshipswithoutcomplexity

•  Performancedegradeswithnumberandlevelsofrela*onships,anddatabasesize

•  QuerycomplexitygrowswithneedforJOINs•  Addingnewtypesofdataandrela*onshipsrequiresschemaredesign,increasing*metomarket

…makingtradi*onaldatabasesinappropriatewhendatarela*onshipsarevaluableinreal-Rme

SlowdevelopmentPoorperformanceLowscalabilityHardtomaintain

Page 26: Graphs fun intro - Michael Hunger

RelaRonalDBsCan’tHandleRelaRonshipsWell

•  DataModelbuiltfortabularformsnotJOINSmanagingconnec*onswasboltedonbothinschemaandquery

•  Strictschemanotsuitableforvariablestructureddatawhichisgeneratedandusedbytodaysapplica*ons

•  DatavolumeandJOINnumberaffectcostofqueryopera*onexponen*ally

•  Variablehierarchiesandnetworksarehardtostoreandquerysomany“paoerns”weredeveloped

…oSenonlydenormaliza*onmakescomplexrela*onalqueriesfastbutdestroysthegoodnormalizeddata-model

BuiltforFormsJoinsareexpensiveDenormalize#FTW

Page 27: Graphs fun intro - Michael Hunger

UnlockingValuefromYourDataRelaRonships

•  Modelyourdatanaturallyasagraphofdataandrela*onships

•  Drivegraphmodelfromdomainanduse-cases

•  Userela*onshipinforma*oninreal-*metotransformyourbusiness

•  Addnewrela*onshipsontheflytoadapttoyourchangingrequirements

Page 28: Graphs fun intro - Michael Hunger

HighQueryPerformancewithaNaRveGraphDB

•  Rela*onshipsarefirstclassci*zen•  Noneedforjoins,justfollowpre-materializedrela*onshipsofnodes

•  Query&Data-locality–navigateoutfromyourstar*ngpoints

•  Onlyloadwhat’sneeded•  Aggregateandprojectresultsasyougo

•  Op*mizeddiskandmemorymodelforgraphs

Page 29: Graphs fun intro - Michael Hunger

RelaRonalVersusGraphModels

RelaRonalModel GraphModel

KNOWSANDREAS

TOBIAS

MICA

DELIA

Person FriendPerson-Friend

ANDREASDELIA

TOBIAS

MICA

Page 30: Graphs fun intro - Michael Hunger

ForInstance…

Page 31: Graphs fun intro - Michael Hunger

…IsActually

Order

Product

Customer Employee

SOLD

ORDERS

Category

Employee

REPORTS_TO

PART_OF

PURCHASED

Supplier

SUPPLIES

Page 32: Graphs fun intro - Michael Hunger

MATCH(boss)-[:MANAGES*0..3]->(mgr),(mgr)-[:MANAGES*1..3]->(report)WHEREboss.name=“JohnDoe”RETURNmgr.nameASSubordinate,count(report)ASTotal

ExpressComplexQueriesEasilywithCypher

Findalldirectreportsandhowmanypeopletheymanage,eachupto3levelsdown

CypherQuery

SQLQuery

Page 33: Graphs fun intro - Michael Hunger

HighQueryPerformance:SomeNumbers

•  Traverse2-4M+rela*onshipspersecondandcore

•  Costbasedqueryop*mizer–complexqueriesreturninmilliseconds

•  Import100K-1Mrecordspersecondtransac*onally

•  Bulkimporttensofbillionsofrecordsinafewhours

Page 34: Graphs fun intro - Michael Hunger

WorkingwithaGraph

Model,Import,Query

Page 35: Graphs fun intro - Michael Hunger

TheWhiteboardModelIsthePhysicalModel

EliminatesGraph-to-RelaRonalMappingInyourdatamodelBridgethegap

betweenbusinessandITmodels

InyourapplicaRonGreatlyreduceneedforapplica*oncode

Page 36: Graphs fun intro - Michael Hunger

CAR

name:“Dan”born:May29,1970twioer:“@dan”

name:“Ann”born:Dec5,1975

since:Jan10,2011

brand:“Volvo”model:“V70”

PropertyGraphModelComponents

Nodes•  Theobjectsinthegraph•  Canhavename-valueproper:es•  CanbelabeledRelaRonships•  Relatenodesbytypeanddirec*on•  Canhavename-valueproper:es

LOVES

LOVES

LIVESWITHPERSON PERSON

Page 37: Graphs fun intro - Michael Hunger

Cypher:PowerfulandExpressiveQueryLanguage

MATCH(:Person{name:“Dan”})-[:LOVES]->(:Person{name:“Ann”})

LOVES

Dan Ann

LABEL PROPERTY

NODE NODE

LABEL PROPERTY

Page 38: Graphs fun intro - Michael Hunger

GedngDataintoNeo4j

Cypher-Based“LOADCSV”Capability•  Transac*onal(ACID)writes•  Ini*alandincrementalloadsofupto10millionnodesandrela*onships

Command-LineBulkLoaderneo4j-import•  Forini*aldatabasepopula*on•  Forloadsupto10B+records•  Upto1Mrecordspersecond

4.58millionthingsandtheirrela*onships…

Loadsin100seconds!

CSV

Page 39: Graphs fun intro - Michael Hunger

QueryingYourData

Page 40: Graphs fun intro - Michael Hunger

BasicPaVern:TomHanksMovies?

MATCH(:Person{name:”TomHanks"})-[:ACTED_IN]->(:Movie{*tle:”ForrestGump"})

ACTED_IN

TomHanks

ForrestGump

LABEL PROPERTY

NODE NODE

ForrestGump

LABEL PROPERTY

Page 41: Graphs fun intro - Michael Hunger

BasicQuery:TomHanks‘Movies?

MATCH (actor:Person)-[:ACTED_IN]->(m:Movie)

WHERE actor.name = "Tom Hanks"

RETURN *

Page 42: Graphs fun intro - Michael Hunger

BasicQuery:TomHanks‘Movies?

Page 43: Graphs fun intro - Michael Hunger

QueryComparison:ColleaguesofTomHanks?

SELECT *FROM Person as actor JOIN ActorMovie AS am1 ON (actor.id = am1.actor_id) JOIN ActorMovie AS am2 ON (am1.movie_id = am2.movie_id) JOIN Person AS coll ON (coll.id = am2.actor_id)WHERE actor.name = "Tom Hanks“

MATCH (actor:Person)-[:ACTED_IN]->()<-[:ACTED_IN]-(coll:Person)WHERE actor.name = "Tom Hanks"RETURN *

Page 44: Graphs fun intro - Michael Hunger

BasicQueryComparison:ColleaguesofTomHanks?

Page 45: Graphs fun intro - Michael Hunger

Mostprolificactorsandtheirfilmography?

MATCH (p:Person)-[:ACTED_IN]->(m:Movie)

RETURN p.name, count(*), collect(m.title) as movies

ORDER BY count(*) desc, p.name asc

LIMIT 10;

Page 46: Graphs fun intro - Michael Hunger

Mostprolificactorsandtheirfilmography?

Page 47: Graphs fun intro - Michael Hunger

Neo4jQueryPlanner

CostbasedQueryPlannersinceNeo4j2.2•  Usesdatabasestatstoselectbestplan•  CurrentlyforReadOpera*ons•  QueryPlanVisualizer,finds•  Nonop*malqueries•  CartesianProduct•  MissingIndexes,GlobalScans•  Typos•  MassiveFan-Out

Page 48: Graphs fun intro - Michael Hunger

QueryPlanner

Slightchange,addan:Personlabel->morestatsavailable->newplanwithfewerdatabase-hits

Page 49: Graphs fun intro - Michael Hunger

DemoSoQwareAnaly*cs

jqassistant.org

Page 50: Graphs fun intro - Michael Hunger

SoiwareAnalyRcs

SoSwareisconnectedinforma*on,akaagraph•  Source->AST•  Inheritance,Composi*on,Delega*on•  CallTrees•  Run*meMemory•  Dependencies•  Modules,Libraries

•  Tests•  ... hops://jqassistant.org

Page 51: Graphs fun intro - Michael Hunger

jQAssistant

•  GeekCruise:MyfirstNeo4jproject•  Soiwaredeteriorates•  Developrulesandenforcethem•  CommercialToolstooinflexible•  OpenSourceSoSware...•  Scanner->Enhancer->Analyzer

•  Enrichment,ConceptsandRulezinCypher•  ScannerPlugins•  IntegrateinBuildProcess•  Fail,GenerateReports,... hops://jqassistant.org

Page 52: Graphs fun intro - Michael Hunger
Page 53: Graphs fun intro - Michael Hunger

Let‘sexplore...

hops://jqassistant.org

...TheJDK

Page 54: Graphs fun intro - Michael Hunger

DemoGitHubEvents

github.com/ikwaWro

Page 55: Graphs fun intro - Michael Hunger

Demo:GitHubEvents

•  GitHub:SocialCoding•  GH-Events:•  Fork,Comment,PR,...•  Archive+API

•  Applica*onforImport:•  GitHub->PHP->RabbitMQ->Neo4j

•  Data:•  1MUsers,1.4MRepos,62kOrgs•  13MEvents

hops://github.com/ikwaoro/github2cypherhops://github.com/ikwaoro/github-event

Page 56: Graphs fun intro - Michael Hunger

Model:GitHubEvents(parRal)

Page 57: Graphs fun intro - Michael Hunger

Event:WatchaRepository

MATCH (w:WatchEvent)WITH w LIMIT 1MATCH p = (w)-[:EVENT_TIME]->(:Minute)<-[:CHILD*]-(:Year), (w)-[:EVENT_ACTOR]->(u:User)-->(r:Repository) <-[:WATCHED_REPOSITORY]-(w)RETURN *;hops://twioer.com/ikwaoro/status/618431227100532737

Page 58: Graphs fun intro - Michael Hunger

UsingNeo4jfromJavaChoicesGalore!

Neo4j.com/developer/java

Page 59: Graphs fun intro - Michael Hunger

Neo4j:OSS,MadeinJava

•  Java7/8,Scala•  HighPerformanceIO,•  MemoryMapping,•  Collec*ons,Caches,Cursors,•  Remo*ng,•  Paxos,RaS,...•  Libraries•  Jeoy,Lucene,Neoy,Parboiled,...

hops://github.com/neo4j/neo4j

Page 60: Graphs fun intro - Michael Hunger

Using:Neo4jfromJava

•  Neo4jJavaAPIs•  ServerExtensions•  Embedded

•  (parallel)Batch-ImportAPIs•  REST/HTTP•  JDBCDriver•  Neo4j-OGM•  SpringDataNeo4j•  Upcoming:BinaryProtocolDriver

hops://neo4j.com/developer/java

Page 61: Graphs fun intro - Michael Hunger

GetuptospeedwithNeo4jQuicklyandEasily

Page 62: Graphs fun intro - Michael Hunger

UsersLoveNeo4j

Page 63: Graphs fun intro - Michael Hunger

ThereAreLotsofWaystoEasilyLearnNeo4j

neo4j.com/developer

Page 64: Graphs fun intro - Michael Hunger

SummaryIntroducRonNeo4j

Neo4jAllowsYou…•  Keepyourrichdatamodel•  Handlerela*onshipsefficiently•  Writequerieseasily•  Developapplica*onsquickly

For.NetDevelopers•  Neo4jInstaller•  DriversforNeo4jfrom.Net•  HostDatabaseonAzure•  DeployAppstoAzure

Page 65: Graphs fun intro - Michael Hunger

ThankYou!AskQues*ons,orTweet

@neo4j|hWp://neo4j.com@mesirii|MichaelHunger