Spec-Zone.ru › Deno 2

class Deno.AtomicOperation

Нестабильно

Операция над Deno.Kv, которая может быть выполнена атомарно. Атомарные операции не выполняют автоматическое подтверждение и должны быть явно подтверждены, вызвав метод commit.

Атомарные операции могут использоваться для выполнения нескольких мутаций в хранилище KV в одной атомарной транзакции. Они также могут использоваться для выполнения условных мутаций, указав один или несколько Deno.AtomicCheck, которые гарантируют, что мутация выполнится только в том случае, если пара ключ-значение в KV имеет определённую метку версии. Если любой из проверок не пройден, вся операция завершится неудачей, и никакие мутации не будут выполнены.

Порядок мутаций гарантируется, что он такой же, как и порядок мутаций, указанный в операции. Проверки выполняются до выполнения каких-либо мутаций. Порядок проверок не наблюдаем.

Атомарные операции могут использоваться для реализации оптимистической блокировки, где мутация выполняется только в том случае, если пара ключ-значение в хранилище KV не была изменена с момента последнего чтения. Это можно сделать, указав проверку, которая гарантирует, что метка версии пары ключ-значение соответствует метке версии, которая была прочитана. Если проверка не пройдена, мутация не будет выполнена, и операция завершится неудачей. Затем можно повторно выполнить операцию чтения-изменения-записи в цикле, пока она не завершится успешно.

Метод commit атомарной операции возвращает значение, указывающее, прошли ли проверки и были ли выполнены мутации. Если операция завершилась неудачей из-за не пройденной проверки, возвращаемое значение будет Deno.KvCommitError со свойством ok: false. Если операция завершилась неудачей по любой другой причине (ошибка хранилища, недопустимое значение и т.д.), будет брошено исключение. Если операция выполнена успешно, возвращаемое значение будет объектом Deno.KvCommitResult со свойством ok: true и меткой версии значения, сохранённого в KV.

Методы

check(...checks: AtomicCheck[]): this

Добавить в операцию проверку, гарантирующую, что метка версии пары ключ-значение в хранилище KV соответствует заданной метке версии. Если проверка не пройдена, вся операция завершится неудачей, и никакие мутации не будут выполнены во время подтверждения.

commit(): Promise<KvCommitResult | KvCommitError>

Подтвердить операцию в хранилище KV. Возвращает значение, указывающее, прошли ли проверки и были ли выполнены мутации. Если операция завершилась неудачей из-за не пройденной проверки, возвращаемое значение будет Deno.KvCommitError со свойством ok: false. Если операция завершилась неудачей по любой другой причине (ошибка хранилища, недопустимое значение и т.д.), будет брошено исключение. Если операция выполнена успешно, возвращаемое значение будет объектом Deno.KvCommitResult со свойством ok: true и меткой версии сохранённого в KV значения.

Если подтверждение возвращает ok: false, можно создать новую атомарную операцию с обновлёнными проверками и мутациями и попытаться подтвердить её снова. См. примечание об оптимистической блокировке в документации для Deno.AtomicOperation.

delete(key: KvKey): this

Добавить в операцию мутацию, которая удаляет указанный ключ, если все проверки пройдены во время подтверждения.

enqueue(value: unknown,options?: { delay?: number; keysIfUndelivered?: KvKey[]; backoffSchedule?: number[]; },): this

Добавить в операцию мутацию, которая добавляет значение в очередь, если все проверки пройдены во время подтверждения.

max(key: KvKey,n: bigint,): this

Сокращение для создания мутации max. Этот метод оборачивает n в Deno.KvU64, поэтому значение n должно быть в диапазоне [0, 2^64-1].

min(key: KvKey,n: bigint,): this

Сокращение для создания мутации min. Этот метод оборачивает n в Deno.KvU64, поэтому значение n должно быть в диапазоне [0, 2^64-1].

mutate(...mutations: KvMutation[]): this

Добавить в операцию мутацию, которая выполняет указанную мутацию для указанного ключа, если все проверки пройдены во время подтверждения. Типы и семантика всех доступных мутаций описаны в документации для Deno.KvMutation.

set(key: KvKey,value: unknown,options?: { expireIn?: number; },): this

Добавить в операцию мутацию, которая устанавливает значение указанного ключа в указанное значение, если все проверки пройдены во время подтверждения.

Можно указать необязательный параметр expireIn, чтобы установить срок действия (TTL) для ключа. TTL задаётся в миллисекундах, и ключ будет удалён из базы данных не раньше, чем пройдёт указанное количество миллисекунд. После истечения указанного срока ключ может оставаться видимым ещё некоторое время. Если параметр expireIn не указан, ключ не будет истекать.

sum(key: KvKey,n: bigint,): this

Сокращение для создания мутации sum. Этот метод оборачивает n в Deno.KvU64, поэтому значение n должно быть в диапазоне [0, 2^64-1].

© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/~/Deno.AtomicOperation

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API