Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Adopting Neo4j @ Enterprise scale
Search
Dmitrijs Vrublevskis
October 14, 2016
Programming
93
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Adopting Neo4j @ Enterprise scale
Dmitrijs Vrublevskis
October 14, 2016
More Decks by Dmitrijs Vrublevskis
See All by Dmitrijs Vrublevskis
Cypher Editor
fylmtm
0
170
Cypher in JetBrains IDE
fylmtm
0
220
League of Graphs \w Neo4j
fylmtm
0
1.7k
Performance & Stability testing \w Gatling
fylmtm
0
240
Neo4j Magic Adventures
fylmtm
1
210
Vim introduction
fylmtm
1
140
Google I/O 2014 - Web updates
fylmtm
0
160
Other Decks in Programming
See All in Programming
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
190
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
340
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
450
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
280
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
Are APIs Still Relevant in the AI Era?
soyuka
0
420
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
750
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
150
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
590
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Evolving SEO for Evolving Search Engines
ryanjones
0
310
Being A Developer After 40
akosma
91
590k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
610
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Fireside Chat
paigeccino
43
4.1k
Transcript
Adopting Neo4j @ Enterprise scale
Dmitry Vrublevsky Software developer @ ƀ
[email protected]
@FylmTM Ambassador @
Agenda 1. Why graph databases? 2. Why Neo4j? 3. Neo4j
internals 4. Use cases
GRAPH
NOT GRAPH
Graphs 101 Circle - node Arrow - relationship
Proof-of-Concept Evaluate Neo4j Graph Database as replacement to existing RDBMS
solution.
Small dataset Medium dataset Large dataset
Why graph databases? Domain Use case
Telecommunication domain
Use case: Validate network 5+ is OK
Use case: Validate network 5+ is OK
Use case: Validate network :( 5+ is OK
Why Neo4j? Highly scalable native graph database that leverages data
relationships as first-class entities. by Neo Technology, Inc.
http://db-engines.com/en/ranking
Features Native Processing & Storage ACID Cypher - Graph Query
Language REST & Native API Optional schema Lock Manager High-performance cache Clustering Backups Monitoring Community Enterprise
First-class Everything is an entity Entities have properties Entities have
a type
First-class {details: —} :LIKES :DMITRY :HighLoadStrategy {works_with: Neo4j} {day: 14.10.2016}
Properties Labels Type
Neo4j internals 1. Native storage 2. Native processing
Native storage Specifically designed to store and manage graphs.
http://neo4j.com/developer/graph-db-vs-rdbms/
http://neo4j.com/developer/graph-db-vs-rdbms/
http://neo4j.com/developer/graph-db-vs-rdbms/
Native processing Efficient way of processing graph data since connected
nodes physically “point” to each other a.k.a. “index-free adjacency”
$ ls -1 data/databases/graph.db | column -c 100 index neostore.propertystore.db.index.id
index.db neostore.propertystore.db.index.keys messages.log neostore.propertystore.db.index.keys.id neostore neostore.propertystore.db.strings neostore.counts.db.a neostore.propertystore.db.strings.id neostore.counts.db.b neostore.relationshipgroupstore.db neostore.id neostore.relationshipgroupstore.db.id neostore.labeltokenstore.db neostore.relationshipstore.db neostore.labeltokenstore.db.id neostore.relationshipstore.db.id neostore.labeltokenstore.db.names neostore.relationshiptypestore.db neostore.labeltokenstore.db.names.id neostore.relationshiptypestore.db.id neostore.nodestore.db neostore.relationshiptypestore.db.names neostore.nodestore.db.id neostore.relationshiptypestore.db.names.id neostore.nodestore.db.labels neostore.schemastore.db neostore.nodestore.db.labels.id neostore.schemastore.db.id neostore.propertystore.db neostore.transaction.db.0 neostore.propertystore.db.arrays neostore.transaction.db.1 neostore.propertystore.db.arrays.id schema neostore.propertystore.db.id store_lock neostore.propertystore.db.index
$ ls -1 data/databases/graph.db | column -c 100 index neostore.propertystore.db.index.id
index.db neostore.propertystore.db.index.keys messages.log neostore.propertystore.db.index.keys.id neostore neostore.propertystore.db.strings neostore.counts.db.a neostore.propertystore.db.strings.id neostore.counts.db.b neostore.relationshipgroupstore.db neostore.id neostore.relationshipgroupstore.db.id neostore.labeltokenstore.db neostore.relationshipstore.db neostore.labeltokenstore.db.id neostore.relationshipstore.db.id neostore.labeltokenstore.db.names neostore.relationshiptypestore.db neostore.labeltokenstore.db.names.id neostore.relationshiptypestore.db.id neostore.nodestore.db neostore.relationshiptypestore.db.names neostore.nodestore.db.id neostore.relationshiptypestore.db.names.id neostore.nodestore.db.labels neostore.schemastore.db neostore.nodestore.db.labels.id neostore.schemastore.db.id neostore.propertystore.db neostore.transaction.db.0 neostore.propertystore.db.arrays neostore.transaction.db.1 neostore.propertystore.db.arrays.id schema neostore.propertystore.db.id store_lock neostore.propertystore.db.index
Storage layout Node (15 bytes) in_use next_rel_id next_prop_id labels extra
Relationship (34 bytes) directed | in_use first_node second_node rel_type first_prev_rel_id first_next_rel_id second_prev_rel_id second_next_rel_id next_prop_id first_in_chain_markers
Storage layout Node (15 bytes) next_rel_id Relationship (34 bytes) first_node
second_node first_prev_rel_id first_next_rel_id
Storage math Node = RecordSize * ID Relationship = RecordSize
* ID
Traversal (Node -> Relationship) Node (15 bytes) next_rel_id=2 Relationships (34
bytes) 2 * 34 = 68 0B 34B 68B 102B 136B 170B
Traversal (Relationship -> Node) Relationship (34 bytes) Nodes (15 bytes)
0B 15B 30B 45B 60B 75B first_node=1 second_node=4 1 * 15 = 15 4 * 15 = 60
Native summary O(1) traversal hops Avoid super nodes!
Cypher Cypher is a declarative graph query language that allows
for expressive and efficient querying. https://github.com/opencypher/openCypher
Cypher 101 ASCII art: ( ) - node --> -
relationship Keywords: MATCH CREATE WHERE RETURN
Cypher example (1) MATCH (root)-->(children) RETURN *
Cypher example (2) MATCH (t:Towers) -[:CHILDREN]-> (n:NetworkPiece) -[:CHILDREN]-> (e:Function) WHERE
NOT (t)-[:CHILDREN]->(:CellJCA) RETURN t
Neo4j adoption
Application Persistence layer Neo4j driver Neo4j Performance Fast Slow Persistence
service
Application Persistence layer Neo4j driver Neo4j Performance Fast Slow Persistence
service
Use cases Measurement average, 98% Resource usage ~ same
UC: Sync Before Neo4j ~90m ~35m Count Per second Node
count 80.32M 37498 Relationship count 80.30M 37488 Properties count 257.78M 120345
UC: Single node Before Neo4j 3ms 2ms MATCH (n) WHERE
n.id = {id} RETURN n
UC: Subgraph Before Neo4j 88ms 14ms MATCH (n)-[r*]->(c) WHERE n.id
= {id} RETURN *
UC: By type Before Neo4j 235ms 194ms MATCH (t:Tower) RETURN
t
UC: Count Before Neo4j 32ms 16ms MATCH (n)-[r*]->(c) WHERE n.id
= {id} RETURN count(*)
3 4 5 6 8 2 7 1 UC: Traversal
Before Neo4j 112ms 39ms MATCH (n)-[r]->(c) WHERE n.id = {id} RETURN *
Future • Real graph API for application • Rewrite manual
traversals to Cypher queries
Deployment • Implemented in Java • Works everywhere • Writes
- vertical scaling • Reads - horizontal scaling • Extensions & Stored procedures
Stability • High load on DB • Kill Slave/master •
Rolling upgrade • Split-brain • Server power-off
None