Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

グラフデータベース入門

13,696 views

Published on

JJUG2017発表資料

Published in: Technology
  • Nice!1ちょうど赤いカプセル‥飲みたかったとこです‥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

グラフデータベース入門

  1. 1. グラフデータベース入門 株式会社セプテーニ・オリジナル 嶽 雅也
  2. 2. ご注意ください!! • 本日の資料はグラフデータベースという概念を 知らない方向けの入門の資料となっています。 • Neo4jのチュートリアルをやったことある方やグ ラフデータベースの書籍を読んだ方にとっては 物足りないかもしれません。 • グラフデータベース設計のモデリング、Cypher の使い方などには今回の発表では触れません。
  3. 3. 自己紹介
  4. 4. 自己紹介 • 嶽 雅也(だけ まさや)と申します。 • 株式会社セプテーニ・オリジナル所属。 • 半年ほど前から「GANMA!」という漫画配信アプリの開発に 携わっています。 • 現職ではScalaで開発しており、最近ではiOS開発に加わり Swiftでも開発するようになりました。 • 前職のR&D案件で、グラフデータベースという存在を知り、 Neo4jの技術調査などを行いました。
  5. 5. ここで皆さんに一つ質 問させてください。
  6. 6. 本日は何のワードに刺さって セッションを選んで頂けまし たか?
  7. 7. グラフデータベース? Neo4j? パナマ文書関連?
  8. 8. アジェンダ
  9. 9. アジェンダ • パナマ文書とは • データベースの分類とは • グラフデータベースとは • Neo4jとは • Neo4jを動かしてみよう • グラフデータベースが有効なケース • まとめ • 参考文献
  10. 10. パナマ文書とは
  11. 11. パナマ文書の概要 • パナマ文書とは、パナマの法律事務所「モサック・ フォンセカ」から流出した膨大な量の内部文書にな ります。 • 南ドイツ新聞が入手し、国際調査報道ジャーナリス ト連合(ICIJ)とともに分析して、2016年4月3日に 検証結果を公表したものです。 • 昨年の4-5月にすごく話題になったので、まだ記憶 に新しいかと思います。
  12. 12. パナマ文書のデータ • 今回、この流出したデータですが、電子メールや文書など様々なもの をまとめると、2.6TBにもなります。 • この膨大な情報量の中からデータベース化できる部分が約3百万件に 及ぶドキュメントでした。 • ICIJの解析担当者が当初使用していた単純な検索ではなく、関係性の 検索を容易に行いたいと考えました。 • そこで、データをグラフ構造で持つグラフデータベースのNeo4j+グ ラフ可視化ツールのLinkuriousを採用致しました。 グラフデータベースの置き換え前にはMySQL+Sigma.jsを使っていた そうです。
  13. 13. パナマ文書での検索を実際に行 ってみましょう。 https://offshoreleaks.icij.org/
  14. 14. パナマ文書の解析の詳細 • ICIJの方が「ICIJがパナマ論文を解読するためにNeo4jをどのように使用 したか」というテーマで、GraphConnect Europe 2016というイベントで 発表されているので、興味のある方はご覧ください。 • スライド • https://www.slideshare.net/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
  15. 15. グラフデータベースとは
  16. 16. の前に、混乱を避けるために、デ ータベースの分類の話を先にさせ てください。
  17. 17. データベースの分類とは
  18. 18. グラフデータベースとNoSQL • 従来のRDBMS以外のデータベース管理システム の総称をNoSQL(Not only SQL)と呼びます。 • 本日紹介するグラフデータベースですが、従来 のRDBMSや皆さんが既にご存知のNoSQL(Redis 、Cassandra、MongoDBなど)とは違います。 • 次のスライドで、書籍「NOSQLの基礎知識」に あるNoSQLの分類の図を紹介致します。
  19. 19. NoSQLの分類 • 本日は他のNoSQLについては紹介しませんが、 興味のある方は書籍をご覧になってください。
  20. 20. グラフデータベースとは
  21. 21. グラフデータベースの概要 • 一言で言えば、グラフ構造を持ったデータベー スです。 • 格納しているデータそのものではなく、データ の相互関係に注力しているデータベースです。 • データの構造が従来のリレーションではなく、 ネットワーク状になっており、検索などの機能 を利用したい場合、効力を発揮します。
  22. 22. グラフのイメージ • 例として、Neo4jの公式チュートリアルのグラフ を見てみましょう。
  23. 23. グラフの基本要素 • グラフの基本的な要素は、「ノード」と「リレ ーションシップ」です。「ノード」と「ノード 」を繋ぐ接続線を「リレーションシップ」と呼 びます。
  24. 24. グラフのノード • 「ノード」には、情報を付加するためにラベル とプロパティを設定できます。以下は、ノード の例となります。
  25. 25. グラフのリレーションシップ • 「リレーションシップ」にも、ラベルとプロパ ティを設定できますが、始点と終点を決めて方 向性を持たせることができます。
  26. 26. 他のグラフデータベース • グラフデータベースについては、本日ご紹介する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
  27. 27. Neo4jとは
  28. 28. Neo4jの概要 • Neo Technology社に開発されたグラフ型データベース • コミュニティ版とエンタープライズ版があります。 • コミュニティ版→GPL v3に基づき無償で使用できます。 • エンタープライズ版→拡張性/可用性に関する機能、ユー ザサポートが追加された有償版(条件によっては無償)です 。 • 現在(2017/5/20時点)の最新バージョンは3.2となります。
  29. 29. Neo4jの特徴 • ACID特性 • トランザクションを利用して、データ整合性を保つことができます。 • 高いパフォーマンスによるOLTP • データベースが肥大化してもクエリ処理速度の低下は少なく、1秒あたり数百のトランザ クションを処理することができます。 • 宣言型クエリ言語「Cypher」 • アスキーアートのような直感的に記述できるドメイン特化言語(SQLのようなもの) • 以下のCypherの例は、トムハンクスが演じた映画について検索するものです。 ex) MATCH (tom:Person {name: "Tom Hanks”})- [:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
  30. 30. Neo4jを動かしてみよう
  31. 31. 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
  32. 32. 公式ページからダウンロード • Neo4jの公式ページからDownloadしたパターン • 起動 • Neo4jアプリケーションを起動し、Startボタンを押します。 • 停止 • Neo4jアプリケーションを起動し、Stopボタンを押します。
  33. 33. 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」コマンドで停止します。
  34. 34. 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
  35. 35. Neo4jにログインしてみよう • 起動後に、http://localhost:7474/ へアクセスします 。UserName/Passwordを求められますが、デフォ ルトはneo4j/neo4jと入力すれば、新しいパスワー ドの入力を求められます。
  36. 36. 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バイナリドラ イバーの開発に着手してきたそうです。
  37. 37. ここからは実際にログインした後 の画面で、Neo4jの公式のチュー トリアルのデモを行います。
  38. 38. グラフデータベースが 有効なケース
  39. 39. グラフデータベースが有効なケース • グラフデータベースを活用したサービス事例には以下のものがあります。 • Google検索のナレッジグラフ • FBなどのSNSのつながり(ソーシャルグラフ) • 最短経路の検索 • 通信機器や高速道路の管理(私が経験した案件です) • クレジットカードの不正検知 • 医療
  40. 40. まとめ
  41. 41. まとめ • グラフデータベースはグラフのデータ構造を持ったデータベースで、データ 間の関係性を見出すのが得意です。 • Neo4jのグラフエンジンはデータの解析処理を高速に行う最適な設計がされ ており、データベースが肥大化してもクエリ処理速度の低下は少ないです。 • Neo4jのCypherは直感的なクエリで、データを取得できます。 • パナマ文書のような巨大なデータかつ関係性の検索を行うようなケースでは 、グラフデータベースは有効です。 • Google検索のナレッジグラフやSNSのソーシャルグラフ、最短経路の検索な ど様々な分野でグラフデータベースは活用されています。
  42. 42. おまけ
  43. 43. 自社コミュニティ 新宿GeekLoungeの紹介
  44. 44. 弊社のカフェスペースを利用して、お酒や食事をしながら行う 勉強会を継続的に実施するコミュニティ Scala, DDD, Android, iOS, アーキテクチャetc…
  45. 45. 新宿 Geek Lounge#1 開催予定 ・日程 7月6日(木) 20:00 ~ 22:00 ・参加枠 30~40名予定(無料) ・テーマ 「夏休みはScalaを書こう!」 ・発表者 - 麻植さん 「Real World Android Akka」 - (弊社)助廣 「Scala コレクションメソッド 入門」 - LT 1時間 & 懇親会
  46. 46. 参考文献
  47. 47. 参考書籍 • 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/
  48. 48. 参考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/
  49. 49. 参考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

×