Neo4Jに入門してみる
Neo4Jとは?
Javaで開発されたオープンソースのグラフデータベース。
2000年ごろに開発された。会社はスウェーデンに最初にできて、本社をシリコンバレーに移転した。
公式サイト
どんなものか?
公式を翻訳してみた
Neo4j グラフ データ プラットフォーム
グラフ データベースとして始まった Neo4j は、多くのツール、アプリケーション、およびライブラリを備えた豊富なエコシステムに進化し、グラフ テクノロジを作業環境に統合する機会を提供します。
Neo4j エコシステムの 3 つの柱を見てみましょう。
まず、Neo4jは世界をリードするグラフ データベースです。このアーキテクチャは、ノードと関係の最適な管理、ストレージ、およびトラバーサルのために設計されています。
次に、Neo4j Auraは、クラウド内の完全に管理されたグラフ データ プラットフォーム サービスです。Aura を使用すると、開発者やデータ サイエンティストは、インフラストラクチャを管理する手間をかけずに、スケーラブルな AI 駆動型アプリケーションを迅速に構築し、アルゴリズムを使用してビッグ データを分析できます。Neo4j Aura には、アプリケーション用の AuraDB とデータ サイエンス用の AuraDS が含まれています。
3 番目に、Neo4j グラフ データ サイエンスは、接続されたデータ分析および機械学習プラットフォームであり、ビッグ データの接続を理解するのに役立ちます。
サイファー
Cypher は、Neo4j のグラフ クエリ言語であり、ユーザーがグラフ データベースからデータを保存および取得できるようにします。これは、グラフのパターンを記述するための、SQL にヒントを得た宣言型言語です。この構文は、グラフ内のノードと関係のパターンを一致させるための視覚的かつ論理的な方法を提供します。Cypher は、誰にとっても簡単に習得、理解、使用できるように設計されていますが、他の標準的なデータ アクセス言語のパワーと機能も組み込まれています。
環境構築
まずは、使ってみる。
英語の情報しかないと思ったのですが、Qiitaで記事が多かったり、YouTubeでNeo4Jと検索すると日本人の方(知ってる人なんですけど)案浦さんという方がご紹介してくれてます。
ユーザー登録をすればブラウザで気軽に試すことができるサービスもある。
よく使われているのはデスクトップ版なのでこちらをダウンロードして使って動かしてみてください。
で、Neo4Jを使うときに使う技術がCypherというSQLと似たクエリ言語を使ってデーターベースにアクセスをして、データを作成、検索、編集、削除を行います。
グラフが表示されて、触ると動くので「なんだこれ、動くぞと!!!」と驚きました。
覚えることがいっぱいあるので最初は3つ覚えておけば大丈夫
node
ノードは、リレーショナルデータベースで言えば、レコード的なものですが、ラベルをつけてグループ化するとテーブルのような扱いもできます。
テーブルというかノードを作るCypherクエリをまずは実行するところから始める。
csvやjsonファイルをimportしてnodeを用意することもできます。こちらは操作に慣れないと、どこに配置するのか分からなかったりする?
会社の名前をもつNodeを作るならこんなイメージですね。
1個ずつ実行する。
create (n:会社 { name: "NTT"})
create (n:会社 { name: "au"})
create (n:会社 { name: "Soft Bank"})
成功するとこのように作成されます
property
属性は「キー:バリュー」の書式で、ノードと関係性の両方に設定できます。例えば、(n:Person)というノードの属性には、「名前」、「性別」、「年齢」、「住所」、「電話番号」などが設定できます。関係性を示す「知っている」というタイプには、「好感を持っている」、「好感は持っていない」、「趣味があう」、「趣味が合わない」などの属性が設定できます。下記の例で{ name:"Jboy" }の部分が属性の定義であり、書式は{キー:"バリュー"}です。コンマで区切って、{name: "Jboy",address: "福岡",tel="090-9999-9999",・・・ }のように複数の属性を登録することもできます。
エンジニアというnodeを作成する場合だとこのようにCypherを書く
CREATE (n:Engineer { name: "Jboy",address: "福岡", tel: "090-9999-9999" })
実行すると、Engineerというnodeが作成されました。tableで表示することもできます。jsonみたいに表示されます。
グラフ
table
SQLのSELECTと同じように、データを検索するには、MATCH文を使います。
Engineerというnodeを検索する方法。これだと、全て検索してしまいますけどね。
みるだけなら、画面左の作成したnodeの名前をマウスでクリックするだけでも見れますよ!
MATCH (n:Engineer) RETURN n LIMIT 25
relationship
Node同士が関係を持っているものを作るときは、Relationshipを使います。
Node同士が、線で繋がっているイメージですね。
新規のNodeをCREATE文で作成するときに、[:AAA]->を使います。
こちらが公式の解説
Qiitaの記事ですけど、独特な記号の使い方が載ってます。
CREATE c=(:Companyn{name:'NTT'})-[:STAFF]->(:Person{name:'Taro'})
RETURN c
JOINみたいなクエリで検索してみる。
こんな感じでNTTという企業とTaroさんという社員が関係を持っているのをグラフで表示できました!
これでいいのか疑問だが...
最後に
最近グラフデーターベースなんてものがあったのを知って、面白いと思った。
SQLが苦手な分野で使われているそうです。機械学習をしていて、ネットワークイメージを可視化したい人たちには人気が高まっているそうです!
NTT、GMO、有名どころの企業さんも導入しているようです。
Discussion