【AWS】用語を整理しながら学ぶAWS Amazon Neptune

## はじめに

この記事ではAWSが提供するAmazon Neptuneを学習していく内容となっています。
主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）
誤りなどがあれば修正していく想定です。

## Amazon Neptuneとは

まずはサービス概要を見ていきましょう。Amazon Neptuneとはなんでしょうか。
AWSの公式サイトには下記のように表現されています。

> 優れたスケーラビリティと可用性を実現する高性能なグラフ分析とサーバーレスデータベース
> 頂点とエッジの数に制限なくスケール可能
> 組み込みのアルゴリズムを使用して数百億もの関係を持つグラフデータセットを数秒で分析する
> Neptune Database を使用

[引用：Amazon Neptune（完全マネージド型グラフデータベースサービス）| AWS](https://aws.amazon.com/jp/neptune/)

また、Amazon Neptuneは下記の2つのサービスに分類されます。

- Amazon Neptune Database
- Amazon Neptune Analytics

Amazon Neptune Analyticsは2023年11月29日にGAされており、この記事執筆時点ではかなり新しいサービスであることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/7c22bb82-451d-2c89-c8ff-4aad4ef9e011.png)
※[引用：料金 - Amazon Neptune | AWS](https://aws.amazon.com/jp/neptune/pricing/)のサイトにはちっちゃく「新機能」の文字があります。

グラフ分析？頂点とエッジの数？Database？Analytics？そもそもグラフデータベースってなに？他のデータベースと何が違うの？

わからないことだらけですよね。順番に見ていきましょう。

## そもそもグラフデータベースとは

Amazon Neptuneを扱う上で知っておかないといけない重要な用語として`グラフデータベース`があります。

グラフデータベースとはいったい何物なのでしょうか。実はAWSの公式サイトに定義が書いてあります。

> グラフデータベースは、さまざまなデータエンティティ間のリレーションシップを強調する体系的なデータの集まりです。NoSQL データベースは、数学的グラフ理論を使用してデータ接続を示します。データを厳密なテーブル構造に格納するリレーショナルデータベースとは異なり、グラフデータベースはデータをエンティティとリレーションシップのネットワークとして格納します。その結果、これらのデータベースは実際のシナリオのモデリングにより適しているため、パフォーマンスと柔軟性が向上することがよくあります。

[グラフデータベースとは?](https://aws.amazon.com/jp/nosql/graph/)

まず１ついえることとしてはSQLで操作できるようなデータベース、リレーショナルデータベースではないということです。つまりはNoSQLということになります。

グラフデータベースを理解する場合は下記の3つの用語を頭にいれておく必要があります。

- ノード
- エッジ
- プロパティ

何がなんだかさっぱりですよね。図にしてみましょう。

## 図にしてみると

ノードはデータを入れる箱でエッジはその箱同士を繋ぐ線です。
エッジ（線）で結ばれたノードがある場合は「ノード間にリレーションシップがある」と表現されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/09b54500-40ba-41bc-959d-2de73c8dcae4.png)

そして、エッジによって結ばれたノードという箱にはどんなものが入っているかが定義されています。
これをプロパティと呼びます。

## グラフデータベースでは何が表現できるの？

基本用語がわかったところで、グラフデータベースでは何が表現できるのでしょうか。
AWSの公式サイトでも凡例として紹介されていますが、たとえば、友達同士の関係が表現できます。

具体的には「Yamadaさんは`つよつよさん`と`すごい人`の友達です。」ということを表現すると以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/d3979284-349a-960e-d4f5-657728af3d01.png)

とはいえ、ここで`関係`という言葉が出てきたので
「2者の関係を表現するって言ったらリレーショナルデータベースでもできるよね？」
ということにふと気づいたかもしれません。

では仮に`Yamadaさん`、`つよつよさん`、`すごい人`の3人をリレーショナルデータベースで表現してみましょう。3人ともが知り合いという状態をリレーショナルで表現すると下記のようになります。

|名前ID|名前|age|
|:---|:---|:---|
|1|Yamadaさん|30|
|2|つよつよさん|30|
|3|すごい人|30|

|名前ID|お友達の名前ID|
|:---|:---|
|1|2|
|1|3|
|2|1|
|2|3|
|3|1|
|3|2|

どうでしょうか。かなり面倒に感じたのではないでしょうか。
今回は3人の関係を表現しましたが、これを4人5人と広めていったときに整合性を保ちながら保存できるでしょうか。それはおそらく無理だと思います。

同じ`関係`という言葉を使っていますが、`行列`という関係と`ノード/エッジ`という関係ではまったく表現が異なるということがわかったと思います。

## グラフデータベースの仕組みとか

どんなものかをある程度理解したところで
「リレーショナルデータベースじゃないならSQLで取り出せない」ということに気づいたかもしれません。

グラフデータベースにはSQLというものが存在しません。しかし、代わりにグラフクエリ言語というものが存在します。

グラフクエリ言語には下記のようなものがあります。

- Apache TinkerPop Gremlin
- SPARQL
- openCypher

ここでは詳しく扱いませんが、いくつか手段があるので今やりたいことに合わせて使っていきましょう。

## グラフデータベースのユースケース

なんかすごい物だということと使い方を見ていきましたが、どこで使うと幸せになれるのでしょうか。
使い方についてもAWSの公式サイトに記載があります。

> グラフデータベースは、ソーシャルネットワーキング、推奨エンジン、不正検出など、データ間にリレーションシップを作成し、そのリレーションシップに対してすばやくクエリを実行するユースケースで威力を発揮します。

[グラフデータベースのユースケースにはどのようなものがありますか](https://aws.amazon.com/jp/nosql/graph/)

ソーシャルネットワーキングは先ほどのノードの例で紹介しました。それ以外では推奨エンジンや不正検出などもあります。

推奨エンジンや不正検出、どちらにせよ2つ以上の事柄に関係性を見つけて記録することが重要になっていきます。たとえば、AならばB、BならばC、CならばXXXといった感じでたどる必要がある場合です。

ドキュメント同士のつながりを表現することにもつながるのでAIに搭載するとAIがドキュメント同士のつながりを理解して回答することも可能でしょう。

## 話を戻してAmazon Neptuneとは

Amazon Neptuneとはつまり、高可用性・高パフォーマンスのあるグラフデータベースを提供するフルマネージドグラフデータベースサービスです。グラフデータベースを自分でホストすることなく、グラフデータベースを利用できます。

Amazon RDSはリレーショナルデータベースを提供するサービスである一方でAmazon Neptuneはグラフデータベースを提供するフルマネージドグラフデータベースサービスということです。

## 料金

`Amazon Neptune`は`Amazon Neptune Database`と`Amazon Neptune Analytics`の2つで料金が分かれます。
データベースにアナリティクスの機能がついているというのはもしかしたら珍しいかもしれません。

[料金 - Amazon Neptune | AWS](https://aws.amazon.com/jp/neptune/pricing/)

## まとめ

今回はAmazon Neptune、とりわけ基礎となるグラフデータベースについて説明しました。
参考資料にはハンズオンもあるので料金をしっかり確認したうえでハンズオンしたいと思いました。

ちなみに実を言うとAmazon NeptuneはAWS Summit 2024でもセッションがあります。私は予約したのですが、リアルタイムで視聴できませんでした。7月5日までサミットのセッションは視聴が可能なのでなるはやで観たいと思います。

## 参考資料

- [グラフデータベースってどんなもの？Amazon Neptune を使って グラフデータベースのクエリを体験しよう（準備編） | Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/queries-with-neptune-preparation/)

- [Amazon Neptuneではじめる グラフデータベース入門 - PDF](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon%20Neptune_0730_v1.pdf)

- [Amazon Neptuneではじめるグラフデータベース入門【AWS Black Belt】 - YouTube](https://youtu.be/aaEJN_InxvE?feature=shared)

- [Amazon Neptune徹底紹介 - PDF](https://pages.awscloud.com/rs/112-TZM-766/images/2_20211111_Neptune_shoukai.pdf)

- [Amazon Neptune Analytics の一般提供を開始](https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-neptune-analytics/)

- [Amazon Neptune Analytics を用いた膨大なグラフデータ分析とベクトル検索の紹介](https://aws.amazon.com/jp/blogs/news/introducing-amazon-neptune-analytics-a-high-performance-graph-analytics/)

## おわり