← Cloudflare Durable Objects / durable-objects / api
Úložiště Durable Object podporované SQLite
Durable Object Storage API umožňuje Durable Objects k přístupu k transakčnímu a silně konzistentnímu úložišti. Úložiště připojené k Durable Object je soukromé pro danou jedinečnou instanci a jiné objekty k němu nemají přístup.
Durable Object Storage API nabízí několik metod, včetně SQL, obnovy k určitému bodu v čase (PITR), klíč-hodnota (KV) a alarmů. Dostupné metody API závisí na úložišti, které třída Durable Objects používá, buď SQLite nebo KV.
| Metody 1 | Třída Durable Object podporovaná SQLite | Třída Durable Object podporovaná KV |
|---|---|---|
| SQL API | ✅ | ❌ |
| PITR API | ✅ | ❌ |
| Synchronní KV API | ✅ 2, 3 | ❌ |
| Asynchronní KV API | ✅ 3 | ✅ |
| Alarms API | ✅ | ✅ |
Poznámky pod čarou
1 Každá metoda je implicitně obalena transakcí, takže jsou její výsledky atomické a izolované od všech ostatních operací s úložištěm, a to i při přístupu k více párům klíč-hodnota.
2 Metody KV API jako get(), put(), delete(), nebo list() ukládají
data do skryté tabulky SQLite __cf_kv. Mějte na paměti, že tuto tabulku uvidíte při výpisu všech tabulek, ale k jejímu obsahu se přes SQL API nedostanete.
3 Durable Objects s podporou SQLite také používají synchronní metody KV API pomocí ctx.storage.kv, zatímco Durable Objects s úložištěm KV poskytují pouze asynchronní metody KV API.
Přístup k úložišti
Durable Objects získávají přístup ke Storage API prostřednictvím DurableObjectStorage rozhraní a je přístupné přes DurableObjectState::storage vlastnost. K té se často přistupuje přes this.ctx.storage hodnotou ctx parametr předaný konstruktoru Durable Object.
Následující ukázka kódu ukazuje, jak pomocí Durable Object Storage API ukládat a načítat data.
export class Counter extends DurableObject {
constructor(ctx, env) {
super(ctx, env);
}
async increment() {
let value = (await this.ctx.storage.get("value")) || 0;
value += 1;
await this.ctx.storage.put("value", value);
return value;
}
}export class Counter extends DurableObject {
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
}
async increment(): Promise<number> {
let value: number = (await this.ctx.storage.get('value')) || 0;
value += 1;
await this.ctx.storage.put('value', value);
return value;
}
}from workers import DurableObject
class Counter(DurableObject):
def __init__(self, ctx, env):
super().__init__(ctx, env)
async def increment(self):
value = (await self.ctx.storage.get('value')) or 0
value += 1
await self.ctx.storage.put('value', value)
return valueJavaScript je jednovláknový a událostmi řízený programovací jazyk. To znamená, že běhová prostředí JavaScriptu standardně umožňují prokládání jednotlivých požadavků, což může vést k chybám souběžnosti. Běhové prostředí Durable Objects k jejich řešení používá kombinaci vstupní brány a výstupní brány, které zabraňují tomuto typu chyby souběžnosti při operacích s úložištěm. Více informací najdete v našem blogový příspěvek ↗.
SQL API
SqlStorage rozhraní zapouzdřuje metody, které upravují databázi SQLite vloženou do Durable Object. SqlStorage rozhraní je dostupné přes sql vlastnost z DurableObjectStorage třídu.
Například pomocí sql.exec() uživatel může vytvořit tabulku a vložit řádky.
import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
sql: SqlStorage;
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
this.sql = ctx.storage.sql;
this.sql.exec(`
CREATE TABLE IF NOT EXISTS artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
INSERT INTO artist (artistid, artistname) VALUES
(123, 'Alice'),
(456, 'Bob'),
(789, 'Charlie');
`);
}
}from workers import DurableObject
class MyDurableObject(DurableObject):
def __init__(self, ctx, env):
super().__init__(ctx, env)
self.sql = ctx.storage.sql
self.sql.exec("""
CREATE TABLE IF NOT EXISTS artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
INSERT INTO artist (artistid, artistname) VALUES
(123, 'Alice'),
(456, 'Bob'),
(789, 'Charlie');
""")- Metody SQL API přístupné pomocí
ctx.storage.sqljsou povoleny pouze na Třídy Durable Object s úložištěm SQLite a při volání na třídách Durable Object s backendem úložiště KV vrátí chybu. - Při zápisu dat se každá aktualizace řádku indexu počítá jako další řádek. Indexy však mohou být přínosné pro případy použití náročné na čtení. Více informací naleznete v Index pro SQLite Durable Objects.
- Zápis dat do Virtuální tabulky SQLite ↗ se také započítává do počtu zapsaných řádků.
Durable Objects podporují podmnožinu rozšíření SQLite pro doplňkovou funkčnost, včetně:
- modul FTS5 ↗ pro fulltextové vyhledávání (včetně
fts5vocab). - Rozšíření JSON ↗ funkce a operátory JSON.
- Matematické funkce ↗.
Viz zdrojový kód ↗ pro úplný seznam podporovaných funkcí.
exec
exec(query: : string, ...bindings: any[])SqlStorageCursor
Parametry
query:string- Řetězec SQL dotazu, který se má provést.
querymůže obsahovat?zástupné symboly pro vazby parametrů. Více SQL příkazů oddělených středníkem lze spustit v rámciquery. Pokud použijete více SQL příkazů, případné parametrické vazby se použijí na poslední SQL příkaz vquery, a vrácený kurzor platí pouze pro poslední příkaz SQL.
- Řetězec SQL dotazu, který se má provést.
...bindings:any[]Volitelné- Volitelný proměnný počet argumentů odpovídajících
?zástupné symboly vquery.
- Volitelný proměnný počet argumentů odpovídajících
Vrací
Kurzor (SqlStorageCursor) pro iteraci nad výsledky řádků dotazu jako objekty. SqlStorageCursor je JavaScriptový Iterable ↗, která podporuje iteraci pomocí for (let row of cursor). SqlStorageCursor je také JavaScriptový Iterator ↗, která podporuje iteraci pomocí cursor.next().
SqlStorageCursor podporuje následující metody:
next()- Vrátí objekt reprezentující další hodnotu kurzoru. Vrácený objekt obsahuje
doneavaluevlastnosti odpovídající JavaScriptovému Iterator ↗.doneje nastaveno nafalsepokud je přítomna další hodnota, avaluese nastaví na další řádkový objekt ve výsledku dotazu.doneje nastaveno natruejakmile se celý kurzor vyčerpá, a žádnévalueje nastaven.
- Vrátí objekt reprezentující další hodnotu kurzoru. Vrácený objekt obsahuje
toArray()- Prochází zbývající hodnoty kurzoru a vrací pole vrácených řádkových objektů.
one()- Vrátí objekt řádku, pokud výsledek dotazu obsahuje přesně jeden řádek. Pokud výsledek dotazu obsahuje nula řádků nebo více než jeden řádek,
one()vyvolá výjimku.
- Vrátí objekt řádku, pokud výsledek dotazu obsahuje přesně jeden řádek. Pokud výsledek dotazu obsahuje nula řádků nebo více než jeden řádek,
raw():Iterator- Vrátí Iterator nad stejnými výsledky dotazu, kde je každý řádek reprezentován jako pole hodnot sloupců (bez názvů sloupců) namísto objektu.
- Vrácený Iterator podporuje
next()atoArray()metody uvedené výše. - Vrácený kurzor a
raw()iterátor procházejí stejné výsledky dotazu a lze je kombinovat. Například:
let cursor = this.sql.exec("SELECT * FROM artist ORDER BY artistname ASC;");
let rawResult = cursor.raw().next();
if (!rawResult.done) {
console.log(rawResult.value); // prints [ 123, 'Alice' ]
} else {
// query returned zero results
}
console.log(cursor.toArray()); // prints [{ artistid: 456, artistname: 'Bob' },{ artistid: 789, artistname: 'Charlie' }]cursor = self.sql.exec("SELECT * FROM artist ORDER BY artistname ASC;")
raw_result = cursor.raw().next()
if not raw_result.done:
print(raw_result.value) # prints [ 123, 'Alice' ]
else:
# query returned zero results
pass
print(cursor.toArray()) # prints [{ artistid: 456, artistname: 'Bob' },{ artistid: 789, artistname: 'Charlie' }]SqlStorageCursor má následující vlastnosti:
columnNames:string[]- Názvy sloupců dotazu v pořadí, ve kterém se objevují v poli řádků vraceném
rawiterátor.
- Názvy sloupců dotazu v pořadí, ve kterém se objevují v poli řádků vraceném
rowsRead:number- Počet řádků dosud přečtených v rámci tohoto SQL
query. Tato hodnota se může při iteraci kurzoru zvyšovat. Konečná hodnota se používá pro Fakturace SQL.
- Počet řádků dosud přečtených v rámci tohoto SQL
rowsWritten:number- Počet řádků dosud zapsaných v rámci tohoto SQL
query. Tato hodnota se může při iteraci kurzoru zvyšovat. Konečná hodnota se používá pro Fakturace SQL.
- Počet řádků dosud zapsaných v rámci tohoto SQL
- Jakákoli číselná hodnota ve sloupci podléhá 52bitové přesnosti čísel v JavaScriptu. Pokud uložíte velmi velké číslo (v
int64) a poté stejnou hodnotu načtete, vrácená hodnota může být méně přesná než vaše původní číslo.
Příklady
SQL API příklady níže používají následující SQL schéma:
import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
sql: SqlStorage
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
this.sql = ctx.storage.sql;
this.sql.exec(`CREATE TABLE IF NOT EXISTS artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);INSERT INTO artist (artistid, artistname) VALUES
(123, 'Alice'),
(456, 'Bob'),
(789, 'Charlie');`
);
}
}Iterace přes výsledky dotazu jako řádkové objekty:
let cursor = this.sql.exec("SELECT * FROM artist;");
for (let row of cursor) {
// Iterate over row object and do something
}Převod výsledků dotazu na pole objektů řádků:
// Return array of row objects: [{"artistid":123,"artistname":"Alice"},{"artistid":456,"artistname":"Bob"},{"artistid":789,"artistname":"Charlie"}]
let resultsArray1 = this.sql.exec("SELECT * FROM artist;").toArray();
// OR
let resultsArray2 = Array.from(this.sql.exec("SELECT * FROM artist;"));
// OR
let resultsArray3 = [...this.sql.exec("SELECT * FROM artist;")]; // JavaScript spread syntaxPřevod výsledků dotazu na pole polí hodnot řádků:
// Returns [[123,"Alice"],[456,"Bob"],[789,"Charlie"]]
let cursor = this.sql.exec("SELECT * FROM artist;");
let resultsArray = cursor.raw().toArray();
// Returns ["artistid","artistname"]
let columnNameArray = this.sql.exec("SELECT * FROM artist;").columnNames.toArray();Získání objektu prvního řádku z výsledků dotazu:
// Returns {"artistid":123,"artistname":"Alice"}
let firstRow = this.sql.exec("SELECT * FROM artist ORDER BY artistname DESC;").toArray()[0];Zkontrolujte, zda výsledek dotazu obsahuje přesně jeden řádek:
// returns error
this.sql.exec("SELECT * FROM artist ORDER BY artistname ASC;").one();
// returns { artistid: 123, artistname: 'Alice' }
let oneRow = this.sql.exec("SELECT * FROM artist WHERE artistname = ?;", "Alice").one()Chování vráceného kurzoru:
let cursor = this.sql.exec("SELECT * FROM artist ORDER BY artistname ASC;");
let result = cursor.next();
if (!result.done) {
console.log(result.value); // prints { artistid: 123, artistname: 'Alice' }
} else {
// query returned zero results
}
let remainingRows = cursor.toArray();
console.log(remainingRows); // prints [{ artistid: 456, artistname: 'Bob' },{ artistid: 789, artistname: 'Charlie' }]Vrácený kurzor a raw() iterátor procházejí stejné výsledky dotazu:
let cursor = this.sql.exec("SELECT * FROM artist ORDER BY artistname ASC;");
let result = cursor.raw().next();
if (!result.done) {
console.log(result.value); // prints [ 123, 'Alice' ]
} else {
// query returned zero results
}
console.log(cursor.toArray()); // prints [{ artistid: 456, artistname: 'Bob' },{ artistid: 789, artistname: 'Charlie' }]sql.exec().rowsRead():
let cursor = this.sql.exec("SELECT * FROM artist;");
cursor.next()
console.log(cursor.rowsRead); // prints 1
cursor.toArray(); // consumes remaining cursor
console.log(cursor.rowsRead); // prints 3databaseSize
databaseSize: number
Vrací
Aktuální velikost databáze SQLite v bajtech.
let size = ctx.storage.sql.databaseSize;size = ctx.storage.sql.databaseSizePITR (Point In Time Recovery) API
Pro Durable Objects podporované SQLite, jsou k dispozici následující metody API pro obnovu k určitému bodu v čase (point-in-time recovery, PITR), pomocí kterých lze vestavěnou databázi SQLite Durable Objectu obnovit na libovolný okamžik za posledních 30 dní. Tyto metody se vztahují na celý obsah databáze SQLite, včetně uložených SQL dat objektu i dat uložených pomocí key-value put() API. PITR API není v lokálním vývoji podporováno, protože trvalý log změn dat se lokálně neukládá.
PITR API reprezentuje body v čase pomocí takzvaných „bookmarks“. Bookmark je většinou alfanumerický řetězec, například 0000007b-0000b26e-00001538-0c3e87bb37b3db5cc52eedb93cd3b96b. Bookmarky jsou navržené tak, aby byly lexikálně porovnatelné: při běžném porovnání řetězců je bookmark reprezentující dřívější časový okamžik menší než bookmark reprezentující okamžik pozdější.
getCurrentBookmark
ctx.storage.getCurrentBookmark(): Promise<string>
- Vrátí bookmark reprezentující aktuální okamžik v historii objektu.
getBookmarkForTime
ctx.storage.getBookmarkForTime(timestamp: : number | Date)Promise<string>
- Vrátí bookmark reprezentující přibližně daný okamžik, který musí spadat do posledních 30 dní. Pokud je časová značka reprezentována číslem, převede se na datum, jako by bylo použito
new Date(timestamp).
onNextSessionRestoreBookmark
ctx.storage.onNextSessionRestoreBookmark(bookmark: : string)Promise<string>
- Nastaví Durable Object tak, aby při dalším restartu obnovil své úložiště přesně do stavu, který odpovídá zadanému bookmarku. Po zavolání této metody by aplikace obvykle měla vyvolat
ctx.abort()pro restartování Durable Object, čímž dokončíte obnovu k určitému bodu v čase.
Tato metoda vrací speciální bookmark představující okamžik těsně před provedením obnovy (i když je tento okamžik technicky vzato stále v budoucnosti). Po dokončení obnovy ho lze vrátit zpět provedením druhé obnovy k tomuto bookmarku.
const DAY_MS = 24*60*60*1000;
// restore to 2 days ago
let bookmark = ctx.storage.getBookmarkForTime(Date.now() - 2 * DAYS_MS);
ctx.storage.onNextSessionRestoreBookmark(bookmark);from datetime import datetime, timedelta
now = datetime.now()
# restore to 2 days ago
bookmark = ctx.storage.getBookmarkForTime(now - timedelta(days=2))
ctx.storage.onNextSessionRestoreBookmark(bookmark)Synchronní KV API
get
ctx.storage.kv.get(key:string)Any, undefined- Načte hodnotu přiřazenou danému klíči. Typ vrácené hodnoty odpovídá tomu, co bylo pro daný klíč dříve zapsáno, nebo je undefined, pokud klíč neexistuje.
put
ctx.storage.kv.put(key:string, valueany)void-
Uloží hodnotu a přiřadí ji k danému klíči. Hodnota může být libovolného typu podporovaného algoritmus strukturovaného klonování ↗, což platí pro většinu typů.
Informace o velikosti klíčů a hodnot najdete v Limity Durable Object podporovaného SQLite
-
delete
ctx.storage.kv.delete(key:string)boolean- Odstraní klíč a přiřazenou hodnotu. Vrací
truepokud klíč existoval, nebofalsepokud tomu tak nebylo.
- Odstraní klíč a přiřazenou hodnotu. Vrací
list
ctx.storage.kv.list(options:Objectoptional)Iterable<string, any>-
Vrátí všechny klíče a hodnoty přiřazené aktuálnímu Durable Object seřazené vzestupně podle UTF-8 kódování klíčů.
-
Typ každé vrácené hodnoty v
Iterable↗ bude odpovídat tomu, co bylo dříve zapsáno pro odpovídající klíč. -
Než zavoláte tuto verzi
listbez možností, protože všechna data se načtou do paměti Durable Object, což může narazit na jeho limit. Pokud je to problém, předejte parametr options dolistjak je popsáno níže.
-
Podporované možnosti
-
startstring- Klíč, od kterého mají výsledky výpisu začínat, včetně tohoto klíče.
-
startAfterstring- Klíč, za kterým začínají výsledky výpisu, tento klíč není zahrnut. Nelze použít současně s
start.
- Klíč, za kterým začínají výsledky výpisu, tento klíč není zahrnut. Nelze použít současně s
-
endstring- Klíč, u kterého mají výsledky výpisu končit, tento klíč není zahrnut.
-
prefixstring- Omezí výsledky pouze na dvojice klíč-hodnota, jejichž klíče začínají daným prefixem.
-
reverseboolean- Pokud je hodnota true, výsledky se vrátí v sestupném pořadí místo výchozího vzestupného.
- Povolení
reversenemění významstart,startKey, neboendKey.startstále definuje nejmenší klíč v lexikografickém pořadí, který lze vrátit (inkluzivně), a fakticky tak slouží jako koncový bod výpisu v obráceném pořadí.endstále definuje největší klíč v lexikografickém pořadí, který má výpis zohlednit (exkluzivně), a fakticky tak slouží jako počáteční bod výpisu v obráceném pořadí.
-
limitnumber- Maximální počet párů klíč-hodnota, které se mají vrátit.
Asynchronní KV API
získat
-
ctx.storage.get(key:string, optionsObjectoptional)Promise<any>- Načte hodnotu přiřazenou danému klíči. Typ vrácené hodnoty odpovídá tomu, co bylo pro daný klíč dříve zapsáno, nebo je undefined, pokud klíč neexistuje.
-
ctx.storage.get(keys:Array<string>, optionsObjectoptional)Promise<Map<string, any>>- Načte hodnoty přiřazené každému ze zadaných klíčů. Typ každé vrácené hodnoty v
Map↗ bude odpovídat tomu, co bylo dříve zapsáno pro odpovídající klíč. Výsledkem jeMapse seřadí vzestupně podle svého kódování UTF-8, přičemž požadované klíče, které neexistují, se vynechají. Podporuje najednou až 128 klíčů.
- Načte hodnoty přiřazené každému ze zadaných klíčů. Typ každé vrácené hodnoty v
Podporované možnosti
-
allowConcurrency:boolean- Ve výchozím nastavení systém pozastaví doručování I/O událostí objektu po dobu probíhající operace s úložištěm, aby se předešlo neočekávaným souběhům (race conditions). Předejte
allowConcurrency: trueabyste toto chování vypnuli a povolili doručování souběžných událostí.
- Ve výchozím nastavení systém pozastaví doručování I/O událostí objektu po dobu probíhající operace s úložištěm, aby se předešlo neočekávaným souběhům (race conditions). Předejte
-
noCache:boolean- Pokud je hodnota true, klíč/hodnota se nevloží do paměťové cache. Pokud je klíč již v cache, vrátí se hodnota z cache, ale její čas posledního použití se neaktualizuje. Použijte to v případě, že očekáváte, že tento klíč nebude v blízké budoucnosti znovu potřeba. Tento příznak je pouze doporučením. Nikdy nezmění chování vašeho kódu, ale může ovlivnit výkon.
put
-
put(key:string, valueany, optionsObjectoptional)Promise-
Uloží hodnotu a přiřadí ji k danému klíči. Hodnota může být libovolného typu podporovaného algoritmus strukturovaného klonování ↗, což platí pro většinu typů.
Velikost klíčů a hodnot má různé limity podle toho, jaké úložiště Durable Object používáte. Přečtěte si jednu z těchto stránek:
U Durable Object podporovaného KV platí, že pokud serializovaná hodnota překročí limit velikosti 128 KiB (131072 bajtů),
put()vyvoláRangeError(napříkladValues cannot be larger than 131072 bytes.) před provedením zápisu.
-
-
put(entries:Object, optionsObjectoptional)Promise- Přijme objekt a uloží každý jeho klíč a hodnotu do úložiště.
- Každá hodnota může být libovolného typu podporovaného algoritmus strukturovaného klonování ↗, což platí pro většinu typů.
- Podporuje najednou až 128 párů klíč-hodnota. Velikost klíčů a hodnot má různé limity v závislosti na typu Durable Object, který používáte. Podívejte se na jednu z těchto možností:
smazat
-
delete(key:string, optionsObjectoptional)Promise<boolean>- Odstraní klíč a přiřazenou hodnotu. Vrací
truepokud klíč existoval, nebofalsepokud tomu tak nebylo.
- Odstraní klíč a přiřazenou hodnotu. Vrací
-
delete(keys:Array<string>, optionsObjectoptional)Promise<number>- Odstraní zadané klíče a jejich přiřazené hodnoty. Podporuje najednou až 128 klíčů. Vrací počet odstraněných dvojic klíč-hodnota.
Podporované možnosti
-
put(),delete()adeleteAll()podporují následující možnosti: -
allowUnconfirmedboolean-
Ve výchozím nastavení systém pozastaví odchozí síťové zprávy z Durable Object, dokud nebude potvrzeno, že všechny předchozí zápisy byly uloženy na disk. Pokud zápis selže, systém objekt resetuje, zahodí všechny odchozí zprávy a klientům místo toho odpoví chybou.
-
Díky tomu mohou Durable Objects pokračovat ve vykonávání souběžně se zápisovou operací, aniž by bylo potřeba řešit předčasné potvrzení zápisu, protože žádná externí strana nemůže pozorovat činnost objektu, dokud zápis skutečně neproběhne.
-
Po každém zápisu mohou být následující síťové zprávy mírně zpožděny. Některé aplikace mohou považovat komunikaci na základě nepotvrzených zápisů za přijatelnou. Jiné programy naopak mohou upřednostnit okamžité povolení síťového provozu. V takovém případě nastavte
allowUnconfirmednatrueabyste vypnuli výchozí chování. -
Pokud chcete, aby některé odchozí síťové zprávy prošly okamžitě a jiné ne, můžete použít volbu allowUnconfirmed, abyste zprávy, které mají projít, neblokovali, a poté zvlášť zavolat
sync()metoda, která vrací promise a splní se až ve chvíli, kdy jsou všechny předchozí zápisy úspěšně uloženy na disk.
-
-
noCacheboolean-
Pokud je hodnota true, klíč/hodnota se z paměti odstraní hned po dokončení zápisu na disk.
-
Použijte
noCachepokud se klíč v blízké budoucnosti znovu nepoužije.noCachenikdy nezmění sémantiku vašeho kódu, ale může ovlivnit výkon. -
Pokud používáte
get()pro načtení klíče před dokončením zápisu se vrátí kopie ze zápisové vyrovnávací paměti, čímž se zajistí konzistence s posledním volánímput().
-
seznam
list(options:Objectoptional)Promise<Map<string, any>>-
Vrátí všechny klíče a hodnoty přiřazené aktuálnímu Durable Object seřazené vzestupně podle UTF-8 kódování klíčů.
-
Typ každé vrácené hodnoty v
Map↗ bude odpovídat tomu, co bylo dříve zapsáno pro odpovídající klíč. -
Než zavoláte tuto verzi
listbez možností, protože všechna data se načtou do paměti Durable Object, což může narazit na jeho limit. Pokud je to problém, předejte parametr options dolistjak je popsáno níže.
-
Podporované možnosti
-
startstring- Klíč, od kterého mají výsledky výpisu začínat, včetně tohoto klíče.
-
startAfterstring- Klíč, za kterým začínají výsledky výpisu, tento klíč není zahrnut. Nelze použít současně s
start.
- Klíč, za kterým začínají výsledky výpisu, tento klíč není zahrnut. Nelze použít současně s
-
endstring- Klíč, u kterého mají výsledky výpisu končit, tento klíč není zahrnut.
-
prefixstring- Omezí výsledky pouze na dvojice klíč-hodnota, jejichž klíče začínají daným prefixem.
-
reverseboolean- Pokud je hodnota true, výsledky se vrátí v sestupném pořadí místo výchozího vzestupného.
- Povolení
reversenemění významstart,startKey, neboendKey.startstále definuje nejmenší klíč v lexikografickém pořadí, který lze vrátit (inkluzivně), a fakticky tak slouží jako koncový bod výpisu v obráceném pořadí.endstále definuje největší klíč v lexikografickém pořadí, který má výpis zohlednit (exkluzivně), a fakticky tak slouží jako počáteční bod výpisu v obráceném pořadí.
-
limitnumber- Maximální počet párů klíč-hodnota, které se mají vrátit.
-
allowConcurrencyboolean- Stejné jako možnost
get(), výše.
- Stejné jako možnost
-
noCacheboolean- Stejné jako možnost
get(), výše.
- Stejné jako možnost
Alarmy
getAlarm
getAlarm(options:Objectoptional)Promise<Number | null>- Načte aktuální čas alarmu (pokud je nastaven) jako celé číslo milisekund od epochy. Alarm se považuje za nastavený, pokud ještě nezačal, nebo pokud selhal a žádný opakovaný pokus ještě nezačal. Pokud není nastaven žádný alarm,
getAlarm()vracínull.
- Načte aktuální čas alarmu (pokud je nastaven) jako celé číslo milisekund od epochy. Alarm se považuje za nastavený, pokud ještě nezačal, nebo pokud selhal a žádný opakovaný pokus ještě nezačal. Pokud není nastaven žádný alarm,
Podporované možnosti
- Stejné možnosti jako
get(), ale beznoCache.
setAlarm
-
setAlarm(scheduledTime:Date | number, optionsObjectoptional)Promise- Nastaví aktuální čas alarmu, přičemž přijímá buď JavaScript
Date, nebo celé číslo milisekund od epochy.
Pokud
setAlarm()je volán s časem rovným nebo dřívějším nežDate.now(), alarm se naplánuje k asynchronnímu spuštění v nejbližší době. Pokud v tomto případě obslužná rutina alarmu už běží, nezruší se. Alarmy lze nastavit s přesností na milisekundy a obvykle se spustí během několika milisekund po nastaveném čase, ale kvůli údržbě nebo selhání během failoveru se mohou zpozdit až o minutu. - Nastaví aktuální čas alarmu, přičemž přijímá buď JavaScript
deleteAlarm
deleteAlarm(options:Objectoptional)Promise- Odstraní alarm, pokud existuje. Pokud handler alarmu právě běží, jeho spuštění tím nezruší.
Podporované možnosti
setAlarm()adeleteAlarm()podporují stejné možnosti jakoput(), ale beznoCache.
Ostatní
deleteAll
deleteAll(options:Objectoptional)Promise- Odstraní všechna uložená data a fakticky uvolní veškeré úložiště použité Durable Object. U Durable Objects s úložištěm typu klíč-hodnota
deleteAll()odstraní všechny klíče a jejich hodnoty pro jednotlivý Durable Object. U Durable Objects s Backend úložiště SQLite,deleteAll()odstraní veškerý obsah privátní SQLite databáze Durable Objectu, včetně SQL dat i dat klíč-hodnota. - U Durable Objects s úložištěm typu klíč-hodnota probíhající
deleteAll()operace může selhat, což může vést k tomu, že se smaže jen část dat. Durable Objects s úložištěm SQLite nemají problém s částečnýmdeleteAll()problém, protožedeleteAll()operace jsou atomické (buď proběhnou celé, nebo vůbec). - U Workerů s datem kompatibility
2026-02-24nebo novější,deleteAll()zároveň odstraní všechny aktivní alarm. U starších dat kompatibilitydeleteAll()nemaže alarmy. PoužijtedeleteAlarm()samostatně, nebo povoltedelete_all_deletes_alarmpříznak kompatibility.
- Odstraní všechna uložená data a fakticky uvolní veškeré úložiště použité Durable Object. U Durable Objects s úložištěm typu klíč-hodnota
transactionSync
transactionSync(callback):any-
K dispozici pouze při použití Durable Objects podporovaných SQLite.
-
Vyvolá
callback()zabalené v transakci a vrátí její výsledek. -
Pokud
callback()vyvolá výjimku, transakce se vrátí zpět (rollback). -
Callback musí doběhnout synchronně, to znamená, že by neměl být deklarován
asyncani jinak nevracet Promise. Součástí transakce mohou být pouze synchronní operace s úložištěm. Je to určené pro použití s SQL dotazy pomocíctx.storage.sql.exec(), které se dokončují synchronně.
-
transaction
-
transaction(closureFunction(txn)):Promise-
Spustí sekvenci operací úložiště volaných na
txnv rámci jedné transakce, která se buď úspěšně potvrdí, nebo přeruší. -
Explicitní transakce už nejsou potřeba. Jakákoli série zápisových operací bez mezilehlého
awaitse automaticky odešlou atomicky a systém zabrání souběžnému spuštění událostí, dokudawaitoperaci čtení (pokud nepoužijeteallowConcurrency: true). Řada čtení následovaná řadou zápisů (bez jakéhokoli dalšího vstupně-výstupního zásahu mezi nimi) je proto automaticky atomická a chová se jako transakce.
-
-
txn-
Poskytuje přístup k
put(),get(),delete(), alist()metody zdokumentované výše, které poběží v kontextu aktuální transakce. Abyste uvnitř transakčního uzávěru (closure) dosáhli transakčního chování, musíte tyto metody volat natxnObject místo na nejvyšší úrovnictx.storageObject.
Podporuje takérollback()funkce, která zajistí, že veškeré změny provedené během transakce se vrátí zpět místo potvrzení. Porollback()je zavolán, jakékoli další operace natxnObject selže s výjimkou.rollback()nepřijímá žádné parametry a volajícímu nic nevrací. -
Při použití úložný stroj založený na SQLite,
txnobjekt je zastaralý. Jakékoli operace s úložištěm provedené přímo nactx.storageobjekt, včetně SQL dotazů pomocíctx.storage.sql.exec(), budou považovány za součást transakce.
-
sync
sync():Promise-
Synchronizuje všechny čekající zápisy na disk.
-
Je to podobné běžnému chování při automatickém slučování zápisů (write coalescing). Pokud je ve vyrovnávací paměti zápisů čekající zápis (včetně těch odeslaných pomocí
allowUnconfirmedmožnost), vrácený promise se splní, jakmile se dokončí. Pokud nejsou žádné čekající zápisy, vrácený promise je už splněný.
-
Vlastnosti úložiště
sql
sql je vlastnost pouze pro čtení typu DurableObjectStorage zapouzdřující SQL API.