バッチスループット計算
バッチスループット計算機は、バッチサイズと処理間隔を実効処理レートに換算します。1 秒、1 分、1 時間あたりの処理数を表示し、必要に応じて目標値と比較します。目標レートを指定すると、現在の処理時間で必要な最小の整数バッチサイズと、現在のサイズで許容される最長間隔を計算します。worker、キューコンシューマー、インポート、推論ジョブ、定期一括処理を調整する前に、処理能力の前提を明確に確認できます。
無料で実行
バッチ処理を比較可能なレートに換算します
バッチシステムは通常、1 回に処理する項目数と、その処理にかかる時間という、直接比較しにくい 2 つの値で表されます。この計算機は、バッチサイズをバッチ時間で割り、1 秒あたりの実効スループットを求め、同じレートを 1 分および 1 時間あたりにも換算します。たとえば、500 項目を 20 秒ごとに完了し、追加の待ち時間なしで次のバッチを開始できる worker は、1 秒あたり 25 項目を継続的に処理できます。準備、ポーリング、クールダウン、キュー遅延が実際の運用サイクルに含まれる場合は、開始から次の開始までの経過時間をご使用ください。それらを別に扱う場合に限り、純粋な処理時間をご使用ください。結果は平均レートであり、各項目が均等な間隔で完了することを意味しません。結果を最後にまとめて返すバッチでも、長期的な処理能力は同じです。この違いを意識すると、配信遅延と処理能力を混同せず、ストリーミング処理とも適切に比較できます。
目標レートを満たすバッチサイズを計画します
現在の構成が流入量やサービス目標に追いつくか確認する場合は、1 秒あたりの目標項目数を追加してください。計算機は目標レートに現在のバッチ時間を掛け、次の整数へ切り上げます。項目の一部だけをバッチへ追加することはできず、切り捨てると要求された能力を下回るため、切り上げが必要です。したがって、必要バッチサイズは、時間を変えずに目標へ到達または超過する最小の整数です。併記される結果レートでは、整数化によって生じるわずかな余裕も確認できます。この試算では、バッチを増やしても処理時間は増えないと仮定します。初期見積もりには有用ですが、データベース、API、メモリ、並列 worker は非線形に変化することがあります。候補サイズを代表的なデータで測定し、実測した間隔をもう一度入力してください。この手順を繰り返すことで、楽観的な仮定を実システムの根拠ある測定値へ置き換えられます。
現在のバッチで許容される間隔を求めます
上流 API、トランザクション上限、メモリ容量、メッセージブローカーの制約により、バッチサイズを変更できない場合があります。その場合、目標分析は、現在の項目数を目標レートで割り、現サイズで許容される最長時間も計算します。たとえば、600 項目のバッチで 1 秒あたり 40 項目を目指す場合、開始から次の開始までを 15 秒以内にする必要があります。このしきい値は、最速値や平均値だけでなく、実測した高パーセンタイルの時間と比較してください。通常のばらつきがしきい値を超えると、名目上は目標を満たしていても、本番環境ではキューが増え続ける可能性があります。レート比も余裕を簡潔に示します。1 より大きければ目標以上、1 なら一致、1 未満なら不足です。このモデルは 1 本の逐次処理経路を想定しています。複数の同一 worker では、共通間隔内の合計バッチサイズを使うか、負荷が均等な場合だけ各経路の持続可能なレートを合計してください。
活用例
キューコンシューマーの規模を決めます
コンシューマーのバッチサイズと間隔をレートに換算し、メッセージ流入量を上回るか確認します。
一括 API 呼び出しを計画します
必要な同期速度を維持するため、リクエストあたりの最小レコード数または最長間隔を求めます。
データパイプラインの能力を評価します
実測したインポートバッチを目標と比較し、サイズまたは処理時間の改善が必要か判断します。
よくある質問
バッチスループットはどの式で計算しますか?
実効スループットは、バッチサイズを秒単位のバッチ時間で割って求めます。1 分および 1 時間あたりにも換算します。
バッチ時間には何を含めますか?
エンドツーエンドの能力には開始間隔をご使用ください。準備や待機を意図的に除外する場合のみ、処理時間だけをご使用ください。
必要バッチサイズはどのように求めますか?
1 秒あたりの目標値にバッチ時間を掛け、目標を下回らないよう次の整数へ切り上げます。
並列 worker も自動で考慮されますか?
自動では考慮されません。共通間隔の合計バッチとして表すか、負荷が均等な場合に各 worker のレートを合計してください。
本番のスループットが低くなるのはなぜですか?
キュー遅延、再試行、準備、競合、非線形な拡張、負荷の偏りが低下要因になります。代表的な高パーセンタイル値をご使用ください。
API リクエストの料金はいくらですか?
API リクエスト 1 回の料金は $0.002 です。ブラウザーでは無料で計算できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/batch-throughput \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"batch_size":500,"batch_time_seconds":20}'const res = await fetch("https://api.kit.forhosting.com/dev/batch-throughput", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"batch_size": 500,
"batch_time_seconds": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/batch-throughput",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"batch_size": 500,
"batch_time_seconds": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/batch-throughput", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"batch_size":500,"batch_time_seconds":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"batch_size":500,"batch_time_seconds":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/batch-throughput", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"batch_size": 500,
"batch_time_seconds": 20
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.batch_throughput",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |