Amazon Neptune

グラフデータベースとして Gremlin、openCypher、SPARQL をサポートし、数十億のリレーションシップを低レイテンシで探索できるフルマネージドサービス

概要

Amazon Neptune は、プロパティグラフと RDF (Resource Description Framework) の両方に対応するフルマネージドグラフデータベースサービスです。ソーシャルネットワークの友人関係、不正検知の取引パターン、ナレッジグラフの知識体系など、エンティティ間の関係性が複雑なデータを効率的に格納・クエリできます。最大 15 のリードレプリカによる読み取りスケーリング、6 つの AZ にまたがるストレージレプリケーション、ポイントインタイムリカバリを備え、ミッションクリティカルなワークロードにも対応します。

グラフモデルの選択とクエリ言語

Neptune はプロパティグラフと RDF の 2 つのグラフモデルをサポートしており、ユースケースに応じて選択します。プロパティグラフはノード (頂点) とエッジ (辺) にプロパティ (キーバリューペア) を持たせるモデルで、ソーシャルネットワーク、レコメンデーション、不正検知に適しています。クエリ言語は Apache TinkerPop の Gremlin と openCypher (Neo4j が開発した宣言型言語) の 2 つから選べます。Gremlin はトラバーサルベースで柔軟なグラフ探索が可能ですが、学習コストが高めです。openCypher は SQL に似た宣言型構文で直感的に書けるため、RDB 経験者には取り組みやすいでしょう。RDF はトリプル (主語-述語-目的語) でデータを表現するモデルで、オントロジーやナレッジグラフの構築に使われます。クエリ言語は SPARQL で、W3C 標準に準拠しています。実務では、アプリケーションデータにはプロパティグラフ、知識表現やセマンティック Web にはRDF を選ぶのが一般的です。

RDB では解けないグラフ特有の問題

グラフデータベースの真価は、RDB の JOIN では実用的な速度で処理できない「多段階のリレーションシップ探索」にあります。たとえば「友人の友人の友人が購入した商品のうち、自分がまだ購入していないもの」を推薦するクエリは、RDB では 3 段の自己結合が必要で、ユーザー数が数百万を超えるとクエリが実用時間内に返りません。Neptune ではインデックスフリーの隣接探索により、ホップ数が増えてもレイテンシの劣化が緩やかです。不正検知では、送金ネットワーク内の循環パターン (A→B→C→A) を検出するクエリが典型的で、Gremlin の repeat().until() ステップで簡潔に記述できます。ナレッジグラフでは、「この薬品と相互作用する薬品を処方されている患者」のような推論クエリを SPARQL で実行し、医療安全の意思決定を支援するケースがあります。DynamoDB のような KVS では、こうした関係性の探索はアプリケーション側で複数回のクエリを発行する必要があり、複雑さとレイテンシの両面で不利です。

Neptune Serverless と Neptune Analytics の使い分け

Neptune には従来のプロビジョンドインスタンスに加え、Neptune Serverless と Neptune Analytics の 2 つの新しいオプションがあります。Neptune Serverless はワークロードに応じて自動的にスケールし、アイドル時はベースラインの NCU (Neptune Capacity Unit) まで縮小するため、トラフィックが変動するアプリケーションに適しています。最小 1 NCU から最大 128 NCU まで設定でき、スケーリングは数秒で完了します。Neptune Analytics は 2023 年に登場した分析特化のエンジンで、グラフ全体をメモリに載せて高速な分析クエリを実行します。PageRank、最短経路、コミュニティ検出などのグラフアルゴリズムが組み込まれており、数十億エッジのグラフに対してもインタラクティブな速度で結果を返します。Neptune Database のスナップショットから Neptune Analytics にデータをロードできるため、OLTP は Neptune Database、分析は Neptune Analytics という使い分けが可能です。コスト面では、Neptune Serverless は使った分だけの課金で開発・テスト環境に適し、Neptune Analytics は分析ジョブの実行時間に対する課金で大規模なバッチ分析に適しています。

共有するXB!