INTEGRITY Dokumentace

Časté dotazy

Ceny

Kdy se Durable Objectu účtují poplatky za dobu běhu?

Durable Object účtuje poplatky za dobu trvání, když aktivně vykonává JavaScript, tedy zpracovává požadavek nebo spouští obslužné rutiny událostí, nebo když je nečinný, ale nesplňuje podmínky pro hibernaci. Neaktivní Durable Object, který splňuje podmínky pro hibernaci, neúčtuje poplatky za dobu běhu, a to ani v krátkém okně předtím, než ho runtime hibernuje.

Jakmile je objekt vyřazen z paměti, při příštím použití se znovu vytvoří opětovným zavoláním konstruktoru.

Existuje několik faktorů, které mohou Durable Object zabránit v hibernaci a způsobit, že mu budou nadále účtovány poplatky za dobu běhu.

Další informace najdete v Životní cyklus Durable Object.

Přispívá prázdná tabulka nebo databáze SQLite k mému úložišti?

Ano, i když minimální. Prázdné tabulky mohou zabírat alespoň několik kilobajtů v závislosti na počtu sloupců (šířce tabulky). Prázdná databáze SQLite zabírá přibližně 12 KB úložiště.

Počítají se metadata uložená v Durable Objects do mého úložiště?

Každý zápis do Durable Object založeného na SQLite ukládá do interních tabulek Durable Object nepatrné množství metadat, které se započítává do vašeho zpoplatněného úložiště.

Metadata zůstávají v Durable Object, dokud nezavoláte deleteAll().

Limity

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;
}

Metriky a analytika

Jak zjistím, která instance Durable Object vygenerovala daný záznam v logu?

Můžete použít $workers.durableObjectId pro identifikaci konkrétní instance Durable Object, která záznam protokolu vygenerovala.