Skip to main content
Browse the docs

The developer docs are currently available in Chinese only. The SDK, the CLI and every code sample work the same in any language.

Chapter 6

存储

云端文档存储、本机存储、配额、数据迁移

两种存储

ctx.storage(权限 storage) ctx.deviceStorage(权限 storage.device)
在哪 云端,跟账号走,所有设备同步 这台电脑,按账号隔离,不上传
放什么 用户的学习数据(卡组、计划、记录) 凭据性质的东西(订阅地址、API 令牌)、只在本机有意义的缓存
配额 每插件每用户 ≤ 5000 条;每用户所有插件合计 ≤ 10000 条、≤ 20 MB 每插件 ≤ 512 KB

规则

  • 集合名:^[a-z][a-z0-9_-]{0,47}$;文档 id:^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$;单个文档 JSON ≤ 64 KB。
  • 超出配额抛 Plugin storage is full for this plugin:在 describe 里就按剩余空间拦截(官方闪卡插件的 cardRoom), 别让用户确认之后才失败。
  • 每个插件的存储彼此隔离;插件被移除时数据保留(用户再添加回来接着用)。
  • 所有写入都会让面板收到一次 data 事件。

数据设计建议

  1. 一个实体一个文档,别把一千张卡塞进一个文档(64 KB 上限、每次整份重写、并发时互相覆盖)。
  2. 列表的「数量」等派生值当缓存看(官方闪卡的 cardCount),以真实数据为准。
  3. 软删除:删除只记 deletedAt,保留 7 天可恢复,之后再真清 —— 撤销不依赖内存快照、断网也不丢数据。
  4. 按对象串行读改写(见命令 · 并发);跨设备仍是后写的赢,关键字段要能合并。

数据迁移(插件升级)

插件包不能带数据库迁移,数据格式由你自己演进:

  • 新字段一律可选,读旧数据时给默认值;
  • 需要改结构时在文档里写版本号 v,读取时按版本升级、写回新版本;
  • 绝不改集合名、文档 id 规则与插件 id:用户的数据按它们存着。