コンテンツにスキップ
UniKVS
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

ストリームを使う

大きな値を ReadableStream で分割して読み書きする手順です。

大きなバイト列を扱う場合は、ストリームで分割して読み書きします。

ストリーム用のキーを定義する

ストリームを使うキーは StreamValue または Value で定義します。PlainValue のキーでは stream() を使えません。

import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";

const kvs = new unikvs.Builder<{
  logs: unikvs.StreamValue<Uint8Array>;
}>()
  .persist(new Memory())
  .build();

await kvs.open();

ストリームで書き込む

set() に ReadableStream を渡します。メモリーストレージのチャンク型は Uint8Array です。

const stream = new ReadableStream<Uint8Array>({
  start(controller) {
    controller.enqueue(new Uint8Array([0x01, 0x02]));
    controller.enqueue(new Uint8Array([0x03, 0x04]));
    controller.close();
  },
});

await kvs.set("logs", stream);

ストリームで読み取る

stream() の戻り値は ValueStream です。for await...of でチャンクを順に処理します。

for await (const chunk of await kvs.stream("logs")) {
  console.log(chunk); // Uint8Array
}

使い終わったストリームは破棄してください。await using による自動破棄か dispose() を使います。

await using vs = await kvs.stream("logs");
const reader = vs.getReader();
const { value } = await reader.read();
console.log(value);

対応状況を確認する

保存先によってストリームの対応状況とチャンク型が異なります。たとえば Local Storage 系と Cookie と Memcached と Cloudflare KV はストリームに対応しません。利用前に各パッケージリファレンスのデータ型を確認してください。

このページは役に立ちましたか?