14. Early Adopter Segments
(What we expected to happen - view from several years ago)
Core Industries
& Use Cases:
Web / ISV
Finance &
Insurance
Network & Data Center
Management
MDM
Social
Geo
Neo Technology, Inc Confidential
Datacom /
Telecom
15. Neo4j Adoption Snapshot
Select Commercial Customers* Across Anticipated Segments
Core Industries
& Use Cases:
Web / ISV
Network & Data Center
Management
MDM
Social
Geo
*Community Users Not Included
Neo Technology, Inc Confidential
Financial
Services
Telecommunications
16. Neo4j Adoption Snapshot
Select Commercial Customers* Across Anticipated Segments
Core Industries
& Use Cases:
Web / ISV
Finance &
Insurance
Network & Data Center
Management
MDM
Social
Geo
Neo Technology, Inc Confidential
Telecommunications
17. Neo4j Adoption Snapshot
Select Commercial Customers* Across Anticipated Segments
Core Industries
Core Industries
& & Use Cases:
Use Cases:
Web / ISV
Software
Finance &
Financial
Insurance
Services
TelecommTelecommu Health Care &
unications
Life Sciences
nications
Web Social,
HR & Recruiting
Media &
Publishing
Energy, Services,
Automotive, Gov’t,
Logistics, Education,
Gaming, Other
Network & DataData
Network & Center
Management
Center Management
MDM / System of
MDM
Record
Social
Social
Accentur
e
Geo
Geo
Recommend-ations
Identity & Access
Mgmt
Finance
Content
Management
BI, CRM, Impact Analysis,
Fraud Detection, Resource
Optimization, etc.
Neo Technology, Inc Confidential
Energy
Aerospace
21. A graph database...
NO: not for charts diagrams, or vector artwork
YES: for storing data that is structured as a graph
8
22. A graph database...
NO: not for charts diagrams, or vector artwork
YES: for storing data that is structured as a graph
remember linked lists, trees?
8
23. A graph database...
NO: not for charts diagrams, or vector artwork
YES: for storing data that is structured as a graph
remember linked lists, trees?
graphs are the general-purpose data structure
8
24. A graph database...
NO: not for charts diagrams, or vector artwork
YES: for storing data that is structured as a graph
remember linked lists, trees?
graphs are the general-purpose data structure
“A relational database may tell you the average age of everyone
in this session,
but a graph database will tell you who is most likely to buy you a
beer.”
8
45. We're talking about a
Property Graph
Joh
Em
il
knows
knows
Nodes
Alli
Tob
i
as
knows
Lar
An d
son
knows
knows
An d
knows
rea
s
Pet
er
Miic
Mc
a
a
knows
knows
rés
knows
knows
Relationships
an
s
knows
knows
Ian
knows
De
lia
Mi c
hae
l
Properties (each a key+value)
Labels (constraints, Indexes for look-ups)
10
50. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
11
51. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
๏ pathExists(a,b) limited to depth 4
11
52. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
๏ pathExists(a,b) limited to depth 4
๏ caches warmed up to eliminate disk I/O
11
53. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
๏ pathExists(a,b) limited to depth 4
๏ caches warmed up to eliminate disk I/O
# persons
Relational database 1 000
query time
2000ms
11
54. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
๏ pathExists(a,b) limited to depth 4
๏ caches warmed up to eliminate disk I/O
# persons
Relational database 1 000
Neo4j 1 000
query time
2000ms
2ms
11
55. Looks different, fine. Who cares?
๏ a sample social graph
• with ~1,000 persons
๏ average 50 friends per person
๏ pathExists(a,b) limited to depth 4
๏ caches warmed up to eliminate disk I/O
# persons
Relational database 1 000
query time
2000ms
Neo4j 1 000
2ms
Neo4j 1 000 000
2ms
11
57. Graph Database: Pros Cons
๏ Strengths
• Powerful data model, as general as RDBMS
• Fast, for connected data
• Easy to query
๏ Weaknesses:
• Sharding (though they can scale reasonably well)
‣also, stay tuned for developments here
• Requires conceptual shift
‣though graph-like thinking becomes addictive
12
58. Show me some code, please
GraphDatabaseService graphDb =
new EmbeddedGraphDatabase(“var/neo4j”);
Transaction tx = graphDb.beginTx();
try {
Node steve = graphDb.createNode();
Node michael = graphDb.createNode();
!
steve.setProperty(“name”, “Steve Vinoski”);
michael.setProperty(“name”, “Michael Hunger”);
!
Relationship presentedWith = steve.createRelationshipTo(
michael, PresentationTypes.PRESENTED_WITH);
presentedWith.setProperty(“date”, today);
tx.success();
} finally {
tx.finish();
}
60. Spring Data Neo4j
@NodeEntity
public class Movie {
@Indexed private String title;
@RelatedToVia(type = “ACTS_IN”, direction=INCOMING)
private SetRole cast;
private Director director;
}
!
@NodeEntity
public class Actor {
@RelatedTo(type = “ACTS_IN”)
private SetMovies movies;
}
!
@RelationshipEntity
public class Role {
@StartNode private Actor actor;
@EndNode private Movie movie;
private String roleName;
}
61. neo4j.rb
gem install neo4j
!
require 'rubygems'
require 'neo4j'
!
class Person
include Neo4j::NodeMixin
property :name, :age, :rank
index :name
has_n :friends
end
!
Neo4j::Transaction.run do
neo = Person.new :name='Neo', :age=29
morpheus =
Person.new :name='Morpheus', :rank='Captain'
neo.friends morpheus
end
!
neo.friends.each {|p|...}