Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

上限

最終更新 Markdown で表示Agent セットアップ

Durable Objects は特殊な種類の Worker です。そのため、Workers プランに応じて Workers の上限 が適用されます。加えて、Durable Objects にはこのページに示す固有の上限があります。

SQLite バックエンドの Durable Objects の一般的な上限

機能 上限
オブジェクト数 無制限(アカウント内、または指定クラス内)
Durable Object クラスの上限(アカウントあたり) 500(Workers Paid)/ 100(Free) 1
アカウントあたりのストレージ 無制限(Workers Paid)/ 5 GB(Free) 2
クラスあたりのストレージ 無制限 3
Durable Object あたりのストレージ 10 GB 3
キーサイズ キーと値の合計は 2 MB を超えられません
値サイズ キーと値の合計は 2 MB を超えられません
WebSocket メッセージサイズ 32 MiB(受信メッセージのみ)
リクエストあたりの CPU 30 秒(デフォルト)/ アクティブ CPU 時間 を 5 分まで設定可能 4
同時送信接続数 / リクエスト 6(Workers と同じ)

SQL ストレージの上限

SQLite ストレージ を使う Durable Object クラスには、次の SQL 上限が適用されます。

SQL 上限
テーブルあたりの最大列数 100
テーブルあたりの最大行数 無制限(オブジェクトあたりのストレージ上限を除く)
文字列、BLOB、またはテーブル行の最大サイズ 2 MB
SQL ステートメントの最大長 100 KB
クエリあたりの最大バインドパラメーター数 100
SQL 関数あたりの最大引数 32
LIKE または GLOB パターンの最大文字数(バイト) 50 バイト

キー値バックエンドの Durable Objects の一般的な上限

機能 キー値ストレージバックエンドを使うクラスの上限
オブジェクト数 無制限(アカウント内、または指定クラス内)
Durable Object クラスの上限(アカウントあたり) 500(Workers Paid)/ 100(Free) 5
アカウントあたりのストレージ 50 GB(Cloudflare に連絡すると引き上げ可能) 6
クラスあたりのストレージ 無制限
Durable Object あたりのストレージ 無制限
キーサイズ 2 KiB(2048 バイト)
値サイズ 128 KiB(131072 バイト)
WebSocket メッセージサイズ 32 MiB(受信メッセージのみ)
リクエストあたりの CPU 30 秒(WebSocket メッセージを含む) 7
同時送信接続数 / リクエスト 6(Workers と同じ)

よくある質問

1 つの Durable Object はどれくらいの処理ができますか?

Durable Objects は、多数の Durable Object に対して水平スケールできます。個々の Object は本質的にシングルスレッドです。

  • 個々の Object には、1 秒あたり 1,000 リクエストのソフト上限があります。名前空間あたりの個々のオブジェクト数に上限はありません。
  • 小さな値に対する単純な ストレージ get() をそのまま返す場合、大きな JSON 値をシリアライズ / デシリアライズする Durable Object よりも、高いリクエストスループットを出せることがあります。
  • 同様に、複数の list() 操作を行う Durable Object は、リクエストスループットの面でより制約を受けやすくなります。

リクエストが多すぎる Durable Object は、いったんキューに入れたあと、呼び出し元に overloaded エラーを返します。

Durable Objects はいくつ作成できますか?

Durable Objects は、システム内の個々のオブジェクト数を制限する必要がないように設計されており、水平にスケールできます。

  • 1 つの Durable Object 名前空間 内で、必要な数だけ個別の Durable Object を作成して実行できます。
  • Workers Paid プランで SQLite バックエンドの Durable Objects を使う場合、アカウントあたりのストレージ上限はありません。
  • SQLite バックエンドの各 Durable Object には、Workers Paid プランで 10 GB のストレージ上限があります。
  • 詳細は Durable Object の上限 を参照してください。

Durable Objects の CPU 制限を引き上げられますか?

Durable Objects は Worker スクリプトであり、他の Workers と同じ 呼び出しあたりの CPU 制限 が適用されます。CPU 時間はアクティブな処理時間です。ネットワークリクエスト、ストレージ呼び出し、その他の一般的な I/O の待ち時間は、CPU 時間や Durable Objects のコンピュート消費には含まれません。

デフォルトでは、Durable Objects の呼び出し(HTTP リクエスト、WebSocket メッセージ、または Alarm)あたりの最大 CPU 時間は 30 秒です。Wrangler 設定の limits.cpu_ms を指定すると、その Durable Object 定義に紐づくすべての Durable Objects で引き上げられます。

{
	// ...rest of your configuration...
	"limits": {
		"cpu_ms": 300000, // 300,000 milliseconds = 5 minutes
	},
	// ...rest of your configuration...
}
[limits]
cpu_ms = 300_000

Durable Object がストレージ上限を超えるとどうなりますか?

SQLite バックエンドの Durable Object が ストレージ上限(Workers Paid では 10 GB、Free プランでは 1 GB)に達すると、書き込み操作(INSERTUPDATE、または put()sql.exec() ストレージ API の呼び出し)は次のエラーで失敗します。

database or disk is full: SQLITE_FULL

読み取り操作(SELECT クエリ、get()list() の呼び出し)は引き続き動作し、空き容量を確保するための DELETE 操作も成功します。

このエラーを Durable Object 内で扱うには、ストレージ API が投げる例外を捕捉します。

try {
	this.ctx.storage.sql.exec(
		"INSERT INTO my_table (key, value) VALUES (?, ?)",
		key,
		value,
	);
} catch (e) {
	if (e.message.includes("SQLITE_FULL")) {
		// Storage limit reached — reads and deletes still work
		// Consider deleting old data or returning a meaningful error to the caller
	}
	throw e;
}

呼び出し種別ごとのウォールタイム上限

ウォールタイム(ウォールクロック時間とも呼ばれます)は、呼び出しの開始から終了までの経過時間の合計です。ネットワークリクエスト、I/O、その他の非同期処理の待ち時間も含みます。CPU 時間 とは異なります。CPU 時間は、CPU がコードを実際に実行している時間だけを測ります。

次の表は、開発者プラットフォーム全体における Worker の呼び出し種別ごとのウォールタイム上限です。

呼び出し種別 ウォールタイム上限 詳細
受信 HTTP リクエスト 無制限 クライアントが接続している間は、ハード上限はありません。レスポンス本文をストリーミング中の Worker はアクティブのままです。waitUntil() は、レスポンス後または切断後、最大 30 秒まで実行を延ばします。
Cron Triggers 15 分 スケジュール実行の Workers は、呼び出しあたり最大 15 分のウォールタイムです。
Queue consumers 15 分 各コンシューマーの呼び出しは、最大 15 分のウォールタイムです。
Durable Object alarm handlers 15 分 アラームハンドラーの呼び出しは、最大 15 分のウォールタイムです。
Durable Objects(RPC / HTTP) 無制限 呼び出し元が Durable Object に接続している間は、ハード上限はありません。リクエスト、RPC 呼び出し、レスポンスストリーム、WebSocket、または進行中の I/O がある間、Durable Objects はアクティブのままです。
Workflows(ステップごと) 無制限 各ステップは無制限のウォールタイムで実行できます。個々のステップには、設定した CPU 時間上限 が適用されます。

Footnotes

  1. Workers の スクリプト上限 と同じです。

  2. Durable Objects のストレージは、ギビバイト(GiB)ではなくギガバイト(1 GB = 1,000,000,000 バイト)で課金し、計測します。

  3. Workers Free プランのアカウントは、Durable Objects の合計ストレージが 5 GB までです。 2

  4. 受信 HTTP リクエストまたは WebSocket メッセージ ごとに、残りの CPU 時間は 30 秒にリセットされます。そのため Durable Object は、受信ネットワークリクエストのたびに最大 30 秒のコンピュートを使え、新しいネットワークリクエストでタイマーがリセットされます。受信ネットワークリクエストのあいだに 30 秒を超えるコンピュートを使うと、その Durable Object が退避されリセットされる可能性が高くなります。リクエスト呼び出しあたりの CPU 時間は 引き上げできます

  5. Workers の スクリプト上限 と同じです。

  6. Durable Objects のストレージは、ギビバイト(GiB)ではなくギガバイト(1 GB = 1,000,000,000 バイト)で課金し、計測します。

  7. 受信 HTTP リクエストまたは WebSocket メッセージ ごとに、残りの CPU 時間は 30 秒にリセットされます。そのため Durable Object は、受信ネットワークリクエストのたびに最大 30 秒のコンピュートを使え、新しいネットワークリクエストでタイマーがリセットされます。受信ネットワークリクエストのあいだに 30 秒を超えるコンピュートを使うと、その Durable Object が退避されリセットされる可能性が高くなります。リクエスト呼び出しあたりの CPU 時間は 引き上げできます

役に立ちましたか?