Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Amazon Aurora Serverless v2 で、PostGISを利用した位置情報検索の性能を試す

久しぶりにピアノの基礎練を始めたphonypianistです。 ハノンは指のトレーニング・リハビリには最適です。単純な音階なので、弾いてて楽しくはないですが😓 指を動かすと脳も活性化する話もありますが、その目的ならピアノでなくてもPCのキーボードをひたすら打っても良いのかも?🤔

さて、少し前に、Aurora Serverless v2が一般提供されて、LambdaからAuroraを使うのが、かなり実用的になりました。 aws.amazon.com

v1に比べると、おおよそ以下の点が改善されています

v1に引き続き、PostgreSQLにも対応しているため、PostGISも利用可能になっています。

今回、Aurora Serverless v2でPostGISを使った際に、どれくらいの性能が出るかを計測してみました。

概要

あらかじめ、ランダムに生成した位置情報のレコードをデータベースに入れておきます。 そして、ある地点から指定した半径以内にある点を取得する処理を行います。

検索イメージ

この取得処理にかかる処理時間を計測します。

計測条件

今回は、Lambdaからクエリを発行します。そのため、RDS Proxyを使用します。

Aurora Serverless v2検証構成

Aurora Serverless v2の最小ACUは2、最大ACUは16で設定しました。

データ量や発行するクエリは以下の通りとします。

  • 母体データ件数を100,000件~1,000,000件で変化させる。
  • クエリ実行でヒットする件数を100件~1000件で変化させる。
  • use_spheroid=true(回転楕円体を使った計算)でST_DWithin関数を用いて位置検索を行う(指定した点から半径xxxメートル以内のレコードを抽出)。

Lambdaから実際に発行するクエリは以下の通りです。数値部分は上記条件に合うように適宜変更します。

SELECT
    address,
    ST_AsGeoJson(geometry)
FROM
    points
WHERE
    ST_DWithin(geometry, ST_GeomFromText('POINT(139.6147861 35.5080426)', 4326), 1000, true);

計測結果

母体データ件数とヒットする件数を変化させて処理時間を計測した結果は以下となりました。(単位は秒)

↓母体件数\ヒット件数→ 100件 500件 1000件
100,000 1.69 1.74 1.70
500,000 2.04 2.00 2.11
1,000,000 2.52 2.63 2.78
5,000,000 7.12 7.12 7.12
10,000,000 12.20 11.72 11.68

グラフにすると以下のようになります。

位置情報検索の性能傾向

母体データ件数とほぼ比例して、処理時間も長くなっています。 検索でヒットする件数の影響はあまりなさそうです。

1000万件で10秒台なので、これくらいのデータ量なら、API Gateway+Lambda経由で実行しても同期処理が可能ですね。

まとめ

Aurora Serverless v2でも、(当然ではありますが)PostGISを使用できました。 Aurora Serverless v2でRDS Proxyに対応したこともあり、v1より便利にLambdaから使えるようになっています。 ぜひお試しください。

それでは!

Acroquest Technologyでは、キャリア採用を行っています。
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com