Cloudflare 儲存
Mastra 提供兩種 Cloudflare 儲存實作:
- Cloudflare KV(
CloudflareKVStorage):全域分散式、最終一致的 key-value store - Cloudflare Durable Objects(
CloudflareDOStorage):使用 Durable Objects、具強一致性並以 SQLite 為基礎的儲存實作
Cloudflare storage 不支援 observability domain。MastraStorageExporter 的 Trace 無法保存,而當 Cloudflare 是唯一 storage provider 時,Studio 的 observability 功能亦無法運作。如要啟用 observability,請使用 composite storage,將 observability 資料路由至 ClickHouse 等受支援的 Provider。
安裝安裝 的直接連結
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/cloudflare@latest
pnpm add @mastra/cloudflare@latest
yarn add @mastra/cloudflare@latest
bun add @mastra/cloudflare@latest
Cloudflare KV 儲存Cloudflare KV 儲存 的直接連結
KV 儲存實作使用 Cloudflare Workers KV,提供全域分散式的 serverless key-value store 方案。
用法用法 的直接連結
import { CloudflareKVStorage } from '@mastra/cloudflare/kv'
// --- Example 1: Using Workers Binding ---
const storageWorkers = new CloudflareKVStorage({
id: 'cloudflare-workers-storage',
bindings: {
threads: THREADS_KV, // KVNamespace binding for threads table
messages: MESSAGES_KV, // KVNamespace binding for messages table
// Add other tables as needed
},
keyPrefix: 'dev_', // Optional: isolate keys per environment
})
// --- Example 2: Using REST API ---
const storageRest = new CloudflareKVStorage({
id: 'cloudflare-rest-storage',
accountId: process.env.CLOUDFLARE_ACCOUNT_ID!, // Cloudflare Account ID
apiToken: process.env.CLOUDFLARE_API_TOKEN!, // Cloudflare API Token
namespacePrefix: 'dev_', // Optional: isolate namespaces per environment
})
參數參數 的直接連結
id:
bindings?:
accountId?:
apiToken?:
namespacePrefix?:
keyPrefix?:
補充說明補充說明 的直接連結
Schema 管理Schema 管理 的直接連結
儲存實作會自動處理 schema 的建立及更新,並建立以下資料表:
threads:儲存對話 threadmessages:儲存個別訊息metadata:儲存 thread 及訊息的其他 metadata
一致性及傳播一致性及傳播 的直接連結
Cloudflare KV 是最終一致的 store,意即寫入資料後,資料未必可以即時在所有區域使用。
Key 結構及 namespaceKey 結構及 namespace 的直接連結
Cloudflare KV 中的 key 由可設定的 prefix 及資料表特定格式組合而成(例如 threads:threadId)。
在 Workers 部署中,keyPrefix 用於隔離 namespace 內的資料;在 REST API 部署中,namespacePrefix 用於隔離不同環境或應用程式的整個 namespace。
Cloudflare Durable Objects 儲存Cloudflare Durable Objects 儲存 的直接連結
Durable Objects 儲存實作使用 Cloudflare Durable Objects,提供具強一致性並以 SQLite 為基礎的儲存。這非常適合要求 transaction 一致性及 SQL 查詢能力的應用程式。
用法用法 的直接連結
import { DurableObject } from 'cloudflare:workers'
import { CloudflareDOStorage } from '@mastra/cloudflare/do'
class AgentDurableObject extends DurableObject<Env> {
private storage: CloudflareDOStorage
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env)
this.storage = new CloudflareDOStorage({
sql: ctx.storage.sql,
tablePrefix: 'mastra_', // Optional: prefix for table names
})
}
async run() {
const memory = await this.storage.getStore('memory')
await memory?.saveThread({
thread: { id: 'thread-1', resourceId: 'user-1', title: 'Chat', metadata: {} },
})
}
}
參數參數 的直接連結
sql:
tablePrefix?:
disableInit?:
強一致性強一致性 的直接連結
Durable Objects 與 KV 不同,能提供強一致性保證。Durable Object 內的所有讀取及寫入操作都會依序執行,因此非常適合快速、長時間運行的 Agent。
SQL 能力SQL 能力 的直接連結
Durable Objects storage 的底層使用 SQLite,能夠高效地執行 key-value storage 無法做到的查詢、篩選及分頁。
Schema 管理Schema 管理 的直接連結
兩種儲存實作都會自動處理 schema 的建立及更新,並建立以下資料表:
threads:儲存對話 threadmessages:儲存個別訊息workflow_snapshot:儲存 Workflow 運行狀態
已棄用的 alias已棄用的 alias 的直接連結
為保持向後相容,以下 alias 仍可使用:
// These are deprecated - use CloudflareKVStorage and CloudflareDOStorage instead
import { CloudflareStore } from '@mastra/cloudflare/kv' // alias for CloudflareKVStorage
import { DOStore } from '@mastra/cloudflare/do' // alias for CloudflareDOStorage