INTEGRITY Dokumentace

Úložiště Durable Object podporované KV (starší verze)

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 value

JavaScript 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 ↗.

Asynchronní KV API

Durable Objects podporované KV poskytují metody rozhraní KV API, které jsou asynchronní.

získat

Podporované možnosti

put

smazat

Podporované možnosti

seznam

Podporované možnosti

Alarmy

getAlarm

Podporované možnosti

setAlarm

deleteAlarm

Podporované možnosti

Ostatní

deleteAll

transactionSync

transaction

sync