Date post: | 02-Jul-2015 |
Category: |
Technology |
Upload: | stephane-frechette |
View: | 235 times |
Download: | 2 times |
Graph Databases for SQL Server
Professionals
Stéphane Fréchette
Who am I?
My name is Stéphane Fréchette
SQL Server MVP | Consultant | Speaker | Database & BI Architect | NoSQL. Drums, good food and fine wine. Founder @ukubu, @GatineauOuverte, @TEDxGatineau
I have a passion for architecting, designing and building solutions that matter.
Twitter: @sfrechette
Blog: stephanefrechette.com
Email: [email protected]
11/25/2014 | SQLSaturday Winnipeg #3502 |
Thanks to Our Sponsors!
Gold
Silver
Bronze
Session Outline
What is a Graph?
What is Neo4j?
Data Modeling – The Property Graph
Cypher Query Language
Importing Data…
Use Cases
Demos
Resources
11/25/2014 | SQLSaturday Winnipeg #3504 |
What is a Graph?
11/25/2014 | SQLSaturday Winnipeg #3505 |
Are these Graphs?
11/25/2014 | SQLSaturday Winnipeg #3506 |
This is a Graph
Node
Relationship
A Property Graph
11/25/2014 | SQLSaturday Winnipeg #3507 |
Organization Project Graph
11/25/2014 | SQLSaturday Winnipeg #3508 |
Twitter Social Graph
11/25/2014 | SQLSaturday Winnipeg #3509 |
What is Neo4j?
An open-source graph database by Neo Technology. Neo4j stores data in nodesconnected by directed, typed relationships with properties on both, also know as a Property Graph
Fully ACID compliant
Massively scalable, up to several billion nodes/relationships/properties
Highly-available, when distributed across multiple machines
Accessible by a convenient REST interface or an object-oriented Java API
11/25/2014 | SQLSaturday Winnipeg #35010 |
Data Modeling
From SQL Server to Graph
Property Graph
11/25/2014 | SQLSaturday Winnipeg #35011 |
Example: Meetup Data In SQL Server
ID Member
1 Daniel
2 Stephane
3 John
4 Randy
ID Name
1 Ottawa SQL Server User
Group
2 Ottawa JavaScript
3 Ottawa Visio User Group
4 Ottawa Tableau User Group
5 Dirty Dancing Ottawa
MemberID MeetupID
2 1
1 2
3 3
2 4
3 5
MemberID MeetupID
3 1
3 2
4 2
4 4
1 5
Member MeetupMeetupOrganizer MeetupMember
11/25/2014 | SQLSaturday Winnipeg #35012 |
Example: Meetup Data In a Graph Member Meetup
name: ‘Stephane’
name: ‘Ottawa Tableau User Group’
name: ‘Ottawa SQL Server User
Group’
name: ‘John’
name: ‘Ottawa JavaScript’
name: ‘Dirty Dancing Ottawa’
name: ‘Ottawa Visio User Group’
name: ‘Randy’
name: ‘Daniel’
11/25/2014 | SQLSaturday Winnipeg #35013 |
Cypher Query Language
Cypher is a declarative graph query language that allows
for expressive and efficient querying and updating of the
graph store
Pattern-matching
Declarative: what to retrieve, not how to retrieve it
Inspired from other known Language (SQL, SPARQL, Haskell, Python)
Aggregation, Ordering, Limit
Update the Graph
11/25/2014 | SQLSaturday Winnipeg #35014 |
Cypher and T-SQL
Cypher also has a number of keywords that have a direct equivalence with SQL which makes it a curiously familiar language
WHERE
ORDER BY
LIMIT
SUM, COUNT, STDEVP, MIN, MAX etc…
LTRIM, UPPER, LOWER, REPLACE, LEFT, RIGHT, SUBSTRING
DISTINCT
CASE (SQL Server Pros) – [:WILL_LOVE] -> (Cypher)
11/25/2014 | SQLSaturday Winnipeg #35015 |
Cypher - Meetup
11/25/2014 | SQLSaturday Winnipeg #35016 |
Neo4j Browser
11/25/2014 | SQLSaturday Winnipeg #35017 |
Demo(let’s query some data…)
11/25/2014 | SQLSaturday Winnipeg #35018 |
Importing Data…
11/25/2014 | SQLSaturday Winnipeg #35019 |
Importing Data…
Some important considerations…Different import scenarios
Dataset size: 1000s, 100000s, 10000000s
Dataset format (source): Database, File (CSV, Spreadsheet, GraphML, Geoff), Service, Other
Import type: Initial Bulk Load, Incremental Load, Initial Bulk Load + Incremental Load
Different import tools
Spreadsheet based
Neo4j-shell based: (Cypher, neo4j-shell-tools, Cypher LOAD CSV)
Command-line based: Batch Importer
Neo4j Brower based
ETL Tools: (Talend, Mulesoft, Pentaho Kettle)
Custom software: (Java API, REST API, Spring Data Neo4j)
11/25/2014 | SQLSaturday Winnipeg #35020 |
Many different mappings
Not always clear what you should be using
Depends on your skillsets, dataset size… (lots of other stuff)
Choose wisely!
Import
Scenarios
Import
Tools
11/25/2014 | SQLSaturday Winnipeg #35021 |
Demo(walkthrough on importing data…)
11/25/2014 | SQLSaturday Winnipeg #35022 |
The Sample Dataset
11/25/2014 | SQLSaturday Winnipeg #35023 |
Importing using Spreadsheets
Very small size datasets < 1000, easy to use
Format data in
spreadsheet
Generate Cypher
statements with
formulas
Copy and Execute
Cypher in Neo4j
browser
11/25/2014 | SQLSaturday Winnipeg #35024 |
Importing using Spreadsheets
11/25/2014 | SQLSaturday Winnipeg #35025 |
Importing using neo4j-shell-tools
Small to medium size datasets
https://github.com/jexp/neo4j-shell-tools
Format data in CSV
files
Create import-
cypher commands
for
neo4j-shell-tools
Execute commands
from neo4j-shell
11/25/2014 | SQLSaturday Winnipeg #35026 |
Importing using neo4j-shell-tools
11/25/2014 | SQLSaturday Winnipeg #35027 |
Importing using LOAD CSV
Native Cypher
Format data in
CSV files
Create
“LOAD CSV”
commands
Execute
command from
neo4j-shell or
browser
Additional
“cleanup” for
Labels and
RelTypes
11/25/2014 | SQLSaturday Winnipeg #35028 |
Importing using LOAD CSV
11/25/2014 | SQLSaturday Winnipeg #35029 |
Importing using Batch Importer
Non-transactional import, suited for very very large datasets
Format data in
TSV files
Execute Batch
Import
command
Copy store
files to Neo4j
Server
directory
Start Neo4j
Server with
generated store
files
11/25/2014 | SQLSaturday Winnipeg #35030 |
Use Cases
Principal uses of Graph Database include:
Network and Data Center Management(Queries: Impact Analysis, Root Cause Analysis, Quality-of-Service Mapping, Asset Management)
Authorization and Access(Queries : Access Management, Interconnected Group Organization, Provenance)
Social(Queries : Friend Recommendations, Sharing & Collaboration, Influencer Analysis)
Geo(Queries : Routing, Logistics, Capacity Planning)
Recommendations(Queries : Product, Social, Service, and Professional Recommendations)
Fraud Detection
http://www.neotechnology.com/neo4j-use-cases/
11/25/2014 | SQLSaturday Winnipeg #35031 |
Summary
(graphs)-[:ARE]->(everywhere)
11/25/2014 | SQLSaturday Winnipeg #35032 |
Resources
Neo Technology http://www.neotechnology.com/
Neoj.org (Learn, Develop, Downloads,…) http://www.neo4j.org/
Neo4j on Vimeo http://vimeo.com/neo4j
Neo4j on SlideShare http://www.slideshare.net/neo4j
Neo4j on Github https://github.com/neo4j
Neo4j Cypher Cheat Sheet http://docs.neo4j.org/refcard/2.1/
Neo4j Graph Database as a Service http://www.graphenedb.com/
Linkurious – The easiest way to explore graph databases http://linkurio.us/
KeyLines- Visualize dynamic networks http://keylines.com/
Experiments with NEO4J: Using a graph database as a SQL Server metadata hub http://bit.ly/V2PrxN
Kenny Bastani http://www.kennybastani.com/
Rik Van Bruggen http://blog.bruggen.com/
Max de Marzi http://maxdemarzi.com/
Better Software Development http://jexp.de/blog/
Graph Databases (Free Book) http://graphdatabases.com/
Neo4j GraphGist http://gist.neo4j.org/
GraphConnect Conference http://graphconnect.com/
Titan – Distributed Graph Database https://thinkaurelius.github.io/titan/
InfiniteGraph http://www.infinitegraph.com/
OrientDB http://www.orientechnologies.com/
Cayley by Google https://github.com/google/cayley
11/25/2014 | SQLSaturday Winnipeg #35033 |
What Questions Do You
Have?
11/25/2014 | SQLSaturday Winnipeg #35034 |
Thank You
For attending this session
11/25/2014 | SQLSaturday Winnipeg #35035 |