グラフデータベースはどんな用途に向いている?Database Watch(2015年7月版)(2/2 ページ)

» 2015年07月29日 05時00分 公開
[加山恵美@IT]
前のページへ 1|2       

サッカーの試合結果をNeo4jで探索する場合の操作例

 さて、ここからはNeo4jの実際の操作を見ていきましょう。

 Neo4jはNeo Technologyが開発するグラフデータベースで、有償のエンタープライズ版の他に無償のコミュニティ版が用意されています。特徴はデータベースエンジンをグラフデータベースとしての用途に特化しているところです。トランザクションの一貫性を(即時ではありませんが)保証する点も、他のNoSQL(の一部)とは異なるところでしょう。Neo4jのクエリ言語は「Cypher」と呼ばれます。Cypherは、直接実行だけでなく、Neo4jのREST APIを介しても実行できるようになっています。一般的な開発言語や開発フレームワークにも対応しています。

 前述の通り、グラフデータベースは「ノード」「リレーション」「プロパティ」の3要素によってノード間の「関係性」を表現するデータモデルを前提としています。こう聞くと仕組みが難しそうですが、実際にはどのような方法で操作するのでしょうか?

 鈴木氏は「サッカーの試合」を例に、グラフデータベースでのデータの扱い方を説明してくれました。

データモデル

 ここでは下の図で示すようなデータモデルを前提にしています。

 「試合(Match)」というデータノードから「マンチェスターユナイテッド(Man Utd)」と「アーセナル(Aesenal)」という二つのデータノードが伸びており、それぞれ関係性は「ホームチーム」と「アウェーチーム」として表せます。

サッカーの試合を例にしたグラフデータベースの例(構文例などは後述)

 ○で囲んだオブジェクトが「ノード」です。試合(「Match」)から伸びる関係性としての「home_team」「away_team」があり、その先のノードが各チームになっています。ここでは、Matchの「プロパティ」に試合結果が含まれています。この図の場合、Matchのプロパティには、マンチェスターユナイテッドから見た場合のホームゲームとアウェーゲームの値が格納されています。

ノードを作成する

 Neo4jのクエリ言語Cypherで「アーセナル」というチーム名を作成するときは、次のような構文を用います。

CREATE (arsenal:Team{name: "Arsenal"})

関連性を作成する

 ノードの間を結ぶ「関連性」を作成するには下のような構文を用います。

CREATE (game)-[:away_team]->(arsenal)

グラフデータベースへのクエリ

 こうして作成されたデータベースから「アーセナルがアウェーで行った試合」を抽出したいときは、以下のような構文で問い合わせを行います。

MATCH (team:Team)<-[:away_team]-(game)
WHERE team.name = "Aesenal"
RETUN game

 ここでは、あくまでも参考例として簡単な操作方法を示しました。操作例を見ると分かるように、データモデルは複雑そうですが、クエリやノードの作成などの扱いが人間の思考に近く、素直に記述できます。慣れれば使いやすそうですね。

 Cypherの扱い方については、Neo4jのドキュメントに詳細が示されていますので、興味がある方は深掘りして試してみるとよいでしょう。

 グラフデータベースは、今後「エンジニア数が増えれば」あるいは「一般の開発者にとって扱いやすくなれば」一気に普及してくるかもしれません。今までデータモデルが複雑過ぎて処理できなかったシステムを一気に簡略化して構築できる可能性がありますから、期待が高まります。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。