Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kevin Bacon Number with Neo4j
Search
kawakubox
August 17, 2016
Programming
0
1.9k
Kevin Bacon Number with Neo4j
グラフデータベースのNeo4jを使って、ケビン・ベーコン数の検証をしたLTのスライド
kawakubox
August 17, 2016
Tweet
Share
More Decks by kawakubox
See All by kawakubox
speee-eng-mtg-20160810
kawakubox
0
1.5k
speee-kaigi-160629
kawakubox
1
2.8k
Other Decks in Programming
See All in Programming
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
700
AIでLINEスタンプを作ってみた
eycjur
1
230
Navigating Dependency Injection with Metro
zacsweers
3
2.5k
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
460
Design Foundational Data Engineering Observability
sucitw
3
200
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
400
個人軟體時代
ethanhuang13
0
330
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
450
概念モデル→論理モデルで気をつけていること
sunnyone
2
280
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
250
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
520
rage against annotate_predecessor
junk0612
0
170
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Writing Fast Ruby
sferik
628
62k
Docker and Python
trallard
46
3.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Balancing Empowerment & Direction
lara
3
620
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Transcript
Neo4j Ͱ έϏϯɾϕʔ ίϯʹ৮ΕͯΈΔ 2016.8.17 (Wed)
• ໊લ: Տٱอ ൟ࢙ (kawakubox) • ւ֎ࣄۀ෦ Eng • !
ϑϧϚϥιϯࢦͯ͠ ΦϑΟε to ࣗ ͷ Extreme ୀ ࣾͳΜ͔ͰτϨʔχϯάதɻ
ಥવͰ͕͢ɺέϏϯɾϕ ʔίϯͬͯͬͯ·͢ ͔ʁ
None
ΞϝϦΧ߹ऺࠃͷആ༏ ओͳग़ԋ࡞ • ʰτϨϚʔζʱ • ʰΞϙϩ13ʱ • ʰX-MEN: ϑΝʔετɾδΣωϨʔγϣϯʱ etc
etc ...
ͰɺέϏϯɾϕʔίϯ ͬͯͬͯ·͔͢ʁ
έϏϯɾϕʔίϯͱ өըആ༏ͷڞԋؔͷʮڑʯΛέϰΟϯɾϕʔίϯΛىʹ ܭଌ͞ΕΔ ϕʔίϯຊਓ͕ʮϋϦουͷશһ͕ࣗͷڞԋऀ͔ɺڞԋऀ ͷڞԋऀͩʯͱ͍͏झࢫͷൃݴͨ͜͠ͱ͕͖͔͚ͬ — wikipedia
έϏϯɾϕʔίϯͷਤ Ͱඳ͘ͱ
None
࣍ͷִͨΓ ࣍ͷִͨΓʢΖ͘͡ͷͩͨΓɺSix Degrees of Separationʣ ͱɺશͯͷਓࣄ6εςοϓҎͰܨ͕͍ͬͯͯɺ༑ୡͷ ༑ୡ…Λհͯ͠ੈքதͷਓʑͱؒతͳΓ߹͍ʹͳΔ͜ͱ͕ Ͱ͖Δɺͱ͍͏Ծઆɻ — wikipedia
• SNSͳͲͷԼʹͳ͍ͬͯΔԾઆ
·͞ʹάϥϑDBʹͱͬͯ࠷దͷͳͷͰɺNeo4jͷੑೳݕূ ݉Ͷͯେ͖ΊͳσʔλΛೖͯ͠ΈΑ͏
σʔλϞσϧ
None
Node : Person • ϓϩύςΟ • person_id • name
Relation : KNOWS • ϓϩύςΟͳ͠
લఏ • 1ਓ࠷100ਓͱΓ߹͍Ͱ͋Δ
1,000,000ਓͷੈք σʔλೖ࣌ؒ(csv import) IMPORT DONE in 7m 6s 292ms. Imported:
1000000 nodes 200000000 relationships 2000000 properties
1,000,000ਓͷੈք ϗοϓͷ # ࢼߦճ : 1,065ճ {0=>0, 1=>0, 2=>43, 3=>1021,
4=>1, 5=>0}
10,000,000ਓͷੈք IMPORT DONE in 3h 5m 4s 706ms. Imported: 10000000
nodes 2000000000 relationships 20000000 properties
10,000,000ਓͷੈք ϗοϓͷ # ࢼߦճ : 1,065ճ {0=>0, 1=>0, 2=>4, 3=>592,
4=>469, 5=>0}
֬ೝ༻ͷCYPHERΫΤϦ MATCH (a:Person {person_id: {i}}), (b:Person {person_id: {j}}), p =
shortestPath((a)-[*..6]->(b)) RETURN length(p) as len
CYPHERΫΤϦͷ༁ MATCH // person_id = i Λ࣋ͭϊʔυΛऔಘ͠ɺ a ͱ͢Δ (a:Person
{person_id: {i}}), // person_id = j Λ࣋ͭϊʔυΛऔಘ͠ɺ b ͱ͢Δ (b:Person {person_id: {j}}), // a ͱ b ͷϗοϓ͕ 6 ҎͷͷͰɺ࠷ܦ࿏Λऔಘ͢Δ p = shortestPath((a)-[*..6]->(b)) RETURN // ࠷ܦ࿏ͷ͞(len)Λฦ٫͢Δ length(p) as len
126,000,000ਓͷੈքʢຊʣ -rw-r--r-- 1 kawakubox staff 21M 8 16 22:09 person_1000000.csv
-rw-r--r-- 1 kawakubox staff 221M 8 17 01:31 person_10000000.csv -rw-r--r-- 1 kawakubox staff 2.6G 8 16 22:12 relation_1000000.csv -rw-r--r-- 1 kawakubox staff 2.9G 8 17 01:34 person_japan.csv -rw-r--r-- 1 kawakubox staff 29G 8 17 03:53 relation_10000000.csv ϦϨʔγϣϯೖ༻σʔλ͕ 10,000,000 ͷ࣌Ͱ 30G ͋ͬͨ ͷͰɺσʔλ࡞࣌Ͱஅ೦ɺɺɺ
ࠓճͬͯΈͯͷؾ͖ • ϊʔυ͕ 10,000,000 Ͱɺదʹ index షΕɺprimary ݕ ࡧࣗମ 0ms
͘Β͍Ͱฦͬͯ͘Δ • ϦϨʔγϣϯ͕ 2,000,000,000 ͘Β͍ʹͳΔͱɺ͘ͳͬͯ ͘Δ (5sec ͘Β͍) • ͍ΫΤϦɺCPUར༻ 300% ͑ͱ͔ฏؾͰ͢Δ • Enterprise൛ͬͯͷΫϥελϦϯάͳΜ͔ࢼͯ͠Έͨ ͍
END