質問

投稿者:M
登録日:2026年5月12日(火)

大量データ取得時にタイムアウトする場合の推奨実装について

API を利用してDBデータを全件取得しています。 以下のナレッジを参考に、limit=200(最大件数)と offset を利用してループしながら全件取得を行っています。 https://knowledge.spirers.jp/article/development/detail/9431 ただ、対象DBの件数が15,000件以上存在しており、全件取得を行うとPHP実行時間またはAPI応答待ちでタイムアウトが発生してしまいます。 処理上どうしても大量データを扱う必要があります。 このような大量データ取得時について、以下のような推奨方法はありますでしょうか。 ・offset方式以外の推奨取得方法 ・大量件数時のパフォーマンス改善方法 ・カーソル的な取得方法の有無 ・where条件の分割取得の推奨 ・API制限や推奨件数 ・バッチ処理化の考え方 また、実運用で数万件規模を扱う場合のベストプラクティスなどがあればご教示いただきたいです。

更新日:2026年5月13日(水)

コメント

  • お問い合わせいただきましてありがとうございます。 > このような大量データ取得時について、以下のような推奨方法はありますでしょうか。 APIによるデータ取得についてはリンクを挙げていただいた記事で利用しているもので実装するため、主な実装方法としてはAPIの利用方法で調整いただく形になります。 API、かつSPIRAL上のPHPスクリプトで実装いただく前提であれば、以下のような実装パターンが考えられます。 ■ 基本方針 対応状況のステータスを追加し、複数回のPHP実行に分割して全件取得 ■ 実装内容 ・DBにデータ取得状況を示すフィールドを追加する ・以下のようなスクリプトを実装し、スケジュールトリガで複数回に分けて実行  ・上記フィールドで未対応とされるフィールドを検索条件として200件ずつデータ取得   ・PHPの実行時間上限(30秒)が近づいたらデータ取得を停止するよう制御   ・実行時間に限らず、未対応のデータがなくなれば次ステップへ  ・今回の実行でデータ取得が完了したレコードを対応済みと更新して終了 他にも、今回検討されている処理で必要のないデータを検索条件(where)で除外するように設定いただくことで取得件数自体を削減することも可能です。 具体的な検索条件についてはシステムの要件によるため1つに絞ることが難しいですが、登録日時や特定の条件を示すフラグなどで分岐されるケースが多いです。 ※投稿の文字数制限につき分割いたします

    • いいね
    2026年5月13日(水)
  • > また、実運用で数万件規模を扱う場合のベストプラクティスなどがあればご教示いただきたいです。 API、かつSPIRAL上のPHPスクリプトに限定する必要がない場合、他には以下のような運用が可能でございます。 ■ GUI(管理画面)上でデータ取得 API連携を前提とせず、取得したデータを運用担当者の方が扱う想定でしたら、レコードの一括ダウンロード機能をご活用ください。 こちらはAPIに依存しないため、今回のような問題を根本から回避できます。 ■ 外部サーバー 30秒のタイムアウトは弊社サーバーの設定になりますので、外部サーバ―と連携するようなシステムを構築されている場合、そのサーバー側のタイムアウトの設定により30秒以上の対応が可能な可能性がございます。 SPIRAL上のデータを別のシステムに連携するようなタスクの場合はご検討ください。 ご確認のほど、よろしくお願いいたします。

    • いいね
    2026年5月13日(水)
あなたもログインして、
回答してみませんか?
質問がまとまらない方へ チャットコミュニティで気軽に聞いてみよう! 疑問や課題が整理できていなくても問題ありません。SPIRAL®で解決できる範囲がまだわからなくても質問できます。「ここで聞くと場違いかな?」というお悩みでも歓迎します。
  • Discordで聞く
  • Slackで聞く