Amazon Neptuneで始めるグラフDB

# 本記事の目的
本記事では、Amazon Neptune（以下Neptune）について解説していきます。
Neptuneの特徴であるグラフDBを一般的なDBと比較しつつ、グラフDBの利用事例なども紹介したいと思います。

# サービス概要
Neptuneは、AWSが提供する完全マネージド型グラフデータベースサービスです。従来のリレーショナルデータベースでは扱いにくい、複雑な関係性を持つデータを効率的に管理・検索できます。主な特徴として、次のようなものがあげられます。

### 主な特徴
**フルマネージドサービス**：​ハードウェアのプロビジョニング、ソフトウェアのパッチ適用、セットアップ、構成、バックアップなどのデータベース管理タスクを自動化。​
**高性能なグラフクエリエンジン**：​数十億の関係をミリ秒単位のレイテンシーでクエリ可能。​
**機械学習の統合**：​Amazon Neptune MLを使用して、グラフニューラルネットワーク（GNN）による予測分析が可能。​

### 可用性と耐久性
**可用性**：​Neptuneは、99.99%の可用性を提供するように設計されています。​
**耐久性**：データは、1つのAWSリージョン内の複数のアベイラビリティーゾーン（AZ）にまたがるクラスターボリュームに保存され、自動的にレプリケートされます。
ディスク障害が発生した場合でも、データベースの可用性を低下させることなくバックグラウンドで修復されます。​
**フェイルオーバー**：最大15個のリードレプリカをサポートし、プライマリインスタンスに障害が発生した場合、自動的にフェイルオーバーが行われます。​

### 安全性
**データ暗号化**：保管時のデータは、AWS Key Management Service（KMS）を使用して暗号化されます。また、伝送中のデータも暗号化され、セキュリティが確保されています。​
**ネットワークセキュリティ**： VPCを使用して、ネットワークレベルでの分離が可能です。​
**アクセス制御**：AWS Identity and Access Management（IAM）を使用して、きめ細かなアクセス制御が可能です。​



https://aws.amazon.com/jp/neptune/

# グラフデータベースとは？
Neptuneの特徴としてあげられるものにグラフDBがあります。
グラフデータベースは、以下の3つの要素で構成されています。
・ノード（Vertex）：人やモノなどの「対象」
・エッジ（Edge）：ノード同士の「関係」
・プロパティ（Property）：ノードやエッジに付随する「属性情報」

例えば、「アンパンマンはしょくぱんまんと友達」という関係を表現する場合、アンパンマンとしょくぱんまんをノードとして、"friend"というエッジで結ぶことで表現できます。このような構造により、複雑な関係性を直感的かつ効率的に扱うことが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/ccf76670-486c-4892-9d88-a7cc7fa14b3b.png)

また、RDB（リレーショナルDB）との比較もしたいと思います。
以下で「AさんとBさんは共通してサッカーが趣味である」という関係を例に、比較していきます。

#### グラフDBの場合
グラフDBでは、「人」と「関係」を"点と線(ノードとエッジ)"を用いて表現します。
・点(ノード)：人(Aさん、Bさん)
・線(エッジ)：Aさん＝favorite⇒サッカー、Bさん＝favorite⇒サッカー

→「Aさんと同じ趣味の人は誰？」→Aさんからつながっている線をたどるだけなので、直感的に、素早くつながりを調べることができる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/1fe759b7-1097-495e-aea0-bfacdc56abe4.png)

#### RDBの場合
RDBの場合、「Aさんと同じ趣味の人は誰？」と調べるには、まずAさんの名前IDを確認して、さらに趣味IDを調べて共通する人物を見つける必要があります。

→つながりをたどるには、複数の表を"結合(JOIN)"して調べる必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/ec544d99-3d71-4134-bb49-2baf13de081e.png)

これはかなり面倒に感じたのではないでしょうか？

今回は2人の関係を表現しますが、これを4人5人と広めていったときに整合性を保ちながら保存できるでしょうか。それはおそらく大変なことだと思います。

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

まとめると以下のようになります。

| 比較項目 | RDB | グラフDB |
|:-:|:-:|:-:|
|  データ構造 | 表(テーブル)で管理  | ノードとエッジで管理  |
|  関係の扱い方 | テーブルを結合して探す  |  ノード同士が直接つながっている |
| 得意なこと  | 一覧の集計  | 関係性の分析  |

# グラフDBのユースケース
では、このようなグラフDBはどのような場面で利用されているのでしょうか。
Amazon Neptuneの最大の強みは、「データ同士のつながり(リレーション)」を素早く、かつ柔軟に扱える点にあります。ここでは、実際にグラフDBが力を発揮するユースケースをいくつか紹介します。

使い方についてもAWSの公式サイトに記載があります。

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

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

### １.SNS分析
SNSやコミュニティサービスでは、「誰が誰とつながっているか」「どのグループに属しているか」といった関係性の分析が不可欠です。グラフDBなら、ユーザー同士のつながりをノードとエッジで表現し、友人関係やフォロワーのネットワーク構造を簡単に可視化・分析できます。
#### たとえば：
・共通の友人を持つユーザーを探す
・影響力の大きいユーザー(インフルエンサー)を特定する
・コミュニティの分断・融合の様子をトラッキングする

### ２.詐欺検知と不正アクセスの追跡
金融業界やセキュリティ分野では、怪しいパターンを見逃さないための分析が求められます。取引履歴やアクセスログをグラフで表現することで、疑わしい経路やパターンを特定しやすくなります。
#### たとえば：
・同一のIPアドレスから複数アカウントにアクセスしている場合
・間接的に関連している不信ユーザーの特定
・トランザクションの連鎖から詐欺ネットワークを発見する


### ３.ナレッジグラフによる情報の関連付け
企業内のドキュメント、FAQ、社内ナレッジなどをグラフ構造で関連付けることで、ユーザーが必要とする情報に素早くアクセスできるようになります。BedrockやLLMと組み合わせれば、より高度な質問応答や推論にも対応可能になります。
#### たとえば：
・製品マニュアルと技術用語の関連付け
・エンジニアの技術スタックとプロジェクト履歴のマッピング
・顧客からの問い合わせ履歴と解決事例の関係づけ

# まとめ
Amazon Neptuneはサービス自体の認知度が低い印象ですが、SNS等の大変身近なところでも活躍している手法になります。グラフDBという特徴的な点もあり従来のRDBと比較しながら学習するととても楽しいと思います。

また、Bedrock等の生成AI系のサービスが注目される中で、RAGやGraphRAGといったキーワードがトレンドに上がることも多くなってきました。これらにもグラフDBが応用されているので、興味が出た方は試してみてはいかがでしょうか。

最後に、本記事ではAmazon NeptuneとグラフDBについてざっくりと解説していきました。本記事を通して、少しでもNeptuneというサービスの面白さを知っていただければ嬉しいです。

今後は実際のNeptuneでの構築手順等を書いていこうと思います！


# 参考資料
https://speakerdeck.com/yakumo/neptuneshi-tutemita