Amazon Athenaで実現する時系列データのパフォーマンス改善
フルカイテン株式会社 / 横田敦志
開発部長 / EM / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|
11名〜50名 | 2023年10月 | B to B |
ツールの利用規模 | 11名〜50名 |
---|---|
ツールの利用開始時期 | 2023年10月 |
事業形態 | B to B |
アーキテクチャ
アーキテクチャの意図・工夫
FULL KAITENは、「在庫を利益に変える」ことを提供価値としたクラウドサービスです。 つまり、今ある在庫を最大限に活用し、売上や粗利を最大化することに重点を置いたさまざまな機能を提供しています。 サービスを利用するお客様ごとのデータ量には幅があり、数万件から数億件規模までさまざまです。特に、大規模アカウントと小規模アカウントの間には数千倍以上の差があることもあり、ビッグデータ特有の課題として、一部のアカウントによる処理負荷が他のアカウントに影響を与えてしまうというリスクがあります。
このような課題に対応するため、集約処理・書き込み処理・読み込み処理の各工程において、アカウントごとの処理を分離し、他アカウントの影響を受けないようサーバレスな構成を採用しています。これにより、処理単位での柔軟なスケーリングと独立性を実現しています。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
FULL KAITENでは、ユーザーが売上・粗利・在庫などの指標を日別・週別・月別に可視化できる「マイチャート」機能を提供しています。これは、KPIの定点観測や探索的な分析を行うためのツールであり、BIツールに近い位置づけです。 しかし、この機能には以下のような課題がありました:
- 日次でのデータ再投入によるAuroraへの書き込み負荷の増加
- 大量データに対するクエリ応答の遅延
- 高頻度の読み書きによるI/Oコストの増大
マイチャートでは、さまざまな軸で柔軟な集計ができるように、非常に細かい粒度のデータを保持しておく必要があり、その結果、データ量の肥大化によりパフォーマンスが著しく劣化するという問題が顕在化していました。
どのような状態を目指していたか
この状況を改善すべく、我々が目指したのは以下のような状態です。
- データ量が多くても一定時間でレスポンスが返ってくる構成
- AuroraなどRDBへの過度な負荷を軽減し、I/Oコストと可用性の課題を解消
- バッチ処理を経由して、毎日一度データマートを安定的に更新できる仕組み
比較検討したサービス
- Amazon Aurora (PostgreSQL) の継続利用
選定理由
最終的にAthena + S3を選定した主な理由は以下のとおりです。
- Auroraよりも大規模データでの応答性能が安定していたこと
- S3への出力が既存のデータ基盤(Glue等)と親和性が高く、移行コストが低かったこと
- 日次の更新であればAthenaで十分なコスト・性能バランスが得られたこと
パーティション設計の工夫がパフォーマンスに直結
Athena を効果的に活用するためには、適切なパーティション設計によってスキャン対象を最小限に抑えることが非常に重要です。
たとえば、売上データが 1 億件ある場合でも、S3 上でデータを date=2025-04-01/
, date=2025-04-02/
, ... といった形で日付ごとにパーティション分割して保存することで、クエリ実行時にスキャン対象を絞り込むことができ、レスポンスの高速化につながります。
S3 ディレクトリ構成例:
└── date=2025-04-01/
└── xx.parquet(15万件)
└── date=2025-04-02/
└── xx.parquet(8万件)
└── date=2025-04-03/
└── xx.parquet(20万件)
導入の成果
クエリ応答時間の大幅な改善
Athenaへの移行によって、データ量の多いアカウントでも常に安定した高速レスポンスが得られるようになりました。
実際に、従来Aurora(PostgreSQL / db.r6g.4xlarge)で処理していたKPI集計クエリを、Athena上で実行した際のレスポンス時間を比較したところ、以下のような改善が確認できました:
- Auroraでは、1,000万件未満のデータであれば非常に高速に応答しますが、それ以上になるとデータ量にほぼ比例する形でレスポンス時間が増加し、5,000万件のクエリでは20秒以上かかるケースも発生していました。
- 一方Athenaでは、レコード数が増加してもレスポンス時間の上昇が緩やかで、5,000万件規模でも平均3〜4秒台の応答時間を安定して維持しています。
Aurora側もサーバレス化しさらなるコスト最適化へ
Athena移行後、Auroraへの書き込み量が大幅に削減されました。これにより以前は日次の書き込みによりI/O量が多く、プロビジョニング構成でなければ逆にコストが高くなる状況でしたが、書き込み負荷が軽減されたことでサーバレス構成でも十分に対応可能となり、コスト最適化となりました。
導入に向けた社内への説明
上長・チームへの説明
まず、実際に「マイチャート」で扱う規模のデータを用意し、日別・週別・月別といった主要なクエリパターンについてAthena上で実行時間を計測しました。 その結果、一定以上のデータ量においては、安定して高速な応答を返すことが確認できました。
さらに、Athenaがスキャンするデータ量も併せて計測し、実運用上のコストが許容範囲に収まるかどうかも検証しました。 日次の集計バッチで生成されるデータマートは年月日単位でパーティション分割されており、不要なデータのスキャンを抑えることができる構成となっていました。
これらの結果を踏まえ、パフォーマンスとコストの面で問題ないと判断し、Athenaへの移行を進めました。
活用方法
よく使う機能
1. データパイプライン処理
- AWS Step Functions
2. バッチ集計・加工処理
- AWS Glue(PySpark)
- Amazon ECS(Fargate)
3. データ取得・クエリエンジン
- Amazon Athena
- Amazon Redshift(DWH)
- Amazon Aurora(PostgreSQL)
ツールの良い点
Athenaは完全なサーバーレスで動作するクエリエンジンであるため、インフラの事前プロビジョニングやリソース管理が不要です。さらに、ジョブ単位でコンピュート環境が分離されるため、ユーザー単位や処理単位でのスケーリングやリソース制御が柔軟に行えます。
一方、AuroraのようなRDBMSではマルチテナント構成となることが一般的で、同一インスタンス上で複数の顧客データを処理する場合、他のお客様の書き込み負荷やクエリ実行が影響するリスクがありました。
Athenaでは各クエリが独立した環境で実行されるため、他のお客様の負荷に影響されず、安定したパフォーマンスと安心感のある構成を実現することができました。
ツールの課題点
Athenaはスキーマ変更に弱いため、変更時には既存データを直接更新せず、新しいスキーマで出力し直す「洗い替え方式」が有効です。 弊社ではスキーマ変更の際、S3上でバージョンごとに保存先を分け、参照先を切り替えることで安全に対応しています。
ツールを検討されている方へ
Athenaは、主にS3上に蓄積されたデータマートやログデータに対してクエリを実行する構成を前提としたアーキテクチャです。そのため、即時反映が求められるリアルタイム処理には適していません。
一方で、業務用の分析ツールや定期バッチ処理のように、ある程度の再実行が許容されるユースケースでは、コスト効率や運用の簡便さに優れた非常に有効な選択肢だと考えています。
フルカイテン株式会社 / 横田敦志
開発部長 / EM / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
フルカイテン株式会社 / 横田敦志
開発部長 / EM / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法