Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
introduction neo4j
Kunihiko Ito
July 21, 2018
Programming
0
39
introduction neo4j
Kanazawa.rb #71 LT
Kunihiko Ito
July 21, 2018
Tweet
Share
More Decks by Kunihiko Ito
See All by Kunihiko Ito
Using Ractor
kunitoo
0
57
vim operation and my hotkey
kunitoo
0
100
Introduction Neo4j oblove calendar
kunitoo
0
1k
アジャイルソフトウェア開発の概要と現場での実践
kunitoo
0
1.5k
Introduction of neo4j
kunitoo
0
1.8k
Ruby 2.3 のてざわり
kunitoo
2
290
てさぐれ!受託もの
kunitoo
1
480
Hypermicrodata Client
kunitoo
0
45
1年かけてgemを1つ作りました
kunitoo
3
1.1k
Other Decks in Programming
See All in Programming
Gradle build: The time is now
nonews
0
120
【DevFest & ADS JP 22】チームで導入する
[email protected]
おいしい健康
kako351
0
210
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
LIFFで動く割り勘アプリTATEKAをリリースしてみた話
inoue2002
0
130
Functional Data Engineering - A Blueprint for adopting functional principles in data pipeline
vananth22
0
150
はてなリモートインターンシップ2022 インフラ 講義資料
hatena
4
2.1k
Data Product Manager? / データプロダクトマネージャーとは?
satoshihirose
3
1.5k
Rallyで支えるバージョン追従
pakio
0
180
はてなリモートインターンシップ2022 フロントエンドブートキャンプ 講義資料
hatena
0
110
量子コンピュータ時代のプログラミングセミナー / 20221222_Amplify_seminar _route_optimization
fixstars
0
240
はてなリモートインターンシップ2022 Web API 講義資料
hatena
0
150
jq at the Shortcuts
cockscomb
1
380
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
Producing Creativity
orderedlist
PRO
335
37k
Thoughts on Productivity
jonyablonski
49
2.7k
Ruby is Unlike a Banana
tanoku
93
9.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
254
12k
The Web Native Designer (August 2011)
paulrobertlloyd
76
2.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
346
17k
The Art of Programming - Codeland 2020
erikaheidi
35
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
74
4.3k
Rails Girls Zürich Keynote
gr2m
87
12k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Transcript
Neo4j の紹介 Kunihiko Ito Kanazawa.rb Meetup #71 2018-07-21
はじめ まして
Kanazawa.rb 初参加です
p self 名前: 伊藤 邦彦 出身: 富山 在住: 2017年から富山 所属:
ESM アジャイル事業部 仕事: [Rails, Neo4j, WebRTC]
@kunitoo GitHub とか
@kunitoo Twitter
Neo4j の紹介
Neo4j とは Neo4jはJavaで実装された、 オープンソースの最も人気の あるグラフデータベースであ る。 [cited from `wikipedia Neo4j']
グラフデータベースとは グラフ構造を扱うことのできる データベース
グラフ構造 ノードとノード間の連結関係を表 すエッジで構成されるデータ型
イメージ
どこで使える? ソーシャルグラフの構築 レコメンドエンジン
クエリ言語 Cypher
フォローしているユーザーの 取得 MATCH (me)-[follow:Follow]->(user) RETURN user
フォローユーザーのフォロー ユーザーまで取得 MATCH (me)-[:Follow]->(user)->[:Follow]->(user2) RETURN user2
フォローユーザーのフォロー ユーザーまで取得 MATCH (me)-[follow:Follow*..2]->(user) RETURN user
アスキーアートみたいにクエ リが書ける MATCH ()-[]->()->[]->()
使ってみ たくなり ました?
今すぐダウンロード https://neo4j.com/download/
docker-compose.yml docker-compose up して、 localhost:7474 にアクセス version: '3' services: neo4j:
image: neo4j ports: - "7474:7474" - "7687:7687" environment: NEO4J_AUTH: "none" volumes: - neo4j:/data volumes: neo4j:
Neo4j Browser
Ruby で利用するには Neo4jrb https://github.com/neo4jrb/ neo4j
Neo4jrb require 'neo4j' Neo4j::Session.open(:server_db, 'http://localhost:7474') session = Neo4j::Session.current session.query.match('(me)-[:Follow]->(user)').return('user')
問題を解いてみる http://nabetani.sakura.ne.jp/hena/ orde20maze/
Neo4j を使った答え Neo4j::Session.open(:server_db, 'http://localhost:7474') conn = Neo4j::Session.current conn.query('MATCH (n) DETACH
DELETE n') nodes = {} (?0..?9).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } (?A..?Z).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } [ [?0, ?1], [?2, ?3], [?3, ?4], [?4, ?5], [?7, ?8], [?8, ?9], [?9, ?A], [?C, ?D], [?F, ?G], [?J, ?K], [?K, ?L], [?L, ?M], [?P, ?Q], [?Q, ?R], [?S, ?T], [?U, ?V], [?V, ?W], [?Y, ?Z], [?0, ?6], [?6, ?C], [?C, ?I], [?I, ?O], [?1, ?7], [?J, ?P], [?P, ?V], [?E, ?K], [?3, ?9], [?9, ?F], [?R, ?X], [?G, ?M], [?M, ?S], [?S, ?Y], [?5, ?B], [?H, ?N], [?N, ?T] ].each do |l1, l2| n1 = nodes[l1] n2 = nodes[l2] Neo4j::Relationship.create(:line, n1, n2) end s, g = input.chars conn.query("MATCH (s:Pos{ name: '#{s}' }), (g:Pos{ name: '#{g}' }), p = shortestPath((s)-[:line*]-(g)) RETURN length(p) AS len").to_a.first.len.to_s
初期化 Neo4j::Session.open(:server_db, 'http://localhost:7474') conn = Neo4j::Session.current conn.query('MATCH (n) DETACH DELETE
n')
迷路の作成 (?0..?9).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } (?A..?Z).each
{|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } [ [?0, ?1], [?2, ?3], [?3, ?4], [?4, ?5], [?7, ?8], [?8, ?9], [?9, ?A], [?C, ?D], [?F, ?G], [?J, ?K], [?K, ?L], [?L, ?M], [?P, ?Q], [?Q, ?R], [?S, ?T], [?U, ?V], [?V, ?W], [?Y, ?Z], [?0, ?6], [?6, ?C], [?C, ?I], [?I, ?O], [?1, ?7], [?J, ?P], [?P, ?V], [?E, ?K], [?3, ?9], [?9, ?F], [?R, ?X], [?G, ?M], [?M, ?S], [?S, ?Y], [?5, ?B], [?H, ?N], [?N, ?T] ].each do |l1, l2| n1 = nodes[l1] n2 = nodes[l2] Neo4j::Relationship.create(:line, n1, n2) end
迷路グラフ
探索と距離 s, g = input.chars conn.query(" MATCH (s:Pos{ name: '#{s}'
}), (g:Pos{ name: '#{g}' }), p = shortestPath((s)-[:line*]-(g)) RETURN length(p) AS len" ).to_a.first.len.to_s
Enjoy Neo4j