Skip to main content
浏览文档目录
第 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:用户的数据按它们存着。