用途
roblox-datastores 用于在 Roblox 平台上实现或调试玩家数据持久化,覆盖持久玩家数据、排行榜、数据迁移以及数据删除(RTBF/GDPR)请求等场景。其核心原则是:持久化必须保留在服务端执行,客户端不可直接调用数据存储;并发写入应使用纯函数式的 UpdateAsync 变换;写入出错后应先核对后端状态,再决定重试或补偿。
主要能力
- 存储选型:区分临时/高频/仅在服务器存活期间需要的数据(队列、大厅、限速计数器、短缓存)与需要长期持久化的数据,前者建议使用 MemoryStoreService,后者使用 DataStore 系列。
- 存储类型:OrderedDataStore 用于需要排序的数值查询(如排行榜),值必须为整数,无版本与元数据;标准 DataStore 通过 GetDataStore 与 DataStoreOptions 创建,支持版本化、用户自定义元数据、键列举以及更丰富的 API(ListKeysAsync、ListVersionsAsync、GetVersionAsync、GetVersionAtTimeAsync)。
- 玩家数据档案模式:在 PlayerAdded 时用 pcall + GetAsync 加载、与默认值合并、存入服务端表或档案对象,并按需应用 gamepass 权益;游戏过程中修改内存档案并定期自动保存,重要事件立即保存;PlayerRemoving / BindToClose / 角色死亡时做最终保存并清理内存数据。
- 序列化规则:只能存储 nil、布尔、数字(不允许 inf/-inf/nan)、有效 UTF-8 字符串、buffer 以及由上述类型组成的表;不接受函数、元表与循环引用,可用 HttpService:JSONEncode 在开发期预览。
- 排行榜:用 OrderedDataStore 写入(SetAsync 或 Increment),通过 GetSortedAsync 与 DataStorePages 分页迭代,批量读取可用 BatchGetAsync;仅支持数字,键为字符串,无版本化。
- 版本与恢复:标准 DataStore 的每次写入按 UTC 小时生成版本快照,后续同小时写入覆盖该小时版本;版本化备份在被取代后约 30 天过期,当前版本永不过期。可用 ListVersionsAsync、GetVersionAsync、GetVersionAtTimeAsync 检查,回滚方式是读取目标版本后重新 SetAsync。RemoveVersionAsync 已废弃,不应作为现行清理 API 使用。
- 缓存控制:GetAsync 结果默认本地缓存 4 秒,窗口内的重复读取不计入限额,写入会立即更新缓存;写入后核验或怀疑其他服务器导致陈旧时,可用 DataStoreGetOptions 的 UseCache = false 强制访问后端(会计入配额,应谨慎使用)。
- 限制与配额:存在体验级与单服务器级限制,UpdateAsync 同时计入读与写预算;可用 GetRequestBudgetForRequestType 在重操作前检查预算;队列容量为 30,满时返回节流错误。
- 可观测性:Creator Hub 的 Data Stores 监控面板展示按 API/状态的实时请求数、配额使用率、存储字节与上限;Data Stores Manager 可浏览键、查看元数据与版本历史、比较与回滚版本,并支持按前缀搜索和计划删除。
- 管理操作:批量删除/迁移可使用 Open Cloud Data Stores API 或官方 Batch Processor 工具;存储上限约为 500 MB + 1 MB × 历史用户数(按压缩后的最新版本大小计),不应在写入前自行预压缩。
使用方式
文档以官方资料与脚本示例结合的方式给出实践流程:先阅读对应主题的参考文件,再按其中的模式与代码样例实现,随后在负载下测试预算行为、尽早接入可观测与告警、用 Manager/Dashboard 观察存储增长。仓库 scripts/ 目录提供带成熟度标注的示例:SafeDataStore.lua 包含自动读取重试、显式写入状态、可选的幂等重放与非缓存核对;BudgetMonitor.lua 为实验性预算检查示例,需在专用测试体验中验证。任何具体类或属性的权威参考应查阅 Roblox 官方 Engine 参考文档。
适用场景
适用于需要持久保存玩家数据、维护排行榜、执行数据迁移、处理数据删除请求,以及需要理解版本恢复、缓存行为、限流与配额管理的 Roblox 服务端开发工作。
限制与注意事项
文档明确指出常见错误:从客户端/LocalScript 调用(立即报错且存在安全漏洞)、存储函数或元表等不可序列化数据、对竞争值使用 SetAsync(导致丢失更新或重复)、忽略节流错误反复请求、在正式场所硬编码 Studio API 访问、创建大量微小数据存储、依赖缓存读取做写入后核验、忘记 OrderedDataStore 无版本化且仅支持整数、未处理 RemoveAsync 已调用后的墓碑情况、以及超出存储配额而不监控。写入失败不可假定为“未发生变更”,UpdateAsync 的变换函数可能运行多次,因此不得让其中断或产生外部副作用,也绝不自动重放 IncrementAsync。Studio 如需访问后端 API 应使用专用测试体验,不要开启 Studio 会话读写生产数据。
其他
关于具体收费、价格、平台支持范围、实际使用效果与详细安装步骤,资料中暂未提供。