Spec-Zone.ru › Deno 2

class Deno.Kv

implements Disposable
Нестабильно

База данных ключ-значение, которая может использоваться для хранения и извлечения данных.

Данные хранятся в виде пар ключ-значение, где ключ является Deno.KvKey, а значение — произвольным структурированно-сериализуемым JavaScript-значением. Ключи упорядочены лексикографически, как описано в документации для Deno.KvKey. Ключи уникальны в пределах базы данных, и последнее установленное значение для данного ключа — это значение, которое возвращается при чтении ключа. Ключи могут быть удалены из базы данных, в этом случае они больше не будут возвращаться при чтении ключей.

Значения могут быть любыми структурированно-сериализуемыми JavaScript-значениями (объекты, массивы, строки, числа и т.д.). Специальное значение Deno.KvU64 может использоваться для хранения 64-битных беззнаковых целых чисел в базе данных. Это специальное значение не может быть вложенным в другие объекты или массивы. В дополнение к обычным операциям изменения базы данных, значение беззнакового 64-битного целого числа также поддерживает sum, max, и min изменения.

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

Ключи имеют максимальную длину 2048 байт после сериализации. Значения имеют максимальную длину 64 КБ после сериализации. Сериализация как ключей, так и значений несколько непрозрачна, но можно обычно предположить, что размер сериализации любого значения примерно равен размеру результирующей строки JSON-сериализации того же значения. Если эти лимиты будут превышены, будет выброшено исключение.

Методы

[Symbol.dispose](): void
atomic(): AtomicOperation

Создать новый объект Deno.AtomicOperation, который можно использовать для выполнения атомарной транзакции в базе данных. Это не выполняет никаких операций с базой данных — атомарная транзакция должна быть подтверждена явно с помощью метода Deno.AtomicOperation.commit после добавления всех проверок и мутаций в операцию.

close(): void

Закрыть соединение с базой данных. Это предотвратит выполнение дальнейших операций с базой данных и прервёт все текущие операции немедленно.

commitVersionstamp(): symbol

Получить символ, представляющий версию текущей атомарной операции. Этот символ можно использовать как последнюю часть ключа в .set(), как непосредственно в объекте Kv , так и в объекте AtomicOperation, созданном из этого экземпляра Kv.

delete(key: KvKey): Promise<void>

Удалить значение для заданного ключа из базы данных. Если для ключа значения не существует, эта операция является пустой.

const db = await Deno.openKv();
await db.delete(["foo"]);
enqueue(value: unknown,options?: { delay?: number; keysIfUndelivered?: KvKey[]; backoffSchedule?: number[]; },): Promise<KvCommitResult>

Добавить значение в очередь базы данных для доставки слушателю очереди через Deno.Kv.listenQueue.

const db = await Deno.openKv();
await db.enqueue("bar");

Опция delay может быть использована для указания задержки (в миллисекундах) доставки значения. По умолчанию задержка равна 0, что означает немедленную доставку.

const db = await Deno.openKv();
await db.enqueue("bar", { delay: 60000 });

Опция keysIfUndelivered может быть использована для указания ключей, которые должны быть установлены, если значение не будет успешно доставлено слушателю очереди после нескольких попыток. Значения устанавливаются в значение сообщения в очереди.

Опция backoffSchedule может быть использована для указания политики повторных попыток для неудачной доставки сообщения. Каждый элемент в массиве представляет количество миллисекунд, которые нужно подождать перед повторной попыткой доставки. Например, [1000, 5000, 10000] означает, что неудачная доставка будет повторно попытена максимум 3 раза, с задержкой 1 секунды, 5 секунд и 10 секунд между каждой повторной попыткой.

const db = await Deno.openKv();
await db.enqueue("bar", {
  keysIfUndelivered: [["foo", "bar"]],
  backoffSchedule: [1000, 5000, 10000],
});
get<T = unknown>(key: KvKey,options?: { consistency?: KvConsistencyLevel; },): Promise<KvEntryMaybe<T>>

Получить значение и метку версии для заданного ключа из базы данных в виде объекта Deno.KvEntryMaybe. Если для ключа значения не существует, возвращаемый элемент будет иметь значение null и метку версии.

const db = await Deno.openKv();
const result = await db.get(["foo"]);
result.key; // ["foo"]
result.value; // "bar"
result.versionstamp; // "00000000000000010000"

Опция consistency может быть использована для указания уровня согласованности для операции чтения. По умолчанию уровень согласованности — «строгий». В некоторых случаях целесообразно использовать более слабый уровень согласованности. Более подробную информацию об уровнях согласованности см. в документации к Deno.KvConsistencyLevel.

getMany<T extends readonly unknown[]>(keys: readonly [...[K in keyof T]: KvKey],options?: { consistency?: KvConsistencyLevel; },): Promise<[K in keyof T]: KvEntryMaybe<T[K]>>

Получить несколько значений и меток версий из базы данных в виде массива объектов Deno.KvEntryMaybe. Возвращаемый массив будет иметь ту же длину, что и массив keys, и элементы будут в том же порядке, что и ключи. Если для данного ключа значения не существует, возвращаемый элемент будет иметь значение null и метку версии.

const db = await Deno.openKv();
const result = await db.getMany([["foo"], ["baz"]]);
result[0].key; // ["foo"]
result[0].value; // "bar"
result[0].versionstamp; // "00000000000000010000"
result[1].key; // ["baz"]
result[1].value; // null
result[1].versionstamp; // null

Опция consistency может быть использована для указания уровня согласованности для операции чтения. По умолчанию уровень согласованности — «строгий». В некоторых случаях целесообразно использовать более слабый уровень согласованности. Более подробную информацию об уровнях согласованности см. в документации к Deno.KvConsistencyLevel.

list<T = unknown>(selector: KvListSelector,options?: KvListOptions,): KvListIterator<T>

Получить список ключей в базе данных. Возвращаемый список — объект Deno.KvListIterator, который можно использовать для итерации по записям в базе данных.

Каждая операция списка должна указать селектор, используемый для указания диапазона возвращаемых ключей. Селектор может быть селектором префикса или селектором диапазона:

  • Селектор префикса выбирает все ключи, начинающиеся с заданного префикса частей ключа. Например, селектор ["users"] выберет все ключи, начинающиеся с префикса ["users"], такие как ["users", "alice"] и ["users", "bob"]. Обратите внимание, что вы не можете частично сопоставить часть ключа, поэтому селектор ["users", "a"] не будет соответствовать ключу ["users", "alice"]. Селектор префикса может указать start ключ, используемый для пропуска ключей, которые лексикографически меньше начального ключа.
  • Селектор диапазона выбирает все ключи, которые лексикографически находятся между заданными начальным и конечным ключами (включая начальный и исключая конечный). Например, селектор ["users", "a"], ["users", "n"] выберет все ключи, начинающиеся с префикса ["users"] и имеющие вторую часть ключа, которая лексикографически находится между a и n, такие как ["users", "alice"], ["users", "bob"], и ["users", "mike"], но не ["users", "noa"] или ["users", "zoe"].
const db = await Deno.openKv();
const entries = db.list({ prefix: ["users"] });
for await (const entry of entries) {
  entry.key; // ["users", "alice"]
  entry.value; // { name: "Alice" }
  entry.versionstamp; // "00000000000000010000"
}

Аргумент options может быть использован для указания дополнительных опций для операции списка. Дополнительную информацию см. в документации к Deno.KvListOptions.

listenQueue(handler: (value: any) => Promise<void> | void): Promise<void>

Прослушивание значений очереди, которые будут доставлены из очереди базы данных, которые были помещены в очередь с помощью Deno.Kv.enqueue. Предоставленная функция обратного вызова вызывается при каждом декьюированном значении. Неудачный вызов обратного вызова автоматически повторно пытается многократно до тех пор, пока он не удастся или пока не будет достигнуто максимальное количество повторных попыток.

const db = await Deno.openKv();
db.listenQueue(async (msg: unknown) => {
  await db.set(["foo"], msg);
});
set(key: KvKey,value: unknown,options?: { expireIn?: number; },): Promise<KvCommitResult>

Установить значение для заданного ключа в базе данных. Если для ключа уже существует значение, оно будет перезаписано.

const db = await Deno.openKv();
await db.set(["foo"], "bar");

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

watch<T extends readonly unknown[]>(keys: readonly [...[K in keyof T]: KvKey],options?: { raw?: boolean; },): ReadableStream<[K in keyof T]: KvEntryMaybe<T[K]>>

Наблюдать за изменениями заданных ключей в базе данных. Возвращаемый поток — ReadableStream, который испускает новое значение всякий раз, когда любой из отслеживаемых ключей меняет свою метку версии. Возвращаемое значение — массив объектов Deno.KvEntryMaybe с такой же длиной и порядком, что и массив keys. Если для данного ключа значения не существует, возвращаемый элемент будет иметь значение null и метку версии.

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

const db = await Deno.openKv();

const stream = db.watch([["foo"], ["bar"]]);
for await (const entries of stream) {
  entries[0].key; // ["foo"]
  entries[0].value; // "bar"
  entries[0].versionstamp; // "00000000000000010000"
  entries[1].key; // ["bar"]
  entries[1].value; // null
  entries[1].versionstamp; // null
}

Аргумент options может быть использован для указания дополнительных опций для операции наблюдения. Опция raw может быть использована для указания, должно ли испускаться новое значение всякий раз, когда происходит мутация любого из отслеживаемых ключей (даже если значение ключа не меняется, например, удаление удалённого ключа), или только тогда, когда записи изменились каким-то образом. При использовании raw: true, возможно, что поток время от времени будет испускать значения, даже если никаких мутаций не произошло ни по одному из отслеживаемых ключей. По умолчанию для этой опции установлено значение false.

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

Spec-Zone.ru

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