Post on 22-Jun-2015
Neo4j 勉強会Lightning-Talk-1
ラーメン -> グラフ -> データベース
ぬこ@横浜 (@nuko_yokohama)
諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。諸君、私はラーメンが好きだ。
諸君、私はラーメンが諸君、私はラーメンが本当に大好きだ。本当に大好きだ。
ラーメンデータベースhttp://ramendb.supleks.jp
登録店舗数6 万超
ユーザ数12 万超
単なるレビューサイトではなくコメントのやりとりなど
ラヲタの SNS っぽくもある
さて
Neo4j の勉強をするときに、何か「生きた」データが欲しい
ラーメンデータベースのユーザと、ユーザ間のコメントのやりとりをグラフデータのサンプルとして使えないか?
でもラーメンデータベースでは
そんな情報を収集するようなWeb-API は公開してない…
しょうがないのでラーメンデータベースのWeb ページを解析して
ユーザー ⇒ ノードコメント ⇒ エッジ
を生成するツールを作成
収集ルール
人気ユーザ 100 人の直近 10 件のレビューに
コメントしたユーザ
これをノード用 / エッジ用のCSV としてダンプ
で、 CSV を Neo4j にダンプするツールも作る。
本当は GraphML とかにするほうが良いと思うけど
面倒だからやらない。
収集&ロードした結果をNeo4j 管理コンソールで参照
(表示設定もしておく)
せっかくなのでCypher で検索してみる
Cypher 検索 1
自分にコメントをしてくれたユーザの一覧
START n=node:node_auto_index(uid="8999") MATCH n<-[:c]-f RETURN distinct f.uid, f.name, f.location;
Cypher 検索 2
自分がコメントをしたユーザの一覧
START n=node:node_auto_index(uid="8999")MATCH n-[:c]->fRETURN distinct f.uid, f.name, f.location;
Cypher 検索 3
自分と相互にコメントしているユーザの一覧
START n=node:node_auto_index(uid="8999")MATCH n-[:c]->f-[:c]->nRETURN distinct f.uid, f.name, f.location;
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;
そんな分析っぽいことができます。
いやらしい楽しいですね。
おしまい
Neo4j 勉強会Lightning-Talk-2
neo4j_fdw
ぬこ@横浜 (@nuko_yokohama)
諸君、私は PostgreSQL が好きだ。諸君、私は PostgreSQL が好きだ。
諸君、私は PostgreSQL が本当に大好きだ(しつこい)
ということでPostgreSQLに関するお話
PostgreSQL の FDW
PostgreSQL にはForeign Data Wrapper という
外部情報源を仮想テーブル化するステキ開発フレームワークがある。
( Oracle, MySQL, Redis, MongoDB, CouchDB, Twitter, etc… )
なので、 PostgreSQL からSQL 経由で
Neo4j を検索するFDW を作ってみた
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
・・・ ・・・ ・・・
・・・・ ・・・・ ・・・
詳細説明は割愛neo4j_fdw のデモ
詳細な説明は 7/13 のPostgreSQL Unconference で!
つまり
PostgreSQL とNeo4j が両方備わり
最強に見えるかも・・・
興味のある方はソースをGithub に置いたので
見てくださいませ(まだまだ開発途上ですが)
https://github.com/nuko-yokohama/neo4j_fdw
おしまい