INTEGRITY Документация

Хранилище Durable Object на основе KV (устаревшее)

Durable Object Storage API позволяет Durable Objects для доступа к транзакционному и строго согласованному хранилищу. Хранилище, привязанное к Durable Object, доступно только его уникальному экземпляру и недоступно другим объектам.

Durable Object Storage API включает несколько методов: SQL, восстановление на момент времени (PITR), ключ-значение (KV) и alarm API. Доступные методы API зависят от бэкенда хранилища класса Durable Objects: либо SQLite или KV.

Методы 1 класс Durable Object на основе SQLite Класс Durable Object на основе KV
SQL API ✅ ❌
PITR API ✅ ❌
Синхронный KV API ✅ 2, 3 ❌
Асинхронный KV API ✅ 3 ✅
Alarms API ✅ ✅

Сноски

1 Каждый метод неявно оборачивается в транзакцию, поэтому его результаты атомарны и изолированы от всех остальных операций хранилища, даже при обращении к нескольким парам «ключ-значение».

2 методы KV API, такие как get(), put(), delete(), или list() хранят данные в скрытой таблице SQLite __cf_kv. Обратите внимание: эта таблица будет отображаться при перечислении всех таблиц, но доступ к её содержимому через SQL API получить не удастся.

3 Durable Objects на основе SQLite также используют синхронные методы API KV с помощью ctx.storage.kv, тогда как Durable Object на основе KV предоставляют только асинхронные методы KV API.

Доступ к хранилищу

Durable Objects получают доступ к Storage API через DurableObjectStorage интерфейс и доступен через DurableObjectState::storage свойство. К нему часто обращаются через this.ctx.storage на ctx параметр, передаваемый в конструктор Durable Object.

Следующий фрагмент кода показывает, как сохранять и получать данные с помощью Durable Object Storage API.

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 является однопоточным, событийно-ориентированным языком программирования. Это означает, что среды выполнения JavaScript по умолчанию допускают чередование запросов друг с другом, что может приводить к ошибкам параллелизма. Среда выполнения Durable Objects использует сочетание входные шлюзы и выходные шлюзы, чтобы избежать такого рода ошибок конкурентного доступа при выполнении операций с хранилищем. Подробнее в нашем запись в блоге ↗.

Асинхронный KV API

Durable Objects на основе KV предоставляют методы KV API, которые являются асинхронными.

get

Поддерживаемые параметры

put

удалить

Поддерживаемые параметры

список

Поддерживаемые параметры

Будильники

getAlarm

Поддерживаемые параметры

setAlarm

deleteAlarm

Поддерживаемые параметры

Прочее

deleteAll

transactionSync

transaction

sync