INTEGRITY Dokumentace

Limity

Durable Objects jsou zvláštní typ Workeru, takže Workers Limits se uplatňují podle vašeho plánu Workers. Durable Objects navíc mají specifické limity uvedené na této stránce.

Obecné limity Durable Objects podporovaných SQLite

Funkce Limit
Počet objektů Neomezeno (v rámci účtu nebo dané třídy)
Maximum tříd Durable Object (na účet) 500 (Workers Paid) / 100 (Free) 1
Úložiště na účet Neomezeno (Workers Paid) / 5GB (Free) 2
Úložiště na třídu Neomezeno 3
Úložiště na jeden Durable Object 10 GB 3
Velikost klíče Klíč a hodnota dohromady nesmí přesáhnout 2 MB
Velikost hodnoty Klíč a hodnota dohromady nesmí přesáhnout 2 MB
Velikost zprávy WebSocketu 32 MiB (pouze pro přijaté zprávy)
CPU na požadavek 30 sekund (výchozí) / nastavitelné až na 5 minut aktivní doba CPU 4
Souběžná odchozí připojení na požadavek 6 (stejné jako Workers)

Limity úložiště SQL

U tříd Durable Object s Úložiště SQLite platí tato omezení SQL:

SQL Limit
Maximální počet sloupců v tabulce 100
Maximální počet řádků v tabulce Neomezeno (kromě limitů úložiště na jeden objekt)
Maximální řetězec, BLOB nebo velikosti řádku tabulky 2 MB
Maximální délka příkazu SQL 100 KB
Maximální počet vázaných parametrů na dotaz 100
Maximální počet argumentů na funkci SQL 32
Maximální počet znaků (bajtů) v LIKE nebo GLOB vzor 50 bajtů

Obecné limity Durable Objects podporovaných KV

Funkce Limit pro třídu s úložištěm typu klíč-hodnota
Počet objektů Neomezeno (v rámci účtu nebo dané třídy)
Maximum tříd Durable Object (na účet) 500 (Workers Paid) / 100 (Free) 5
Úložiště na účet 50 GB (lze navýšit po kontaktování Cloudflare) 6
Úložiště na třídu Neomezeně
Úložiště na jeden Durable Object Neomezeně
Velikost klíče 2 KiB (2048 bajtů)
Velikost hodnoty 128 KiB (131072 bajtů)
Velikost zprávy WebSocketu 32 MiB (pouze pro přijaté zprávy)
CPU na požadavek 30s (včetně zpráv WebSocket) 7
Souběžná odchozí připojení na požadavek 6 (stejné jako Workers)

Často kladené dotazy

Kolik práce zvládne jeden Durable Object?

Durable Objects lze škálovat horizontálně napříč velkým množstvím Durable Objects. Každý jednotlivý objekt je ze své podstaty jednovláknový.

Durable Object, který obdrží příliš mnoho požadavků, se je nejprve pokusí zařadit do fronty a poté vrátí přetížený chybu volajícímu.

Kolik Durable Objects mohu vytvořit?

Durable Objects jsou navržené tak, že počet jednotlivých objektů v systému nemusí být omezený a lze je škálovat horizontálně.

Mohu zvýšit limit CPU pro Durable Objects?

Durable Objects jsou skripty Workeru a mají stejné limity CPU na jedno volání stejně jako kterýkoli jiný Worker. Upozorňujeme, že čas CPU je aktivní čas zpracování: nezapočítává se do něj čas čekání na síťové požadavky, volání úložiště ani jiné obecné vstupně výstupní operace, takže se nepočítají do vašeho času CPU ani do spotřeby výpočetního výkonu Durable Objects.

Ve výchozím nastavení je maximální doba CPU na jedno volání Durable Object (HTTP požadavek, zpráva WebSocket nebo Alarm) nastavena na 30 sekund, ale lze ji zvýšit pro všechny Durable Objects patřící k dané definici Durable Object nastavením limits.cpu_ms ve vaší konfiguraci Wrangler:

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

Co se stane, když Durable Object překročí limit úložiště?

Když Durable Object s úložištěm SQLite dosáhne svého maximální limit úložiště (10 GB v plánu Workers Paid nebo 1 GB v plánu Free), operace zápisu (například INSERT, UPDATE, nebo volání do put() a sql.exec() storage API) selžou s následující chybou:

database or disk is full: SQLITE_FULL

Operace čtení (například SELECT dotazů, get(), a list() volání) budou nadále fungovat a DELETE operace se také podaří, takže můžete data odstranit a uvolnit místo.

Chcete-li tuto chybu ve svém Durable Object ošetřit, zachyťte výjimku vyvolanou storage 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;
}

Limity reálného času podle typu vyvolání

Reálný čas (anglicky též "wall-clock time") představuje celkovou dobu od začátku do konce vyvolání, včetně času stráveného čekáním na síťové požadavky, I/O operace a další asynchronní operace. Liší se od Čas CPU, které měří pouze čas, který CPU stráví aktivním prováděním vašeho kódu.

Následující tabulka shrnuje limity reálného času pro různé typy vyvolání Workeru v rámci vývojářské platformy:

Invocation type Limit reálného času Podrobnosti
Příchozí HTTP požadavek Neomezeně Žádný pevný limit, dokud zůstává klient připojen. Worker, který stále streamuje tělo odpovědi, zůstává aktivní. waitUntil() prodlužuje běh až o 30 sekund po odeslání odpovědi nebo odpojení.
Cron Triggers 15 minut Naplánovaní Workers mají maximální reálný čas běhu 15 minut na jedno vyvolání.
Queue consumers 15 minut Každé volání consumeru má maximální reálný čas běhu 15 minut.
Obslužné rutiny alarmů v Durable Object 15 minut Volání alarm handleru mají maximální reálnou dobu běhu (wall time) 15 minut.
Durable Objects (RPC / HTTP) Neomezeně Žádný pevný limit, dokud zůstává volající připojen k Durable Object. Durable Objects zůstávají aktivní, dokud probíhá požadavek, RPC volání, stream odpovědi, WebSocket nebo čekající I/O operace.
Workflows (na krok) Neomezeně Každý krok může běžet po neomezenou dobu. Na jednotlivé kroky se vztahuje nakonfigurovaný Limit CPU času.

Poznámky pod čarou

  1. Shodné s Workers limit skriptu. ↩

  2. Durable Objects účtuje i měří úložiště na základě jednotky gigabajt
    (1 GB = 1,000,000,000 bajtů), nikoli gibibajt (GiB).
    ↩

  3. Účty v plánu Workers Free mají celkové úložiště Durable Objects omezené na 5 GB. ↩ ↩2

  4. Každý příchozí HTTP požadavek nebo WebSocket zpráva obnoví zbývající dostupný čas CPU na 30 sekund. Durable Object tak může po každém příchozím síťovém požadavku spotřebovat až 30 sekund výpočetního času, přičemž každý nový síťový požadavek časovač resetuje. Pokud mezi příchozími síťovými požadavky spotřebujete více než 30 sekund výpočetního času, výrazně se zvyšuje pravděpodobnost, že daný Durable Object bude odstraněn z paměti a resetován. Čas CPU na jedno volání požadavku lze zvýšit. ↩

  5. Shodné s Workers limit skriptu. ↩

  6. Durable Objects účtuje i měří úložiště na základě jednotky gigabajt
    (1 GB = 1,000,000,000 bajtů), nikoli gibibajt (GiB).
    ↩

  7. Každý příchozí HTTP požadavek nebo WebSocket zpráva obnoví zbývající dostupný čas CPU na 30 sekund. Durable Object tak může po každém příchozím síťovém požadavku spotřebovat až 30 sekund výpočetního času, přičemž každý nový síťový požadavek časovač resetuje. Pokud mezi příchozími síťovými požadavky spotřebujete více než 30 sekund výpočetního času, výrazně se zvyšuje pravděpodobnost, že daný Durable Object bude odstraněn z paměti a resetován. Čas CPU na jedno volání požadavku lze zvýšit. ↩