lightning-talk: ramen->graph->database, neo4j_fdw

29
Neo4j 勉強会 Lightning-Talk-1 ラーメン -> グラフ -> データベース ぬこ@横浜 (@nuko_yokohama)

Upload: toshi-harada

Post on 22-Jun-2015

657 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Neo4j 勉強会Lightning-Talk-1

ラーメン -> グラフ -> データベース

ぬこ@横浜 (@nuko_yokohama)

Page 2: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。

諸君、私はラーメンが諸君、私はラーメンが本当に大好きだ。本当に大好きだ。

Page 3: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

ラーメンデータベースhttp://ramendb.supleks.jp

登録店舗数6 万超

ユーザ数12 万超

Page 4: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

単なるレビューサイトではなくコメントのやりとりなど

ラヲタの SNS っぽくもある

Page 5: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

さて

Neo4j の勉強をするときに、何か「生きた」データが欲しい

Page 6: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

ラーメンデータベースのユーザと、ユーザ間のコメントのやりとりをグラフデータのサンプルとして使えないか?

Page 7: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

でもラーメンデータベースでは

そんな情報を収集するようなWeb-API は公開してない…

Page 8: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

しょうがないのでラーメンデータベースのWeb ページを解析して

ユーザー ⇒ ノードコメント ⇒ エッジ

を生成するツールを作成

Page 9: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

収集ルール

人気ユーザ 100 人の直近 10 件のレビューに

コメントしたユーザ

これをノード用 / エッジ用のCSV としてダンプ

Page 10: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

で、 CSV を Neo4j にダンプするツールも作る。

本当は GraphML とかにするほうが良いと思うけど

面倒だからやらない。

Page 11: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

収集&ロードした結果をNeo4j 管理コンソールで参照

(表示設定もしておく)

Page 12: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

せっかくなのでCypher で検索してみる

Page 13: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Cypher 検索 1

自分にコメントをしてくれたユーザの一覧

START n=node:node_auto_index(uid="8999") MATCH n<-[:c]-f RETURN distinct f.uid, f.name, f.location;

Page 14: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Cypher 検索 2

自分がコメントをしたユーザの一覧

START n=node:node_auto_index(uid="8999")MATCH n-[:c]->fRETURN distinct f.uid, f.name, f.location;

Page 15: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Cypher 検索 3

自分と相互にコメントしているユーザの一覧

START n=node:node_auto_index(uid="8999")MATCH n-[:c]->f-[:c]->nRETURN distinct f.uid, f.name, f.location;

Page 16: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Cypher 検索 4

自分から見た神奈川県のユーザの HOP 数START n=node:node_auto_index(uid="8999"),u=node(*)MATCH p=shortestpath(n-[:c*..15]-u)WITH length(p) as l, u as uWHERE u.location = "神奈川県 "RETURN l, u.name, u.location order by l;

Page 17: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

そんな分析っぽいことができます。

いやらしい楽しいですね。

Page 18: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

おしまい

Page 19: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Neo4j 勉強会Lightning-Talk-2

neo4j_fdw

ぬこ@横浜 (@nuko_yokohama)

Page 20: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

諸君、私は PostgreSQL が好きだ。諸君、私は PostgreSQL が好きだ。

諸君、私は PostgreSQL が本当に大好きだ(しつこい)

Page 21: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

ということでPostgreSQLに関するお話

Page 22: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

PostgreSQL の FDW

PostgreSQL にはForeign Data Wrapper という

外部情報源を仮想テーブル化するステキ開発フレームワークがある。

( Oracle, MySQL, Redis, MongoDB, CouchDB, Twitter, etc… )

Page 23: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

なので、 PostgreSQL からSQL 経由で

Neo4j を検索するFDW を作ってみた

neo4j_fdw

じゃあ、いつ作るか?今でしょ!

Page 24: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

Neo4j Server

Neo4j Foriegn Data WrapperPostgreSQL

Relational Model

CypherQuery

JSONResult

SQL

PostgreSQLRecord

Defined Cypher Query

Execute Cypher Query on REST

Generate PostgreSQL Record

Neo4j-FDWConceptProvide Cypher result View.

Graph Model

olumn1 column2 column3

・・・ ・・・ ・・・

・・・・ ・・・・ ・・・

Page 25: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

詳細説明は割愛neo4j_fdw のデモ

詳細な説明は 7/13 のPostgreSQL Unconference で!

Page 26: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

つまり

Page 27: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

PostgreSQL とNeo4j が両方備わり

最強に見えるかも・・・

Page 28: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

興味のある方はソースをGithub に置いたので

見てくださいませ(まだまだ開発途上ですが)

https://github.com/nuko-yokohama/neo4j_fdw

Page 29: Lightning-Talk: Ramen->Graph->Database, neo4j_fdw

おしまい