ある企業が、Amazon Neptune を使ってソーシャルネットワークのグラフデータを管理している。ユーザーの友達のリストと共通の友達を見つけるクエリのパフォーマンスが低下している。グラフのノード数が増加するにつれてクエリ時間が指数的に増加している。最も適切な改善策はどれか。
- A. Neptune Analytics を使用してグラフのアルゴリズム計算を最適化する。Neptune Analytics はインメモリのグラフ分析エンジンで、共通友達探索などのアルゴリズムを高速に実行できる。
- B. Amazon DynamoDB にデータを移行し、隣接リストパターンで友達関係を管理する。
- C. Neptune のインスタンスタイプをより大きいものに変更してメモリを増やし、グラフデータをメモリにキャッシュする。
- D. データを Amazon Redshift に移行し、SQL JOIN クエリで共通友達を見つける。
解答と解説を見る
正解: A
Amazon Neptune Analytics は Neptune データベースのデータをインメモリグラフエンジンに読み込み、グラフアルゴリズム(共通友達探索、最短経路、PageRank 等)を高速に実行するサービスである。従来の Neptune ではトラバーサルが深くなるほど時間がかかるが、Neptune Analytics はインメモリ処理と最適化されたアルゴリズムにより数秒〜数十秒で処理できる。選択肢CのNeptune インスタンスタイプ拡大はある程度の改善には寄与するが、グラフのトラバーサル複雑度が指数的に増加する問題に対してはスケールアップに限界がある。選択肢Bの DynamoDB 移行はグラフデータの複雑なトラバーサルには適しておらず、共通友達探索のようなマルチホップクエリのパフォーマンスは Neptune より低下する可能性がある。選択肢DのRedshift と SQL JOIN は関係テーブルでの共通友達探索には機能するが、大規模グラフの多段 JOIN は Redshift のようなカラム型データウェアハウスではなくグラフ特化エンジンに比べて大幅に低速になる。