Amazon Neptune でグラフデータベースを構築 - ナレッジグラフとソーシャルネットワーク分析
Gremlin と SPARQL の 2 つのクエリ言語でグラフデータを操作し、最大 15 のリードレプリカでクエリスケーリングを実現する。Neptune Analytics によるグラフアルゴリズム実行とベクトル検索の活用法を解説します。
Neptune の概要
Amazon Neptune はフルマネージドのグラフデータベースサービスです。プロパティグラフ (Gremlin/openCypher) と RDF グラフ (SPARQL) の 2 つのグラフモデルをサポートし、ソーシャルネットワーク、レコメンデーション、ナレッジグラフ、不正検知などのグラフベースのユースケースに最適化されています。RDB で多段階の JOIN が必要なクエリ (友達の友達の友達を検索) を、グラフのトラバーサルとして自然に記述でき、データ量が増えてもクエリ性能が劣化しにくい設計です。ストレージは最大 128 TiB まで自動拡張され、3 つの AZ に 6 つのデータコピーを保持する高可用性アーキテクチャです。
クエリ言語とデータモデル
Gremlin はプロパティグラフモデルのトラバーサル言語で、頂点 (ノード) と辺 (エッジ) にプロパティ (キーバリューペア) を持たせます。g.V().has('person','name','Alice').out('knows').values('name') のようなトラバーサルで、Alice の友人の名前を取得します。openCypher は Neo4j 由来の宣言的クエリ言語で、MATCH (p:Person {name:'Alice'})-[:KNOWS]->(f) RETURN f.name のようなパターンマッチングで直感的にクエリを記述できます。SPARQL は RDF (Resource Description Framework) グラフ用の W3C 標準クエリ言語で、ナレッジグラフやオントロジーの構築に適しています。同一クラスター内で Gremlin/openCypher と SPARQL を同時に使用できますが、データモデルは別々に管理されます。
Neptune Analytics とベクトル検索
Neptune Analytics はグラフデータに対してグラフアルゴリズム (PageRank、最短経路、コミュニティ検出、中心性分析) を実行するサーバーレスの分析エンジンです。Neptune Database のスナップショットや S3 のデータを取り込み、数十億エッジ規模のグラフに対してインタラクティブなアルゴリズム実行が可能です。ベクトル検索機能も統合されており、グラフのノードにベクトル埋め込みを格納し、類似ノードの検索をグラフトラバーサルと組み合わせて実行できます。たとえば、ナレッジグラフのエンティティにテキスト埋め込みを付与し、セマンティック検索とグラフ探索を統合した RAG パイプラインを構築できます。 グラフデータベースの設計についてはAmazon の関連書籍も参考になります。
Neptune の料金
Neptune Database の料金はインスタンス、ストレージ、I/O で構成されます。db.r6g.large (2 vCPU、16 GiB) で約 0.348 ドル/時 (東京リージョン) です。Neptune Serverless はキャパシティユニット (NCU) ベースの課金で、最小 1 NCU から最大 128 NCU まで自動スケールし、NCU あたり約 0.1098 ドル/時です。ストレージは GB あたり約 0.11 ドル/月、I/O は 100 万リクエストあたり約 0.22 ドルです。Neptune Analytics は処理ユニット (PU) あたりの課金で、分析の実行時間に応じた従量課金です。
まとめ
Amazon Neptune は Gremlin、openCypher、SPARQL の 3 つのクエリ言語をサポートするフルマネージドグラフデータベースです。Neptune Analytics によるグラフアルゴリズム実行とベクトル検索の統合で、ソーシャルネットワーク分析、ナレッジグラフ、不正検知などの高度なグラフベースのユースケースに対応します。