狠狠撸

狠狠撸Share a Scribd company logo
グラフデータベース入門
株式会社セプテーニ?オリジナル
嶽 雅也
ご注意ください!!
? 本日の資料はグラフデータベースという概念を
知らない方向けの入門の資料となっています。
? Neo4jのチュートリアルをやったことある方やグ
ラフデータベースの書籍を読んだ方にとっては
物足りないかもしれません。
? グラフデータベース設計のモデリング、Cypher
の使い方などには今回の発表では触れません。
自己绍介
自己绍介
? 嶽 雅也(だけ まさや)と申します。
? 株式会社セプテーニ?オリジナル所属。
? 半年ほど前から「GANMA!」という漫画配信アプリの開発に
携わっています。
? 現職ではScalaで開発しており、最近ではiOS開発に加わり
Swiftでも開発するようになりました。
? 前職のR&D案件で、グラフデータベースという存在を知り、
Neo4jの技術調査などを行いました。
ここで皆さんに一つ質
問させてください。
本日は何のワードに刺さって
セッションを選んで頂けまし
たか?
グラフデータベース?
Neo4j?
パナマ文書関連?
アジェンダ
アジェンダ
? パナマ文书とは
? データベースの分类とは
? グラフデータベースとは
? 狈别辞4箩とは
? 狈别辞4箩を动かしてみよう
? グラフデータベースが有効なケース
? まとめ
? 参考文献
パナマ文书とは
パナマ文書の概要
? パナマ文书とは、パナマの法律事務所「モサック?
フォンセカ」から流出した膨大な量の内部文書にな
ります。
? 南ドイツ新聞が入手し、国際調査報道ジャーナリス
ト連合(ICIJ)とともに分析して、2016年4月3日に
検証結果を公表したものです。
? 昨年の4-5月にすごく話題になったので、まだ記憶
に新しいかと思います。
パナマ文書のデータ
? 今回、この流出したデータですが、電子メールや文書など様々なもの
をまとめると、2.6TBにもなります。
? この膨大な情報量の中からデータベース化できる部分が約3百万件に
及ぶドキュメントでした。
? ICIJの解析担当者が当初使用していた単純な検索ではなく、関係性の
検索を容易に行いたいと考えました。
? そこで、データをグラフ構造で持つグラフデータベースのNeo4j+グ
ラフ可視化ツールのLinkuriousを採用致しました。
グラフデータベースの置き換え前にはMySQL+Sigma.jsを使っていた
そうです。
パナマ文書での検索を実際に行
ってみましょう。
https://offshoreleaks.icij.org/
パナマ文書の解析の詳細
? ICIJの方が「ICIJがパナマ論文を解読するためにNeo4jをどのように使用
したか」というテーマで、GraphConnect Europe 2016というイベントで
発表されているので、興味のある方はご覧ください。
? スライド
? /neo4j/graphconnect-europe-2016-how-the-
icij-used-neo4j-to-unravel-the-panama-papers-mar-cabra
? プレゼンテーション
? https://www.youtube.com/watch?v=S20XMQyvANY&t=165s
グラフデータベースとは
の前に、混乱を避けるために、デ
ータベースの分類の話を先にさせ
てください。
データベースの分类とは
グラフデータベースとNoSQL
? 従来のRDBMS以外のデータベース管理システム
の総称をNoSQL(Not only SQL)と呼びます。
? 本日紹介するグラフデータベースですが、従来
のRDBMSや皆さんが既にご存知のNoSQL(Redis
、Cassandra、MongoDBなど)とは違います。
? 次のスライドで、書籍「NOSQLの基礎知識」に
あるNoSQLの分類の図を紹介致します。
NoSQLの分類
? 本日は他のNoSQLについては紹介しませんが、
興味のある方は書籍をご覧になってください。
グラフデータベースとは
グラフデータベースの概要
? 一言で言えば、グラフ構造を持ったデータベー
スです。
? 格納しているデータそのものではなく、データ
の相互関係に注力しているデータベースです。
? データの構造が従来のリレーションではなく、
ネットワーク状になっており、検索などの機能
を利用したい場合、効力を発揮します。
グラフのイメージ
? 例として、Neo4jの公式チュートリアルのグラフ
を見てみましょう。
グラフの基本要素
? グラフの基本的な要素は、「ノード」と「リレ
ーションシップ」です。「ノード」と「ノード
」を繋ぐ接続線を「リレーションシップ」と呼
びます。
グラフのノード
? 「ノード」には、情報を付加するためにラベル
とプロパティを設定できます。以下は、ノード
の例となります。
グラフのリレーションシップ
? 「リレーションシップ」にも、ラベルとプロパ
ティを設定できますが、始点と終点を決めて方
向性を持たせることができます。
他のグラフデータベース
? グラフデータベースについては、本日ご紹介するNeo4j以外にも種類があります。
? 私自身も使用したことがないため、今回は名前の紹介に留めておきます。
? TaitanDB
? http://titan.thinkaurelius.com/
? Oracle Spatial and Graph
? http://www.oracle.com/technetwork/jp/database/options/spatialandgraph/overvi
ew/index.html
? DataStax Enterprise Graph
? https://www.datastax.com/products/datastax-enterprise-graph
狈别辞4箩とは
Neo4jの概要
? Neo Technology社に開発されたグラフ型データベース
? コミュニティ版とエンタープライズ版があります。
? コミュニティ版→GPL v3に基づき無償で使用できます。
? エンタープライズ版→拡張性/可用性に関する機能、ユー
ザサポートが追加された有償版(条件によっては無償)です
。
? 現在(2017/5/20時点)の最新バージョンは3.2となります。
Neo4jの特徴
? ACID特性
? トランザクションを利用して、データ整合性を保つことができます。
? 高いパフォーマンスによるOLTP
? データベースが肥大化してもクエリ処理速度の低下は少なく、1秒あたり数百のトランザ
クションを処理することができます。
? 宣言型クエリ言語「Cypher」
? アスキーアートのような直感的に記述できるドメイン特化言語(SQLのようなもの)
? 以下のCypherの例は、トムハンクスが演じた映画について検索するものです。
ex) MATCH (tom:Person {name: "Tom Hanks”})-
[:ACTED_IN]->(tomHanksMovies)
RETURN tom,tomHanksMovies
狈别辞4箩を动かしてみよう
Neo4jのインストール方法
? 以下の3つの方法があります。
オススメは一番楽なので、Dockerを使用するパターンです。
1. Neo4jの公式ページからDownloadするパターン
? https://neo4j.com/download/community-edition/
2. brewを使用するパターン(Macのみ)
? brew install neo4j
(ただし、旧バージョンの3.1.4が入ります。)
3. Dockerを使用するパターン←オススメ
? docker pull neo4j
公式ページからダウンロード
? Neo4jの公式ページからDownloadしたパターン
? 起動
? Neo4jアプリケーションを起動し、Startボタンを押します。
? 停止
? Neo4jアプリケーションを起動し、Stopボタンを押します。
brewを使用する
? brewを使用したパターン
? 起動
? ターミナルで「neo4j start」コマンドで起動します。
? 昔のバージョン(1系と2系の古いバージョン)では起動時に以下のwarningが出て、ファ
イルディスクリプタのソフトリミットを変更する必要がありました。
「WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See
the Neo4j manual.」
? 今のバージョンではインストール直後に起動する時には、私のMac(macOS sierra)で
はこちらのwarningは出なかったです。
? 停止
? ターミナルで「neo4j stop」コマンドで停止します。
Dockerを使用する
? Dockerを使用したパターン
? 起動
docker run 
--detach 
--publish=7474:7474 --publish=7687:7687 
--volume=$HOME/neo4j/data:/data 
--volume=$HOME/neo4j/logs:/logs 
neo4j:3.2
? 停止
最後に起動したdockerコンテナを停止します。
docker ps -q -l | xargs docker stop | xargs docker rm
Neo4jにログインしてみよう
? 起動後に、http://localhost:7474/ へアクセスします
。UserName/Passwordを求められますが、デフォ
ルトはneo4j/neo4jと入力すれば、新しいパスワー
ドの入力を求められます。
Boltプロトコル
? ホストのプロトコルに指定しているBoltですが、クライアントアプリ
ケーションとデータベースサーバ間の通信に使用されるNeo4j独自の
バイナリプロトコルです。
? Neo4jのバージョン v3.0からはBoltプロトコルをベースにした「
.NET/Java/JavaScript/Python」の4つの言語の公式的なサポートを発
表しています。
https://neo4j.com/docs/developer-manual/current/drivers/get-started/
? これまでは各言語でHTTPやJVMベースのドライバーを提供していま
したが、パフォーマンスなどのいくつかの問題からBoltバイナリドラ
イバーの開発に着手してきたそうです。
ここからは実際にログインした後
の画面で、Neo4jの公式のチュー
トリアルのデモを行います。
グラフデータベースが
有効なケース
グラフデータベースが有効なケース
? グラフデータベースを活用したサービス事例には以下のものがあります。
? Google検索のナレッジグラフ
? FBなどのSNSのつながり(ソーシャルグラフ)
? 最短経路の検索
? 通信機器や高速道路の管理(私が経験した案件です)
? クレジットカードの不正検知
? 医療
まとめ
まとめ
? グラフデータベースはグラフのデータ構造を持ったデータベースで、データ
間の関係性を見出すのが得意です。
? Neo4jのグラフエンジンはデータの解析処理を高速に行う最適な設計がされ
ており、データベースが肥大化してもクエリ処理速度の低下は少ないです。
? Neo4jのCypherは直感的なクエリで、データを取得できます。
? パナマ文書のような巨大なデータかつ関係性の検索を行うようなケースでは
、グラフデータベースは有効です。
? Google検索のナレッジグラフやSNSのソーシャルグラフ、最短経路の検索な
ど様々な分野でグラフデータベースは活用されています。
おまけ
自社コミュニティ
新宿GeekLoungeの紹介
弊社のカフェスペースを利用して、お酒や食事をしながら行う
勉強会を継続的に実施するコミュニティ
Scala, DDD, Android, iOS, アーキテクチャetc…
新宿 Geek Lounge#1 開催予定
?日程 7月6日(木) 20:00 ~ 22:00
?参加枠 30~40名予定(無料)
?テーマ 「夏休みはScalaを書こう!」
?発表者
- 麻植さん 「Real World Android Akka」
- (弊社)助廣 「Scala コレクションメソッド 入門」
- LT 1時間 & 懇親会
参考文献
参考書籍
? NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)
https://www.amazon.co.jp/exec/obidos/ASIN/4897978874/noimps
lmtbrk-22/
? グラフ型データベース入門 - Neo4jを使う
https://www.amazon.co.jp/exec/obidos/ASIN/4865940154/noimps
lmtbrk-22/
? グラフデータベース ―Neo4jによるグラフデータモデルとグラフ
データベース入門
https://www.amazon.co.jp/exec/obidos/ASIN/4873117143/noimps
lmtbrk-22/
参考URL #1
? Neo4j公式サイト各種ドキュメント
? DeveloprManual
https://neo4j.com/docs/developer-manual/current/
? Cypherリファレンス
https://neo4j.com/docs/cypher-refcard/current/
? Neo4j with Docker
https://neo4j.com/developer/docker/
http://neo4j.com/docs/operations-manual/current/installation/docker/
参考URL #2
? ブログ等のページ
? 「パナマ文書」解析の技術的側面
https://medium.com/@c_z/%E3%83%91%E3%83%8A%E3%83%9E%E6%96
%87%E6%9B%B8-
%E8%A7%A3%E6%9E%90%E3%81%AE%E6%8A%80%E8%A1%93%E7%9
A%84%E5%81%B4%E9%9D%A2-d10201bbe195
? ”パナマ文書”をグラフデータベースで高速に検索する事例の勉強会に行ってき
た。 #neo4j
https://www.creationline.com/lab/13916
? Neo4j公式の言語ドライバー(Bolt)によるプログラミング #neo4j
https://www.creationline.com/lab/14847

More Related Content

ク?ラフテ?ータヘ?ース入门