19. Large
Investment
Bank
Industry: Financial Services
Use case: Entitlements/IAM
London
Background
• Top investment bank: over $1T in total assets
• Using a relational database coupled with Gemfire
for managing employee permissions to research
resources (documents and application services)
Business problem
Solution & Benefits
• When a new investment manager was onboarded,
• Organizational model, groups, and entitlements stored
permissions were manually provisioned via a complex
manual process. Traders lost an average of 5 days of
trading, waiting for the permissions to be granted
• Competitor had implemented a project to accelerate
the onboarding process. Needed to respond quickly.
• High stakes: Regulations leave no room for error.
• High complexity: Granular permissions mean each
trader needed access to hundreds of resources.
in Neo4j
• Very happy with the performance of the solution, and
the productivity advantage of a domain fit
• Graph visualization makes it easier for the business to
provision permissions themselves
• Moving to Neo4j meant “fewer compromises” than a
relational data store
Neo Technology, Inc Confidential
23. Industry: Insurance
Use case: Master Data Management
Background
• German mid-size Insurance company
• Founded in 1858, over 500 employees
Business problem
Solution & Benefits
• Field sales unit needed easy access to policies and
• Enable field sales unit to flexibly search for
customer data, in an increasing variety of ways
• Needed to support a growing business
• Existing IBM DB2 system not able to meet
performance requirements as the system scaled
• 24/7 available system for sales unit outside the
company needed
insurance policies and associated personal data
• Raising the bar with respect to insurance industry
practices
• Suppor the business as it scales, with a high level of
performance
• Easy port of existing metadata into Neo4j
Neo Technology, Inc Confidential
26. Use SQL to Find all Dependencies
(up to 3 levels down)
(continued from previous page...)
(SELECT T.directReportees AS directReportees, sum(T.count) AS count
SELECT depth1Reportees.pid AS directReportees,
FROM (
count(depth2Reportees.directly_manages) AS count
SELECT manager.pid AS directReportees, 0 AS count
FROM person_reportee manager
FROM person_reportee manager
JOIN person_reportee L1Reportees
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
ON manager.directly_manages = L1Reportees.pid
UNION
JOIN person_reportee L2Reportees
SELECT manager.pid AS directReportees, count(manager.directly_manages) AS count
ON L1Reportees.directly_manages = L2Reportees.pid
FROM person_reportee manager
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
GROUP BY directReportees
GROUP BY directReportees
) AS T
UNION
GROUP BY directReportees)
SELECT manager.pid AS directReportees, count(reportee.directly_manages) AS count
UNION
FROM person_reportee manager
(SELECT T.directReportees AS directReportees, sum(T.count) AS count
JOIN person_reportee reportee
FROM(
ON manager.directly_manages = reportee.pid
SELECT reportee.directly_manages AS directReportees, 0 AS count
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
FROM person_reportee manager
GROUP BY directReportees
JOIN person_reportee reportee
UNION
ON manager.directly_manages = reportee.pid
SELECT manager.pid AS directReportees, count(L2Reportees.directly_manages) AS count
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
FROM person_reportee manager
GROUP BY directReportees
JOIN person_reportee L1Reportees
UNION
ON manager.directly_manages = L1Reportees.pid
SELECT L2Reportees.pid AS directReportees,
JOIN person_reportee L2Reportees
count(L2Reportees.directly_manages) AS
ON L1Reportees.directly_manages = L2Reportees.pid
count
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
FROM person_reportee manager
GROUP BY directReportees
JOIN person_reportee L1Reportees
) AS T
ON manager.directly_manages = L1Reportees.pid
GROUP BY directReportees)
JOIN person_reportee L2Reportees
UNION
ON L1Reportees.directly_manages = L2Reportees.pid
(SELECT T.directReportees AS directReportees, sum(T.count) AS count
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
FROM (
GROUP BY directReportees
SELECT manager.directly_manages AS directReportees, 0 AS count
) AS T
FROM person_reportee manager
GROUP BY directReportees)
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
UNION
UNION
(SELECT L2Reportees.directly_manages AS directReportees, 0 AS count
SELECT reportee.pid AS directReportees, count(reportee.directly_manages) AS count
FROM person_reportee manager
FROM person_reportee manager
JOIN person_reportee L1Reportees
JOIN person_reportee reportee
ON manager.directly_manages = L1Reportees.pid
ON manager.directly_manages = reportee.pid
JOIN person_reportee L2Reportees
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
ON L1Reportees.directly_manages = L2Reportees.pid
GROUP BY directReportees
WHERE manager.pid = (SELECT id FROM person WHERE name = "fName lName")
UNION
Neo Technology, Inc Confidential
)
27. Use Cypher to Find all Dependencies
(up to n levels down)
Using Cypher
MATCH
(fund)-‐[:INCLUDES*0..n]-‐>(sub),
(sub)-‐[:INCLUDES*1..n]-‐>(asset)
WHERE
fund.ticker
=
“TRLGX”
RETURN
sub.ticker
AS
Asset_Group,
count(asset)
AS
Total
ORDER
BY
Total
DESC
For a given fund, returns all assets that
are made up of other assets,
ordered by the total # of included assets
Neo Technology, Inc Confidential
28. Connected Data & Query Performance
RDBMS vs. Native Graph Database
Response Time
1000x faster
Degree: Thousands+
Size: Billions+
# Hops: Tens to Hundreds
RDBMS
Degree: < 3
Size: Thousands
# Hops: < 3
Neo4j
Connectedness of Data Set
Neo Technology, Inc Confidential
29. Top Reasons for Choosing Neo4j
1. Problems with JOIN performance
2. Domain fit for graph
3. Open-ended business requirements
necessitating fast, iterative development
4. Evolving and/or non-uniform data,
avoiding sparse tables and frequent schema
chances
Neo Technology, Inc Confidential