how graph databases can save your bacon

109
GRAPH DATABASES SAVE YOUR BACON NEO4J FOR DEV TEAMS Created by / Jeffrey A. Miller @xagronaut

Upload: hangoc

Post on 05-Jan-2017

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: How Graph Databases Can Save Your Bacon

GRAPH  DATABASES

SAVE YOUR BACON

NEO4J  FOR  DEV  TEAMSCreated by / Jeffrey A. Miller @xagronaut

Page 2: How Graph Databases Can Save Your Bacon

THE  BEGINNING

Page 3: How Graph Databases Can Save Your Bacon

WHERE YOU WORK

BONZAI  BACON

(.COM)

Page 4: How Graph Databases Can Save Your Bacon

PROJECT:

BACONBIZ  2.0

Page 5: How Graph Databases Can Save Your Bacon

FEATURES

LONG  PROJECT

SCOPE  CREEP

Page 6: How Graph Databases Can Save Your Bacon

FEATURES

UNSTABLE

REQUIREMENTS

Page 7: How Graph Databases Can Save Your Bacon

FEATURES

LOTS  OF  CODE

LOTS  OF  BUGS

Page 8: How Graph Databases Can Save Your Bacon

FEATURES

LOW  MORALE

HIGH  TURNOVER

Page 9: How Graph Databases Can Save Your Bacon

BACONBIZ

2.0

NEEDS  HELP

Page 10: How Graph Databases Can Save Your Bacon

THESE  ARE  NOT  NEW

PROBLEMS

Page 11: How Graph Databases Can Save Your Bacon

EVERY  DAY  PROBLEMS:

Team members work in isolationInformation is not sharedBugs go undetectedFixes are costly

Page 12: How Graph Databases Can Save Your Bacon
Page 13: How Graph Databases Can Save Your Bacon

KEVINKEVIN'S PROBLEM(S)

KEVIN  DOESN'T  KNOW

THE  CODE  BASE

OR  THE  TOOLS

Page 14: How Graph Databases Can Save Your Bacon

KEVIN'S PROBLEM(S)

CHANGES  ARE  TRICKY

CODE  IS  FRAGILE

Page 15: How Graph Databases Can Save Your Bacon

KEVIN'S PROBLEM(S)

WHERE  TO  START?

WHEN  IS  IT  DONE?

WHEN  IS  IT  RIGHT?

Page 16: How Graph Databases Can Save Your Bacon

KEVIN'S  RESPONSE…?

Page 17: How Graph Databases Can Save Your Bacon

STRESSED  KEVIN 

Page 18: How Graph Databases Can Save Your Bacon
Page 19: How Graph Databases Can Save Your Bacon

WHAT  IF?

GRAPH  DATABASES  CAN

HELP

Page 20: How Graph Databases Can Save Your Bacon

INTRO  TO  GRAPH

DATABASES

Page 21: How Graph Databases Can Save Your Bacon

WHAT'S  A  GRAPH?

A (directed) graph is a set of nodesconnected by edges, where the edges have

a direction associated with them.

Page 22: How Graph Databases Can Save Your Bacon

WHAT'S  A  GRAPH

DATABASE?

a database designed to efficiently storeand model items (nodes) and the

relationships (edges) between them

Page 23: How Graph Databases Can Save Your Bacon

WHAT'S

DIFFERENT

ABOUT A

GRAPH  DATABASE?

Page 24: How Graph Databases Can Save Your Bacon

GRAPH  VS.  RELATIONAL

Data is stored together naturallyMost are schema-less by default

Page 25: How Graph Databases Can Save Your Bacon

EXPRESSIVE  QUERIES!

YOUR QUERY LANGUAGE SHOULD

ANSWER  YOUR

QUESTIONS!

Page 26: How Graph Databases Can Save Your Bacon

HOW  ARE  THEY  USED?

Finding connectionsRoute calculationsRecommendation systems

Page 27: How Graph Databases Can Save Your Bacon

MEET

OPEN SOURCE GRAPH DATABASE

Page 28: How Graph Databases Can Save Your Bacon

BACKGROUND

Mature (since 2007)Significant adoptionSupported by Neo Technologies, Inc.Cloud hosting available

Page 29: How Graph Databases Can Save Your Bacon

FIRST-CLASS

RELATIONSHIPS

No more many-to-many tables!Properties are allowedDescriptive labels

Page 30: How Graph Databases Can Save Your Bacon

WHY  NOT  USE  A

SPREADSHEET?

tab for every type of datatab for every kind of relationshipenjoy creating pivot tables with VLOOKUPs?spreadsheets live in SharePoint?

Page 31: How Graph Databases Can Save Your Bacon

AND  NOW...

Page 32: How Graph Databases Can Save Your Bacon

NEO4J  BROWSER  TOUR

Browser layoutQuery and ResultsOverview, Favorites, InformationQueriesResults

Page 33: How Graph Databases Can Save Your Bacon

RESULTS

VisualizationsCustomize color & sizeAuto-completeDouble-click (dynamic load)Real-time stylingGRASS files

Page 34: How Graph Databases Can Save Your Bacon

EXPORT

Image (SVG, PNG)Data (CSV, JSON)

Page 35: How Graph Databases Can Save Your Bacon

TUTORIALS  &  SAMPLES

:play start:play concepts:play query template

Page 36: How Graph Databases Can Save Your Bacon

TUTORIALS:

:PLAY START// :play start :play start

Try it!

Page 37: How Graph Databases Can Save Your Bacon

TUTORIALS

:PLAY CONCEPTS// :play concepts :play concepts

Try it!

Page 38: How Graph Databases Can Save Your Bacon

TUTORIALS

:PLAY QUERY TEMPLATE// :play query template :play query template

Try it!

Page 39: How Graph Databases Can Save Your Bacon

MEET

CYPHER

YOUR NEW QUERY LANGUAGE

Page 40: How Graph Databases Can Save Your Bacon

CREATING  DATA

CREATE KEVIN// Create Kevin MERGE (kevin:Person { name: "Kevin" }) RETURN kevin;

Try it!

Page 41: How Graph Databases Can Save Your Bacon

PATTERN  MATCHING

MATCH (n)

where (n) is a pattern

Page 42: How Graph Databases Can Save Your Bacon

MATCH  EXAMPLE

FIND KEVIN!// Find Kevin! MATCH (kevin:Person { name: "Kevin" }) RETURN kevin;

Try it!

Page 43: How Graph Databases Can Save Your Bacon

SHOW  ME  EVERYTHING!

GET EVERYTHING// Get everything MATCH n OPTIONAL MATCH (n)‐[r]‐() RETURN n, r;

Try it!

Page 44: How Graph Databases Can Save Your Bacon

DON'T  FORGET  A  LIMIT

USE LIMITS// Use limits MATCH (n) OPTIONAL MATCH (n)‐[r]‐() RETURN n, r LIMIT 25;

Try it!

Page 45: How Graph Databases Can Save Your Bacon

"ARROW"  SYNTAX

Direction (a)‐‐>(b)

Hops (a)‐[*1..2]‐>(b)

Label (a)‐[:KNOWS]‐>(b)

Page 46: How Graph Databases Can Save Your Bacon

WHICH  DIRECTION?

(a)-->(b)

…OR…

(a)<--(b)

Page 47: How Graph Databases Can Save Your Bacon

HOW  MANY  HOPS?

(a)-[*1..2]->(b)

Page 48: How Graph Databases Can Save Your Bacon

 

WHAT  KIND?

(a)-[:KNOWS]->(b)

:KNOWS IS A LABEL

Page 49: How Graph Databases Can Save Your Bacon

EXAMPLE

PART_O

F

TestCase

TestSuite

Page 50: How Graph Databases Can Save Your Bacon

MERGE  AND  SET

DESCRIBE KEVIN// Describe Kevin MERGE (kevin:Person { name: "Kevin" }) ON CREATE SET specialty = "CSS baby!" RETURN kevin;

Try it!

Page 51: How Graph Databases Can Save Your Bacon

HOW  DOES  THAT  HELP  MY

TEAM?

Page 52: How Graph Databases Can Save Your Bacon

REMEMBER  KEVIN?

Page 53: How Graph Databases Can Save Your Bacon

WHY'S  IT  SO  HARD?

Manual preparationToo much workEmail reviewQueries in work tracking tools

Page 54: How Graph Databases Can Save Your Bacon

TOOL  LIMITS

Query languages: SQLExcel filtering and sorting

Page 55: How Graph Databases Can Save Your Bacon

WE  CAN  GIVE  HIM  A

MAP

REFERENCES

REFERENCESREFERENCES

CssFile

JsFile

MvcView

MvcContr…

Page 56: How Graph Databases Can Save Your Bacon

GRAPH  STRATEGIES

FOR

SOFTWARE  SUCCESS

Page 57: How Graph Databases Can Save Your Bacon

STRATEGY  #1:

MODEL

WHAT YOU WANT TO

MASTER

Page 58: How Graph Databases Can Save Your Bacon

HUMAN  DOMAIN

INCLUDED_IN

INCLUDED_IN

INCLUDED_IN

INCLUDED_IN

INCLUDE

D_IN

PART_…

MEMBER_OF

EMPLO

YED_BY

Human

Audience

Role

Person

Organizat…

Group

Page 59: How Graph Databases Can Save Your Bacon

TESTING  DOMAIN

REPORTED_IN

RELATES_TO

APPLIES_TO

APPLIES_TO

RELATES_TOPART_OF

COVERS

Defect

Environment

Feature

UserProfile

Requirement

TestCase

TestSuite

UserStory

Page 60: How Graph Databases Can Save Your Bacon

DOMAINS  CAN  OVERLAP

PROCESS DOMAIN (W/ TESTING)

INCLUDED_INPART_OF

RELATES_TO

INCLUDED_

IN INCLUDED_IN

APPLIES_TO

APPLIES_TO

RELATES_TO

PART_OF

COVERS

CheckIn

Defect

Feature

Iteration

UserProfile

Release

Requirement

TaskTestCase

TestSuite

UserStory

Page 61: How Graph Databases Can Save Your Bacon

STRATEGY #2:

CONNECT

WHAT YOU WANT TO

CONTROL

Page 62: How Graph Databases Can Save Your Bacon

MAKE  CONNECTIONS

USE HIGH-LEVEL CONCEPTSReleasesFeaturesAreas

Page 63: How Graph Databases Can Save Your Bacon

GET FEATURES// Get features MATCH (feature:Feature) RETURN feature;

Try it!

Page 64: How Graph Databases Can Save Your Bacon

STRATEGY #3:

CONTRIBUTE

WHAT YOU WANT TO

CREATE

Page 65: How Graph Databases Can Save Your Bacon

MINE  YOUR  DATA

STEPS TO BUILD YOUR MODEL

Page 66: How Graph Databases Can Save Your Bacon

WHO  HAS  IT?

DBAs Tables, procs & queries

QAs Test cases

Devs Code

BAs Requirements docs

Page 67: How Graph Databases Can Save Your Bacon

DEVS:

COMB  YOUR  CODE  BASE!

Style sheetsJavaScript filesMVC viewsBusiness objects

Page 68: How Graph Databases Can Save Your Bacon

USE  YOUR  TOOLS

THINGS YOU ALREADY KNOWSQL (information_schema.* views)Find in Files (Regex included)Command-line (dir *.css /s /a /b)And...

Page 69: How Graph Databases Can Save Your Bacon

LINQPAD

LINQPAD.NET

Page 70: How Graph Databases Can Save Your Bacon

WHICH  IS  EASIER?

COMBING THROUGH LOTS   OF HTML…?<html>… <link rel="stylesheet" href="some‐styles.css" /> <!‐‐ … or in ASP.NET MVC… ‐‐> <link rel="stylesheet" href='@Url.Content("~/Styles/some‐styles.css")' />…<html> 

Page 71: How Graph Databases Can Save Your Bacon

OR  THIS?

MATCH CSS FILES WITH MVC VIEWS// MATCH CSS files with MVC views MATCH (c:CssFile)‐[r]‐(v:MvcView) RETURN DISTINCT c, v 

Try it!

Page 72: How Graph Databases Can Save Your Bacon

CSV LOAD WEB CODE ITEMS// CSV Load Web code items LOAD CSV WITH HEADERS FROM "http://localhost/SaveYourBacon/import/NewCssFiles.txt" AS csvLine FIELDTERMINATOR '\t' MERGE (css:CssFile { name: csvLine.CssFile }) MERGE (view:MvcView { name: csvLine.MvcView }) MERGE (view)‐[:USES]‐>(css) RETURN DISTINCT view, css;

Try it!

Page 73: How Graph Databases Can Save Your Bacon

GET CSS FILES// Get CSS files MATCH (n:CssFile) RETURN n;

Try it!

Page 74: How Graph Databases Can Save Your Bacon

CSS TO MVC VIEW?// CSS to MVC View? MATCH (css:CssFile)‐[]‐(vw:MvcView) RETURN css, vw;

Try it!

Page 75: How Graph Databases Can Save Your Bacon

CSS TO MVC VIEW, MAYBE MVC CONTROLLERS?// CSS to MVC View, maybe MVC Controllers? MATCH (css:CssFile)‐[]‐(vw:MvcView) OPTIONAL MATCH (vw)‐[]‐(ctl:MvcController) RETURN css, vw, ctl;

Try it!

Page 76: How Graph Databases Can Save Your Bacon

DEVS WIN!

PREDICT  IMPACTS

LESS  REWORK

MORE  FEATURES

Page 77: How Graph Databases Can Save Your Bacon

RELAXED  KEVIN 

Page 78: How Graph Databases Can Save Your Bacon
Page 79: How Graph Databases Can Save Your Bacon

KEVIN CHECKS IN HIS CHANGES// Kevin checks in his changes MATCH (kevin:Person { name: "Kevin" }) MATCH (global_css:CssFile { name: "Global.css" }) MATCH (details_css:CssFile { name: "ProductDetails.css" }) MERGE (checkin:CheckIn { name: "Change set 2231", description : "CSS fixes for product details" }) MERGE (global_css)‐[:INCLUDED_IN]‐>(checkin) MERGE (details_css)‐[:INCLUDED_IN]‐>(checkin) MERGE (kevin)‐[:SUBMITTED { submitDate : "2015‐0

Page 80: How Graph Databases Can Save Your Bacon

MERGE (kevin)‐[:SUBMITTED { submitDate : "2015‐0

6‐13" }]‐>(checkin)RETURN kevin, global_css, details_css, checkin;

Try it!

Page 81: How Graph Databases Can Save Your Bacon

BUSINESS ANALYSTS:

DON'T  JUST  STOP  THERE!

User storiesBack logRequirements documentsTest cases

Page 82: How Graph Databases Can Save Your Bacon

THINK  VISUALLY 

REPORTED_IN

RELATES_TO

APPLIES_TO

APPLIES_TO

RELATES_TOPART_OF

COVERS

Defect

Environment

Feature

UserProfile

Requirement

TestCase

TestSuite

UserStory

Page 83: How Graph Databases Can Save Your Bacon

SEE  WHAT'S  MISSING

Page 84: How Graph Databases Can Save Your Bacon

INCLUDED_IN

INCLUDED_IN

INCLU

DED

_IN

INCLUDED…

INCLUDED_IN

INCLU

D…

INCLUDED…

INCLUDED_IN INCLUDED_IN

INCLUDED_IN

IN…

INCLUDED_IN

INCLUD

ED_IN

INCLUDED_IN

INCLUDED_IN

PART_OF

APPLIES…

R…

MEMBER_OF

EMPLOYE

D_BY

ASSIG

NED_TO

PART_OF

COVERS

CheckIn

Release

Iteration

Task

UserStory

File

VsProjectVsSolution

Human

Organization

Role

Person

Group

Skill

Process

Requirement

TestCase

Page 85: How Graph Databases Can Save Your Bacon

BUSINESS ANALYSTS WIN!

REQUIREMENTS

COVERAGE

BETTER  ACCEPTANCE

TESTS

Page 86: How Graph Databases Can Save Your Bacon

QA:

TACKLE  YOUR  TESTS!

Automated testsIntegration testsUnit testsFeatures

Page 87: How Graph Databases Can Save Your Bacon

WHAT FEATURES DID KEVIN AFFECT?// What features did Kevin affect? MATCH (checkin:CheckIn { name: "Change set 2231" }) MATCH (css_file)‐[:INCLUDED_IN]‐>(checkin) MATCH (css_file)‐[]‐(vw:MvcView) MATCH (vw)‐[fr*1..3]‐(feature:Feature)RETURN checkin, css_file, vw, feature, fr;

Try it!

Page 88: How Graph Databases Can Save Your Bacon

DATA: WHAT TESTS DOES QA NEED TO RUN?// Data: What tests does QA need to run? MATCH (checkin:CheckIn { name: "Change set 2231" }) MATCH (css_file)‐[:INCLUDED_IN]‐>(checkin) MATCH (css_file)‐[]‐(vw:MvcView) MATCH (vw)‐[fr*1..3]‐(feature:Feature)MATCH (t_case:TestCase)‐[]‐(t_suite:TestSuite)‐[*1..2]‐(feature) RETURN DISTINCT t_suite.name AS `Test Suite`, t_case.name AS `Test Case`;

Try it!

Page 89: How Graph Databases Can Save Your Bacon

DATA: WHAT NEEDS TESTED FOR THIS RELEASE?// Data: What needs tested for this release? MATCH (rel:Release { name: "Release v2.3" })‐[]‐(checkin:CheckIn)‐[*1..4]‐(feature:Feature)‐[]‐(suite:TestSuite)‐[]‐(testCase:TestCase) RETURN DISTINCT rel.name AS `Release`, checkin.name AS `Check‐in`, suite.name AS `Test Suite`, testCase.name AS `Test Case`;

Try it!

Page 90: How Graph Databases Can Save Your Bacon

QA WINS!

BROADER  COVERAGE

FEWER  REGRESSIONS

MORE  AUTOMATION

Page 91: How Graph Databases Can Save Your Bacon

PROJECT  LEADERSHIP

NEEDS TO KNOW:What's scheduledRelease notes

Page 92: How Graph Databases Can Save Your Bacon

WHAT'S SCHEDULED FOR RELEASE V2.3?// What's scheduled for Release v2.3? MATCH (release_v2_3:Release { name : "Release v2.3" }) OPTIONAL MATCH (release_v2_3)<‐[r]‐() RETURN release_v2_3, r;

Try it!

Page 93: How Graph Databases Can Save Your Bacon

WHAT'S IN RELEASE V2.3?// What's in release v2.3? MATCH (rel_v2_3:Release { name: "Release v2.3" }) OPTIONAL MATCH (rel_v2_3)‐[]‐(checkin:CheckIn) RETURN rel_v2_3, checkin;

Try it!

Page 94: How Graph Databases Can Save Your Bacon

PROJECT LEADERSHIP

REPORTING  WITH

CONFIDENCE

INCREASED

CREDIBILITY

Page 95: How Graph Databases Can Save Your Bacon

OPERATIONS

NEEDS TO KNOW:What's deployedWhat's at risk

Page 96: How Graph Databases Can Save Your Bacon

ADD V2.3 TO UAT// Add v2.3 to UAT MATCH (rel_v2_3:Release { name: "Release v2.3" }) MATCH (uat:Environment { name: "UAT Environment"}) MERGE (rel_v2_3)‐[r_1_3:DEPLOYED_IN]‐>(uat) RETURN uat, rel_v2_3, r_1_3;

Try it!

Page 97: How Graph Databases Can Save Your Bacon

RELEASES IN ENVIRONMENTS// Releases in environments MATCH (rel:Release)‐[i]‐(env:Environment) RETURN rel, i, env;

Try it!

Page 98: How Graph Databases Can Save Your Bacon

OPERATIONS WINS!

CLARITY  OF  WHAT'S

DEPLOYED

WHO  TO  CALL  FOR

SOLUTIONS

Page 99: How Graph Databases Can Save Your Bacon

BOTTOM LINE

Page 100: How Graph Databases Can Save Your Bacon

BUSINESS POTENTIAL

MORE  PREDICTABILITY

MORE  CONFIDENCE

BOLDER  INNOVATION

Page 101: How Graph Databases Can Save Your Bacon

RECAP

WHAT'S  NEXT?

Page 102: How Graph Databases Can Save Your Bacon

ASK  YOURSELF.. .

CAN YOU ANSWER?How much test coverage do I have?  by feature, by release, by check-in?Which parts of the app should users re-test?Features with high code thrash?Features with most defects?

Page 103: How Graph Databases Can Save Your Bacon

SO…DOWNLOAD  IT!

COMMUNITY EDITION IS FREE!NEO4J.COM

Page 104: How Graph Databases Can Save Your Bacon

TRY  HOSTING…

Free trials available

Page 105: How Graph Databases Can Save Your Bacon

TRY  THE  GUIDES

&

DOWNLOAD  THE  E-BOOK

GRAPHDATABASES.COM

Page 106: How Graph Databases Can Save Your Bacon

GRAPHGISTS

80 different problem domainsInteractive open source samples

GRAPHGIST.NEO4J.COM

Page 107: How Graph Databases Can Save Your Bacon

AND,  EVEN  BEER

TINYURL.COM/NEO4BEER

Page 108: How Graph Databases Can Save Your Bacon

QUESTIONS?

Page 109: How Graph Databases Can Save Your Bacon

THANK  YOU

Code & Slides

jmill.net/neo4j

Connectjmill.net/connect

Twitter@xagronaut