SlideShare a Scribd company logo
オイラ大地がNeo4jに
寄せる期待
オイシックス・ラ・大地(株) 林 如弥
Photo by Alexandr Podvalny on Unsplash: https://unsplash.com/photos/WOxddhzhC1w
Neo4j ユーザー勉強会 #20
2019-02-20
本日の流れ
● Neo4jと私(自己紹介)
● オイラ大地の会社紹介
● RDBを使用する現在の課題
● Neo4jに寄せる期待
● まとめ
簡単な自己紹介
林 如弥(Yukiya Hayashi) @morihaya55
● Neo4j歴
○ 1営業日程度 (( ;゚Д゚))
● 安全・安心な野菜をお届けするオイラ大地のシス
テムの運用、改善をするSREです
●  (分析担当ではありません)
Neo4jとは2018-12-01の「グラフ・データベー
ス完全入門!」で出会いました
https://pgx.connpass.com/event/107567/
面白いと素直に思ったのでNeo4jUGに参加
して、ついでにLTもやりました
https://www.slideshare.net/ssuser1f3c12/20190116-neo4juglt-128168407
「グラフ・データベース完全入門!」第二回ある
そうですよ 3/9(土)
https://pgx.connpass.com/event/121350/
(We are “Oisix ra daichi inc.”)
オイラ大地の会社紹介
「弊社、ネットで八百屋を
やっておりまして...」
What we expect of neo4j
安全・安心なお野菜(お肉
も!)を購入頂ける、ECサ
イトを運営しています
What we expect of neo4j
ヘルシーで美味しい時短メ
ニューもご用意していま
す!!
Photo by Elevate on Unsplash: https://unsplash.com/photos/dI-aXC7DWpQ
弊社の特徴の一つとして全
国各地に配送センターを自
社で持っています
会員数も順調に増え IRニュース(2018年3月期決算説明資料より )
https://www.oisixradaichi.co.jp/investors/ir_news/
基本自社で技術やってます(Our Tech Stacks)
RDBを使用する現在の課題
(私の独断的観点から)
誰もがSQLを実行できる環境では無い
● バッチ処理などへの影響懸念
● アクセスするデータの権限管理
課題1 - データの民主化ができていない
膨大なデータから以下を簡単にしたい
● この商品を買う人はXXも買っています
● この商品に関連するのはYY、ZZです
 ※実画面出します
課題2 - リコメンドを簡単にできない
SREとしてはパフォーマンスチューニングも
責務だが、調査したクエリが大きすぎて読み
きれない
(私が非力と言われればそうかも)
課題3 - 超大作なSlowQueryを読めない
Neo4jに寄せる期待
(ここから”事実”でなく”願い”の話です)
1. データの民主化ができていない
2. リコメンドを簡単にできない
3. 超大作なSlowQueryを読めない
前述した課題を解決してくれるのでは
期待1 - データの民主化の加速
現在は以下の様に、業務から切り離された
参照・検証用RDBを構築中
期待1 - データの民主化の加速
サービス用DB 分析バッチ用DB 参照・検証用DB
RDBRDB RDB
同じ様にNeo4jを構築しても良いのでは
期待1 - データの民主化の加速 - 2
サービス用DB バッチ用DB 参照・検証用DB
RDBRDB
RDB
SQLもCypherも自由に実行できる環境とい
うのは、魅力的と言えるかも
期待1 - データの民主化の加速 - 3
サービス用DB バッチ用DB 参照・検証用DB
RDBRDB
RDB
Neo4j Desktopの魅力的なビジュアライズ
も間口を広げる可能性を感じる
期待1 - データの民主化の加速 - 4
さらにyFilesも!?
期待2 - リコメンド機能の実装
顧客、商品などの情報(ノード)間の関連性
をグラフDBは得意とすると認識している
期待2 - リコメンド機能の実装
Neo4jのUse caseにも”Recommendation
Engine”として上位に紹介されている
期待2 - リコメンド機能の実装 - 2
https://neo4j.com/use-cases/real-time-recommendation-engine/
いざ「リコメンドをやろう」となった時、Neo4j
を活用できる可能性があるのでは
期待2 - リコメンド機能の実装 - 3
期待3 - クエリのシンプル化
何段もFROM/JOINで結合された強大なク
エリを、Cypherのシンプルな構文で置き換
えることができるのでは
期待3 - クエリのシンプル化
例えばこんなSQLのクエリが
期待3 - クエリのシンプル化 - 2
// 「『自分が行ったカフェ』に行ったことのある人」が行ったことのある、か
つ、自分が行ったことのないカフェ ランキング トップ10
SELECT `cafes`.`id` , `cafes`.`name` , COUNT(
`favorites`.`cafe_id` ) AS `count`
FROM `favorites`
RIGHT JOIN `cafes` ON `favorites`.`cafe_id` =
`cafes`.`id`
WHERE `user_id`
IN (
// 「自分が行ったカフェ」に行った人(自分以外)
SELECT `user_id`
FROM `favorites`
WHERE `cafe_id`
IN (
// 自分が行ったカフェ
SELECT `cafe_id`
FROM `favorites`
WHERE `user_id` =[自分のユーザ ID]
AND `status` =[行った]
)
https://allabout-tech.hatenablog.com/entry/2017/03/02/094600
AND `user_id` !=[自分のユーザ ID]
)
AND `status` =[行った]
AND `cafe_id` NOT
IN (
// 自分が行ったカフェ をNOT
SELECT `cafe_id`
FROM `favorites`
WHERE `user_id` =[自分のユーザ ID]
AND `status` =[行った]
)
GROUP BY `favorites`.`cafe_id`
ORDER BY `count` DESC
LIMIT 10
この様にCyhperで書けるそうで
期待3 - クエリのシンプル化 - 3
MATCH
(u:User{user_id: [ユーザ
ID]})-[:VISITED]->(c:Cafe)<-[:VISITED]-(u2:User)-[:VISITED]->(c
2:Cafe)-[:IS_IN]->(z:Zone)
WHERE NOT
(u)-[:VISITED]->(c2)
RETURN c2.cafe_name, count(u2) as count, z.zone_name
ORDER BY count DESC
LIMIT 10
https://allabout-tech.hatenablog.com/entry/2017/03/02/094600
期待3 - クエリのシンプル化 - 4
これは使いこなせれば良い効果が出る
(例では764文字 -> 245文字で
 1/3に!)
まとめ
● 現状のRDBに感じている課題を(インフラよ
り)SREの観点で話しました
● それに対しNeo4jがいい感じに効果があるのか
もという期待を話しました
まとめ
とは言えもちろん知っています
「銀の弾丸は無い」
さぁ情報交換させてください、 こ
のNeo4jUGで!!
まとめ - 2
ご静聴感謝!
m(_ _)m

More Related Content

PDF
I have a problem when operating AWS with multiple accounts
PDF
My misstake on Ansible’s lineinfile module
PDF
AWS SSO x On-Prem AD Easy IAM user management on Jtf2021
PDF
AWS Cognito makes old web apps available from anywhere
PDF
アドベントカレンダー から学ぶOCIの空気感
PDF
オンボーディングを楽しむ
PDF
事前アンケート集計 Terraform meetup tokyo#2
PDF
I want the power of onboarding!
I have a problem when operating AWS with multiple accounts
My misstake on Ansible’s lineinfile module
AWS SSO x On-Prem AD Easy IAM user management on Jtf2021
AWS Cognito makes old web apps available from anywhere
アドベントカレンダー から学ぶOCIの空気感
オンボーディングを楽しむ
事前アンケート集計 Terraform meetup tokyo#2
I want the power of onboarding!

More from Yukiya Hayashi (20)

PDF
How did you start learning Azure
PDF
My feelings of going to the first conference overseas
PDF
Let's split text by awk command
PDF
What i feel when began use AWS CodePipeline as GitLab Ci user
PDF
How to get rid of terraform plan diffs
PDF
Task and Time monitoring with Backlog and Toggl
PDF
Oiradaichi's Akamai Journey
PDF
What does the monitoring tool use at oisix ra daichi?
PDF
We love backlog ! in reCap event.
PDF
Backlog World 2019 LT - We love backlog !
PDF
20190116 neo4jug-lt
PDF
Introduce that Best practices for writing Dockerfiles
PDF
postgresql conference 2018 on-premise to rds
PDF
Zabbix Conference Japan 2018 LT Configure by Ansible
PDF
Jenkins User Conference 2018 Tokyo LT
PDF
ansiblejp-best-variables-place
PDF
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
PDF
20171117 redminetokyo13
PDF
PostgreSQL DBのバックアップを一元化しよう
PDF
Attrasian JIRAをv6.3.15からv7.3.2へバージョンアップした話
How did you start learning Azure
My feelings of going to the first conference overseas
Let's split text by awk command
What i feel when began use AWS CodePipeline as GitLab Ci user
How to get rid of terraform plan diffs
Task and Time monitoring with Backlog and Toggl
Oiradaichi's Akamai Journey
What does the monitoring tool use at oisix ra daichi?
We love backlog ! in reCap event.
Backlog World 2019 LT - We love backlog !
20190116 neo4jug-lt
Introduce that Best practices for writing Dockerfiles
postgresql conference 2018 on-premise to rds
Zabbix Conference Japan 2018 LT Configure by Ansible
Jenkins User Conference 2018 Tokyo LT
ansiblejp-best-variables-place
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
20171117 redminetokyo13
PostgreSQL DBのバックアップを一元化しよう
Attrasian JIRAをv6.3.15からv7.3.2へバージョンアップした話
Ad

What we expect of neo4j