@ cloudhal/ 储存
Cloudhal的存储接口和适配器. 界面由最受限后端Cloudflare D1所塑造: 无交互式交易原子 batch() 只有,并且每个适配器执行D1的绑定/大小限制,所以本地行为与生产相符(ADR-0002).
| 导出 | 什麽 |
|---|---|
@cloudhal/storage | SqlDriver, (中文(简体) ), BlobStore,限制, migrate(), (中文(简体) ), migrations, (中文(简体) ), MemoryBlobStore, (中文(简体) ), SqlBlobStore (被封入SQL表格中的块), LayeredBlobStore (可写上上方的只读基), FetcherBlobStore (只读,超过一个工人) ASSETS 绑定) |
@cloudhal/storage/sqlite | BetterSqlite3Driver - 本地文件或 :memory: |
@cloudhal/storage/d1 | D1Driver - Cloudflare D1 装订 |
@cloudhal/storage/do-sqlite | DoSqliteDriver - 一个SQLite支持的持久对象 ctx.storage (RFC-0036号); batch 运行在 transactionSync |
@cloudhal/storage/fs | FsBlobStore 磁盘上的目录 |
@cloudhal/storage/r2 | R2BlobStore - Cloudflare R2 装订 |
@cloudhal/storage/testing | 配套套房 + 小型辅助工(createMiniflareD1, (中文(简体) ), createMiniflareR2, (中文(简体) ), createMiniflareDoSqlite; 需要vitest 3或以后, 以及帮助者( 可选择的同伴) 的小型纸张 |
import { migrate, migrations } from "@cloudhal/storage";
import { BetterSqlite3Driver } from "@cloudhal/storage/sqlite";
const sql = await BetterSqlite3Driver.open("cloudhal.db");
await migrate(sql, migrations);
await sql.batch([
{ sql: "UPDATE nodes SET rev = rev + 1, body = ? WHERE id = ? AND rev = ?", params: [body, id, rev] },
]);
迁移为 TypeScript 模块 migrations/ (Plain SQL strings) 所以他们捆绑工人 没有文件系统访问。 每次迁移都是作为一批原子进行的.
每个适配器都必须通过 describeSqlDriverConformance 编号 : describeBlobStoreConformance; D1, R2 和持久对象套件对 Miniflare( 正在工作) 运行, 因此不需要 Cloudflare 账户 . createMiniflareDoSqlite() 运行 DoSqliteDriver 在只测试的持久对象和手内 节点一个司机,每个电话都是一个请求, 超乎常存的连接,所以任何 SqlDriver 套件(包含分数)运行于持久对象 SQLite.
整个场地为一个持久对象(操场形状):
import { FetcherBlobStore, LayeredBlobStore, migrate, migrations, SqlBlobStore } from "@cloudhal/storage";
import { DoSqliteDriver } from "@cloudhal/storage/do-sqlite";
const sql = new DoSqliteDriver(ctx.storage);
await migrate(sql, migrations);
const blobs = new LayeredBlobStore(
new FetcherBlobStore(env.ASSETS, "demo/"), // read-only demo media
new SqlBlobStore(sql, { maxBytes: 8 * 1024 * 1024 }), // the session's own blobs
);