数据存储错误代码和限制

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

您对数据存储的请求可能由于连接不良或其他问题而失败。要处理错误并返回带有错误代码的消息,将数据存储功能包装在 pcall() 中。

例如,写入调用失败,如 UpdateAsync(),意味着游戏服务器未收到成功响应。这并不总能保证后端写入没有发生。在某些失败场景中,最终的写入状态可能在进行后续读取并且没有缓存时被调用者验证之前是未知的。

错误代码参考

错误代码错误名称错误消息备注
101KeyNameEmpty键名称不能为空。检查输入到数据存储功能的键是否为空字符串。
102KeyNameLimit键名称超过 50 个字符的限制。检查输入到数据存储功能的键是否超过 50 的长度。
103ValueNotAllowed不能在 DataStore 中允许 X一个错误的更新函数返回了类型为 X 的值。
104CantStoreValue不能在 DataStore 中存储 X更新函数返回了类型为 X 的值,该值没有序列化。
105ValueTooLarge序列化值超过 X 的限制。如果您使用 SetAsync()UpdateAsync() 设置值,则值的序列化长度不能超过大小 X。要检查数据的序列化长度,请使用 JSONEncode()
106MaxValueInvalidMaxValue 必须是一个整数。如果您要为 GetSortedAsync() 传递最大值,则必须是一个整数。
106MinValueInvalidMinValue 必须是一个整数。如果您要为 GetSortedAsync() 传递最小值,则必须是一个整数。
106PageSizeGreaterPageSize 必须在预定义范围内。OrderedDataStore 的最小页面大小为 1。
106PageSizeLesserPageSize 必须在预定义范围内。OrderedDataStore 的最大页面大小为 100。
107MinMaxOrderInvalidMaxValue 必须大于或等于 MinValue对于 GetSortedAsync(),最大值必须大于或等于最小值。
301GetAsyncThrottleGetAsync 请求被丢弃。请求被限制,但队列已满。GetAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
302SetAsyncThrottleSetAsync 请求被丢弃。请求被限制,但队列已满。SetAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
303IncreAsyncThrottleIncrementAsync 请求被丢弃。请求被限制,但队列已满。IncrementAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
304UpdateAsyncThrottleUpdateAsync 请求被丢弃。请求被限制,但队列已满。UpdateAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
304TransformThrottleUpdateAsync 请求被丢弃。请求被限制,但队列已满。UpdateAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
305GetSortedThrottleGetSorted 请求被丢弃。请求被限制,但队列已满。GetSortedAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
306RemoveAsyncThrottleRemoveAsync 请求被丢弃。请求被限制,但队列已满。RemoveAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
401DataModelNoAccess请求失败。DataModel 在体验关闭时无法访问。DataModel 未初始化,因为体验正在关闭。
402LuaWebSrvsNoAccess请求失败。LuaWebService 在体验关闭时无法访问。LuaWebService 未初始化,因为体验正在关闭。
403StudioAccessToApisNotAllowed无法从 Studio 向 DataStore 写入,因为 API 访问未启用。API 访问必须处于活动状态,以便在 Studio 中使用数据存储。
404InternalErrorOrderedDataStore 不存在。与此请求相关的 OrderedDataStore 未找到。这可能是数据损坏的迹象。请稍后重试。
501InternalError无法解析响应,因为数据可能已损坏。服务器无法解析对您请求的响应。这可能是数据损坏的迹象。请稍后重试。
502RequestRejectedAPI 服务拒绝了这次请求,错误为 X在处理 Roblox 服务器时发生了错误 X。请稍后重试。
503InternalError数据存储请求成功,但未找到键。请求的键在数据存储中未找到。这可能是数据损坏的迹象。请稍后重试。
504InternalError数据存储请求成功,但响应格式不正确。服务器无法解析对您请求的响应。这可能是数据损坏的迹象。请稍后重试。
505InternalErrorOrderedDataStore 请求成功,但响应格式不正确。服务器无法解析对您的 OrderedDataStore 请求的响应。这可能是数据损坏的迹象。请稍后重试。
509OperationNotAllowed数据存储操作在个人 RCC 上被阻止,以防止可能的数据损坏。在私人 RCC 通道上阻止数据存储写入。
511AttributeSizeTooLarge元数据属性大小超过 X 限制。序列化的元数据大小超过了 X 的限制。值 X 是动态的。如果大小更改,值也会更改。
512UserIdLimitExceededUserID 大小超过 X 限制。用户提供的用户 ID 数组的长度超过了 X 的限制。
513AttributeFormatError属性 userId 格式无效。提供的用户 ID 不是数字。
513AttributeFormatError属性元数据格式无效。元数据不是一个表。
GetVersionAsyncThrottleGetVersionAsync 请求被丢弃。请求被限制。GetVersionAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
GetVersionAtTimeAsyncThrottleGetVersionAtTimeAsync 请求被丢弃。请求被限制。GetVersionAtTimeAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
ListDataStoresAsyncThrottleListDataStoresAsync 请求被丢弃。请求被限制。ListDataStoresAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
ListKeysAsyncThrottleListKeysAsync 请求被丢弃。请求被限制。ListKeysAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
ListVersionsAsyncThrottleListVersionsAsync 请求被丢弃。请求被限制。ListVersionsAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
RemoveVersionAsyncThrottleRemoveVersionAsync 请求被丢弃。请求被限制。RemoveVersionAsync() 请求超过了最大队列大小,Roblox 无法以当前吞吐量处理请求。
InvalidTimestamp时间戳必须是正数,并且不能超过十分钟。提供给 GetVersionAtTimeAsync() 的时间戳无效。
StandardReadExperienceThrottledStandardRead 请求因体验限制而被限制。GetAsync()GetVersionAsync()GetVersionAtTimeAsync() 或对标准数据存储的 UpdateAsync() 的读取超出了 StandardRead 体验级别速率限制。
StandardWriteExperienceThrottledStandardWrite 请求因体验限制而被限制。SetAsync()IncrementAsync() 或对标准数据存储的 UpdateAsync() 的写入超出了 StandardWrite 体验级别速率限制。
StandardListExperienceThrottledStandardList 请求因体验限制而被限制。对标准数据存储的 ListKeysAsync()ListVersionsAsync()ListDataStoresAsync() 的请求超出了 StandardList 体验级别速率限制。
StandardRemoveExperienceThrottledStandardRemove 请求因体验限制而被限制。对标准数据存储的 RemoveAsync() 的请求超出了 StandardRemove 体验级别速率限制。
OrderedReadExperienceThrottledOrderedRead 请求因体验限制而被限制。GetAsync() 或对有序数据存储的 UpdateAsync() 的读取超出了 OrderedRead 体验级别速率限制。
OrderedWriteExperienceThrottledOrderedWrite 请求因体验限制而被限制。SetAsync()IncrementAsync() 或对有序数据存储的 UpdateAsync() 的写入超出了 OrderedWrite 体验级别速率限制。
OrderedListExperienceThrottledOrderedList 请求因体验限制而被限制。对有序数据存储的 GetSortedAsync() 的请求超出了 OrderedList 体验级别速率限制。
OrderedRemoveExperienceThrottledOrderedRemove 请求因体验限制而被限制。对有序数据存储的 RemoveAsync() 的请求超出了 OrderedRemove 体验级别速率限制。
StandardReadGameServerThrottledStandardRead 请求因游戏服务器限制或请求队列已满而被限制。GetAsync()GetVersionAsync()GetVersionAtTimeAsync() 或对标准数据存储的 UpdateAsync() 的读取超出了 StandardRead 游戏服务器级别速率限制。
StandardWriteGameServerThrottledStandardWrite 请求因游戏服务器限制或请求队列已满而被限制。SetAsync()IncrementAsync() 或对标准数据存储的 UpdateAsync() 的写入超出了 StandardWrite 游戏服务器级别速率限制。
StandardListGameServerThrottledStandardList 请求因游戏服务器限制或请求队列已满而被限制。对标准数据存储的 ListKeysAsync()ListVersionsAsync()ListDataStoresAsync() 的请求超出了 StandardList 游戏服务器级别速率限制。
StandardRemoveGameServerThrottledStandardRemove 请求因游戏服务器限制或请求队列已满而被限制。对标准数据存储的 RemoveAsync() 的请求超出了 StandardRemove 游戏服务器级别速率限制。
OrderedReadGameServerThrottledOrderedRead 请求因游戏服务器限制或请求队列已满而被限制。GetAsync() 或对有序数据存储的 UpdateAsync() 的读取超出了 OrderedRead 游戏服务器级别速率限制。
OrderedWriteGameServerThrottledOrderedWrite 请求因游戏服务器限制或请求队列已满而被限制。SetAsync()IncrementAsync() 或对有序数据存储的 UpdateAsync() 的写入超出了 OrderedWrite 游戏服务器级别速率限制。
OrderedListGameServerThrottledOrderedList 请求因游戏服务器限制或请求队列已满而被限制。对有序数据存储的 GetSortedAsync() 的请求超出了 OrderedList 游戏服务器级别速率限制。
OrderedRemoveGameServerThrottledOrderedRemove 请求因游戏服务器限制或请求队列已满而被限制。对有序数据存储的 RemoveAsync() 的请求超出了 OrderedRemove 游戏服务器级别速率限制。

服务器错误代码

错误名称错误消息备注
DatastoreDeleted数据存储已被删除。无法对数据存储执行操作,因为数据存储已被先前删除。
DatastoreThrottled请求速率超过了 datastore 允许的最大值。对单个数据存储发送了过多请求。
InternalServerError发生内部服务器错误。Roblox 服务器上偶尔发生错误。请稍后重试,最好采用指数退避。
InvalidExclusiveStartKey提供的独占起始键无效。提供给列表操作(如 ListKeysAsync())的独占起始键(光标)无效。
InvalidPlace提供的地点无效。地点没有匹配的宇宙 ID。请稍后重试。
InvalidTarget提供的目标无效。有序数据存储键名称超过了 50 个字符的限制。
InvalidUniverse提供的宇宙无效。宇宙没有匹配的地点 ID。请稍后重试。
InvalidUserIds提供的用户 ID 格式无效。解析用户 ID 失败。
KeyThrottled请求速率超过了允许的最大值。请求速率超过了单个键允许的最大请求速率。
KeyNotFound请求的键不存在。该键不存在。
N/A没有页面可以继续。当您在最后一页上调用 Pages:AdvanceToNextPageAsync() 时,会发生此错误。
StandardReadExperienceThrottled标准读取请求速率超过了体验允许的最大值。GetAsync()GetVersionAsync()GetVersionAtTimeAsync() 或对标准数据存储的 UpdateAsync() 的读取超出了 StandardRead 体验级别速率限制。
StandardWriteExperienceThrottled标准写入请求速率超过了体验允许的最大值。SetAsync()IncrementAsync() 或对标准数据存储的 UpdateAsync() 的写入超出了 StandardWrite 体验级别速率限制。
StandardListExperienceThrottled标准列表请求速率超过了体验允许的最大值。对标准数据存储的 ListKeysAsync()ListVersionsAsync()ListDataStoresAsync() 的请求超出了 StandardList 体验级别速率限制。
StandardRemoveExperienceThrottled标准删除请求速率超过了体验允许的最大值。对标准数据存储的 RemoveAsync() 的请求超出了 StandardRemove 体验级别速率限制。
OrderedReadExperienceThrottled有序读取请求速率超过了体验允许的最大值。GetAsync() 或对有序数据存储的 UpdateAsync() 的读取超出了 OrderedRead 体验级别速率限制。
OrderedWriteExperienceThrottled有序写入请求速率超过了体验允许的最大值。SetAsync()IncrementAsync() 或对有序数据存储的 UpdateAsync() 的写入超出了 OrderedWrite 体验级别速率限制。
OrderedListExperienceThrottled有序列表请求速率超过了体验允许的最大值。对有序数据存储的 GetSortedAsync() 的请求超出了 OrderedList 体验级别速率限制。
OrderedRemoveExperienceThrottled有序删除请求速率超过了体验允许的最大值。对有序数据存储的 RemoveAsync() 的请求超出了 OrderedRemove 体验级别速率限制。

限制

数据模型有 限制。如果体验超过这些限制,服务会自动限制体验的数据存储使用,并导致未来的请求被放置在以下某个队列中:

  • 设置
  • 有序设置
  • 获取
  • 有序获取

队列中的请求按接收顺序进行处理。调用的函数会继续等待,只要它的请求仍在队列中。如果数据存储键本身被限制,请求将被放入队列中,但会暂时跳过。

每个队列限制为 30 个请求。当队列达到限制时,请求将以 301-306 范围内的错误代码失败,表示请求已完全丢弃。

访问限制

数据存储受 体验和服务器级别限制 的限制。体验级别限制与体验中的总并发用户数成比例,而服务器级别限制是可配置的,旨在作为创建者的工具使用。

体验限制

每个体验允许根据数据存储类型、请求类型和并发用户数进行一定数量的数据存储请求。对于每种数据存储类型和请求类型,限制在所有列出功能之间共享。

注意,UpdateAsync() 将消耗读取和写入请求预算。一次调用将减少两个限制。

标准数据存储
请求类型函数每分钟请求数量
读取GetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
250 + concurrentUsers × 40
写入SetAsync()
IncrementAsync()
UpdateAsync()
250 + concurrentUsers × 20
列表ListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
10 + concurrentUsers × 2
删除RemoveAsync()100 + concurrentUsers × 40
有序数据存储
请求类型函数每分钟请求数量
读取GetAsync()
UpdateAsync()
250 + concurrentUsers × 40
写入SetAsync()
IncrementAsync()
UpdateAsync()
250 + concurrentUsers × 20
列表GetSortedAsync()100 + concurrentUsers × 2
删除RemoveAsync()100 + concurrentUsers × 40

服务器限制

每个服务器都有各请求类型的可配置速率限制,基于该服务器中的玩家数量。服务器在第一次创建时会获得一次性启动增加的请求预算。使用 GetRequestBudgetForRequestType() 确认当前服务器在任何给定时间可以进行的数据显示存储请求数量。

这些限制是 可由创建者配置 的,使用 SetRateLimitForRequestType() API。通过此 API,创建者可以为每个请求类型配置自己的数据存储速率限制。

如果未调用 API,则会应用以下 默认速率限制

标准数据存储
请求类型DataStoreRequestType 枚举函数每分钟请求数量
读取StandardReadGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
60 + numPlayers × 40
写入StandardWriteSetAsync()
IncrementAsync()
UpdateAsync()
60 + numPlayers × 40
列表StandardListListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
5 + numPlayers × 2
删除StandardRemoveRemoveAsync()60 + numPlayers × 40
RemoveVersion (已废弃)RemoveVersionAsyncRemoveVersionAsync()5 + numPlayers × 2
有序数据存储
请求类型DataStoreRequestType 枚举函数每分钟请求数量
读取OrderedReadGetAsync()
UpdateAsync()
60 + numPlayers × 40
写入OrderedWriteSetAsync()
IncrementAsync()
UpdateAsync()
30 + numPlayers × 5
列表OrderedListGetSortedAsync()5 + numPlayers × 2
删除OrderedRemoveRemoveAsync()30 + numPlayers × 5

数据限制

数据存储限制了每个条目可以使用的数据量。

数据存储名称、键名称和 范围 必须都在一定字符长度以内。使用 string.len() 检查它们的长度。

数据(键值)也作为字符串存储,无论其初始类型如何。您可以使用 JSONEncode() 函数检查数据的大小,该函数将 Luau 数据转换为序列化 JSON 表。

组件最大字符数
数据存储名称50
键名称50
范围50
数据(键值)每个键 4,194,304

元数据限制

用户定义的元数据字符数限制。

组件最大字符数
键名称50
250
键值对300

吞吐量限制

每个键的吞吐量限制确保 Roblox 服务器上的性能最佳。每个限制适用于体验中所有服务器上的每个单独键,并随着时间的推移而刷新。

Roblox 检查与该键相关的配额使用情况,时间范围为最近的 60 秒。如果包括当前请求在内的使用量在吞吐量限制范围内,请求将被批准。如果使用量超过了限制,请求将被拒绝。

请求类型限制
读取每分钟 25 MB
写入每分钟 4 MB

除了上述吞吐量限制外,Roblox 根据内部架构将数据组织成多个分区。因此,当后端服务器接收到对同一数据存储大量请求时,可能会导致进一步的限制。无论原因如何,限制都会表现为 DatastoreThrottledKeyThrottled 错误,具体取决于单个数据存储或键是否超出了吞吐量限制。这些错误消息适用于标准和有序数据存储。

存储限制

为了提供可扩展和稳定的存储体验,未来数据存储将实施您存储使用量的体验级别存储限制。

此限制将是您每个体验的基本限制与基于您体验中的生命周期用户数量的每用户限制的总和。生命周期用户是指任何至少加入过您体验一次的用户。

存储限制将使用公式 最新版本存储限制总计 = 100 MB + 1 MB * 生命周期用户数量 计算。

您删除或替换的任何键,即使通过版本 API 仍可访问,也不计入体验的存储使用量。但是,通过 Open Cloud DeleteDataStore 方法完全删除的整个数据存储,在其 30 天处理期间继续记入您的存储使用量,直到它们被永久删除。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。