Códigos de erro e limites do armazenamento de dados

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

As solicitações que você faz aos armazenamentos de dados podem falhar devido a conectividade ruim ou outros problemas. Para lidar com erros e retornar mensagens com um código de erro, envolva as funções do armazenamento de dados em pcall().

Uma chamada de gravação falhada, como UpdateAsync(), significa que o servidor do jogo não recebeu uma resposta bem-sucedida. Isso não garante sempre que a gravação no backend não ocorreu. Em alguns cenários de falha, o estado final da gravação pode ser desconhecido para o chamador até que seja verificado com uma leitura subsequente sem cache.

Referência de códigos de erro

Código de erroNome do erroMensagem de erroNotas
101KeyNameEmptyO nome da chave não pode estar vazio.Verifique se a chave inserida na função do armazenamento de dados é uma string vazia.
102KeyNameLimitO nome da chave excede o limite de 50 caracteres.Verifique se a chave inserida na função do armazenamento de dados excede um comprimento de 50.
103ValueNotAllowedNão é permitido X em DataStore.Uma função de atualização ruim retornou um valor do tipo X.
104CantStoreValueNão é possível armazenar X em DataStore.A função de atualização retornou um valor do tipo X que não foi serializado.
105ValueTooLargeO valor serializado excede o limite de X.Se você estiver definindo um valor com SetAsync() ou UpdateAsync(), o comprimento serializado do valor não pode exceder o tamanho X. Para verificar o comprimento serializado dos dados, use JSONEncode().
106MaxValueInvalidMaxValue deve ser um inteiro.Se você estiver passando um valor máximo para GetSortedAsync() para um OrderedDataStore, ele deve ser um inteiro.
106MinValueInvalidMinValue deve ser um inteiro.Se você estiver passando um valor mínimo para GetSortedAsync() para um OrderedDataStore, ele deve ser um inteiro.
106PageSizeGreaterPageSize deve estar dentro de um intervalo pré-definido.O tamanho mínimo da página para um OrderedDataStore é 1.
106PageSizeLesserPageSize deve estar dentro de um intervalo pré-definido.O tamanho máximo da página para um OrderedDataStore é 100.
107MinMaxOrderInvalidMaxValue deve ser maior ou igual a MinValue.O valor máximo deve ser maior ou igual ao valor mínimo para GetSortedAsync().
301GetAsyncThrottleSolicitação GetAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação GetAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
302SetAsyncThrottleSolicitação SetAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação SetAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
303IncreAsyncThrottleSolicitação IncrementAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação IncrementAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
304UpdateAsyncThrottleSolicitação UpdateAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação UpdateAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
304TransformThrottleSolicitação UpdateAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação UpdateAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
305GetSortedThrottleSolicitação GetSorted descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação GetSortedAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
306RemoveAsyncThrottleSolicitação RemoveAsync descartada. A solicitação foi limitada, mas a fila estava cheia.A solicitação RemoveAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
401DataModelNoAccessSolicitação falhou. DataModel está inacessível enquanto a experiência está sendo encerrada.DataModel não está inicializado porque a experiência está sendo encerrada.
402LuaWebSrvsNoAccessSolicitação falhou. LuaWebService está inacessível enquanto a experiência está sendo encerrada.LuaWebService não está inicializado porque a experiência está sendo encerrada.
403StudioAccessToApisNotAllowedNão é possível gravar em DataStore a partir do Studio porque o acesso à API não está habilitado.O acesso à API deve estar ativo para usar armazenamentos de dados no Studio.
404InternalErrorOrderedDataStore não existe.O OrderedDataStore associado a esta solicitação não foi encontrado. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde.
501InternalErrorNão é possível analisar a resposta porque os dados podem estar corrompidos.O servidor não conseguiu analisar a resposta à sua solicitação. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde.
502RequestRejectedOs serviços da API rejeitaram a solicitação com erro X.O erro X ocorreu ao processar nos servidores do Roblox. Tente novamente mais tarde.
503InternalErrorA solicitação do armazenamento de dados foi bem-sucedida, mas a chave não foi encontrada.A chave solicitada não foi encontrada no armazenamento de dados. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde.
504InternalErrorA solicitação do armazenamento de dados foi bem-sucedida, mas a resposta não foi formatada corretamente.O servidor não conseguiu analisar a resposta à sua solicitação. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde.
505InternalErrorA solicitação do OrderedDataStore foi bem-sucedida, mas a resposta não foi formatada corretamente.O servidor não conseguiu analisar a resposta à sua solicitação OrderedDataStore. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde.
509OperationNotAllowedAs operações do armazenamento de dados estão bloqueadas enquanto estão sendo executadas em um RCC Pessoal para evitar possível corrupção de dados.As gravações do armazenamento de dados estão bloqueadas em canais RCC privados.
511AttributeSizeTooLargeO tamanho do atributo de metadados excede o limite de X.O tamanho dos metadados serializados excede o limite de X. O valor X é dinâmico. Se o tamanho mudar, o valor também muda.
512UserIdLimitExceededO tamanho do UserID excede o limite de X.O comprimento do array de IDs de usuário fornecido pelo usuário excede o limite de X.
513AttributeFormatErrorO formato do atributo userId é inválido.O ID do usuário fornecido não é um número.
513AttributeFormatErrorO formato dos metadados do atributo é inválido.Os metadados não são uma tabela.
GetVersionAsyncThrottleSolicitação GetVersionAsync descartada. A solicitação foi limitada.A solicitação GetVersionAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
GetVersionAtTimeAsyncThrottleSolicitação GetVersionAtTimeAsync descartada. A solicitação foi limitada.A solicitação GetVersionAtTimeAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
ListDataStoresAsyncThrottleSolicitação ListDataStoresAsync descartada. A solicitação foi limitada.A solicitação ListDataStoresAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
ListKeysAsyncThrottleSolicitação ListKeysAsync descartada. A solicitação foi limitada.A solicitação ListKeysAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
ListVersionsAsyncThrottleSolicitação ListVersionsAsync descartada. A solicitação foi limitada.A solicitação ListVersionsAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
RemoveVersionAsyncThrottleSolicitação RemoveVersionAsync descartada. A solicitação foi limitada.A solicitação RemoveVersionAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar as solicitações na taxa atual.
InvalidTimestampO timestamp deve ser positivo e não mais do que dez minutos no futuro.O timestamp fornecido para GetVersionAtTimeAsync() não era válido.
StandardReadExperienceThrottledA solicitação StandardRead foi limitada pelos limites da experiência.Uma solicitação para GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRead.
StandardWriteExperienceThrottledA solicitação StandardWrite foi limitada pelos limites da experiência.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardWrite.
StandardListExperienceThrottledA solicitação StandardList foi limitada pelos limites da experiência.Uma solicitação para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa da experiência StandardList.
StandardRemoveExperienceThrottledA solicitação StandardRemove foi limitada pelos limites da experiência.Uma solicitação para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRemove.
OrderedReadExperienceThrottledA solicitação OrderedRead foi limitada pelos limites da experiência.Uma solicitação para GetAsync(), BatchGetAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRead.
OrderedWriteExperienceThrottledA solicitação OrderedWrite foi limitada pelos limites da experiência.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedWrite.
OrderedListExperienceThrottledA solicitação OrderedList foi limitada pelos limites da experiência.Uma solicitação para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedList.
OrderedRemoveExperienceThrottledA solicitação OrderedRemove foi limitada pelos limites da experiência.Uma solicitação para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRemove.
StandardReadGameServerThrottledA solicitação StandardRead foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor do jogo StandardRead.
StandardWriteGameServerThrottledA solicitação StandardWrite foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor do jogo StandardWrite.
StandardListGameServerThrottledA solicitação StandardList foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa do servidor do jogo StandardList.
StandardRemoveGameServerThrottledA solicitação StandardRemove foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor do jogo StandardRemove.
OrderedReadGameServerThrottledA solicitação OrderedRead foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para GetAsync(), BatchGetAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor do jogo OrderedRead.
OrderedWriteGameServerThrottledA solicitação OrderedWrite foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor do jogo OrderedWrite.
OrderedListGameServerThrottledA solicitação OrderedList foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor do jogo OrderedList.
OrderedRemoveGameServerThrottledA solicitação OrderedRemove foi limitada pelos limites do servidor do jogo ou a fila de solicitações estava cheia.Uma solicitação para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor do jogo OrderedRemove.

Códigos de erro do servidor

Nome do erroMensagem de erroNotas
DatastoreDeletedO armazenamento de dados foi excluído.Uma operação no armazenamento de dados não pôde ocorrer porque o armazenamento de dados foi excluído anteriormente.
DatastoreThrottledA taxa de solicitação excede o máximo permitido para o datastore.Solicitações demais foram enviadas para um único armazenamento de dados.
InternalServerErrorOcorreu um erro interno do servidor.Erro ocasional nos servidores do Roblox. Tente novamente, idealmente com um retrocesso exponencial.
InvalidExclusiveStartKeyA chave de início exclusiva fornecida não é válida.A chave de início exclusiva (cursor) fornecida para uma operação de listagem, como ListKeysAsync(), não é válida.
InvalidPlaceO lugar fornecido é inválido.Sem ID de Universo correspondente para o lugar. Tente novamente mais tarde.
InvalidTargetO alvo fornecido é inválido.O nome da chave do armazenamento de dados ordenado excede o limite de 50 caracteres.
InvalidUniverseO universo fornecido é inválido.Sem ID de Lugar correspondente para o universo. Tente novamente mais tarde.
InvalidUserIdsOs IDs de usuário fornecidos têm um formato inválido.Falha ao analisar os IDs de usuário.
KeyThrottledA taxa de solicitação excede o máximo permitido para a chave.A taxa de solicitação excede a taxa de solicitação máxima permitida para uma única chave.
KeyNotFoundA chave solicitada não existe.A chave não existe.
N/ANão há páginas para avançar.Esse erro ocorre quando você chama Pages:AdvanceToNextPageAsync() na última página.
StandardReadExperienceThrottledA taxa de solicitação de leitura padrão excede o máximo permitido para a experiência.Uma solicitação para GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRead.
StandardWriteExperienceThrottledA taxa de solicitação de gravação padrão excede o máximo permitido para a experiência.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardWrite.
StandardListExperienceThrottledA taxa de solicitação de listagem padrão excede o máximo permitido para a experiência.Uma solicitação para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa da experiência StandardList.
StandardRemoveExperienceThrottledA taxa de solicitação de remoção padrão excede o máximo permitido para a experiência.Uma solicitação para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRemove.
OrderedReadExperienceThrottledA taxa de solicitação de leitura ordenada excede o máximo permitido para a experiência.Uma solicitação para GetAsync(), BatchGetAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRead.
OrderedWriteExperienceThrottledA taxa de solicitação de gravação ordenada excede o máximo permitido para a experiência.Uma solicitação para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedWrite.
OrderedListExperienceThrottledA taxa de solicitação de listagem ordenada excede o máximo permitido para a experiência.Uma solicitação para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedList.
OrderedRemoveExperienceThrottledA taxa de solicitação de remoção ordenada excede o máximo permitido para a experiência.Uma solicitação para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRemove.

Limites

Os modelos de dados têm limites. Se uma experiência exceder esses limites, o serviço automaticamente limita o uso do armazenamento de dados da experiência e causa que futuras solicitações sejam colocadas em uma das seguintes filas:

  • Definir
  • Conjunto ordenado
  • Obter
  • Obter ordenado

As solicitações em uma fila são tratadas na ordem em que são recebidas. A função chamada continua a ceder enquanto sua solicitação ainda estiver na fila. Se a chave do armazenamento de dados em si estiver limitada, a solicitação é colocada em uma fila, mas é temporariamente ignorada.

Cada fila tem um limite de 30 solicitações. Quando o limite de uma fila é atingido, as solicitações falham com um código de erro na faixa de 301-306, indicando que as solicitações foram descartadas completamente.

Limites de acesso

Os armazenamentos de dados estão sujeitos a limites de experiência e de nível de servidor. Os limites de nível de experiência escalam com o total de usuários simultâneos na experiência, enquanto os limites de nível de servidor são configuráveis e destinados a serem usados como uma ferramenta pelo criador.

Limites de experiência

Cada experiência tem um certo número de solicitações de armazenamento de dados permitidas com base no tipo de armazenamento de dados, tipo de solicitação e número de usuários simultâneos. Para cada tipo de armazenamento de dados e tipo de solicitação, o limite é compartilhado entre todas as funções listadas.

  • UpdateAsync() consome tanto do orçamento de solicitações de leitura quanto de gravação. Uma única chamada diminuirá ambos os limites.
  • O servidor do jogo e a Open Cloud compartilham um orçamento; o tráfego da Open Cloud pode ser limitado pelo uso dentro da experiência (e vice-versa). Veja Controlar limites de taxa para mais orientações.
Armazenamentos de dados padrão
Tipo de solicitaçãoAPI do servidor do jogoAPI da Open CloudLimites compartilhados (solicitações por minuto)
LeituraGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
Obter entrada do armazenamento de dados300 + usuáriosSimultâneos × 40
GravaçãoSetAsync()
IncrementAsync()
UpdateAsync()
Criar, atualizar, incrementar entrada do armazenamento de dados300 + usuáriosSimultâneos × 20
ListarListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
Listar Armazenamentos de Dados, Listar Entradas de Armazenamento de Dados, Listar Revisões de Entradas de Armazenamento de Dados300 + usuáriosSimultâneos × 2
RemoverRemoveAsync()Excluir Entrada do Armazenamento de Dados, Excluir Armazenamento de Dados, Restaurar Armazenamento de Dados300 + usuáriosSimultâneos × 40
Armazenamentos de dados ordenados
Tipo de solicitaçãoAPI do servidor do jogoAPI da Open CloudLimites compartilhados (solicitações por minuto)
LeituraGetAsync()
BatchGetAsync()
UpdateAsync()
Obter Entrada do Armazenamento de Dados Ordenado300 + usuáriosSimultâneos × 40
GravaçãoSetAsync()
IncrementAsync()
UpdateAsync()
Criar, atualizar, incrementar entrada do armazenamento de dados ordenado300 + usuáriosSimultâneos × 20
ListarGetSortedAsync()Listar Entradas do Armazenamento de Dados Ordenado300 + usuáriosSimultâneos × 2
RemoverRemoveAsync()Excluir Entrada do Armazenamento de Dados Ordenado300 + usuáriosSimultâneos × 40
Controlar limites de taxa

Como as solicitações da Open Cloud e do servidor do jogo são compartilhadas, é importante controlar independentemente quanto cada uma pode consumir do orçamento.

Servidor do jogo

Servidores individuais têm limites embutidos, conforme descrito acima. Use uma combinação de SetRateLimitForRequestType() e GetRequestBudgetForRequestType() para manter um controle detalhado sobre a contribuição de servidores individuais para o orçamento total.

Open Cloud

As solicitações da Open Cloud requerem uma solução externa de limitação de taxa. Recomendamos uma das seguintes abordagens:

  • (Simples) Adicione um curto tempo limite após cada solicitação, especialmente se estiver chamando a mesma API em um loop contínuo. Defina esse tempo limite igual a 60 / (consumo desejado do orçamento por minuto) segundos, como um limite superior. Observe que essa abordagem não permite que as solicitações sejam enviadas em explosões.
  • (Robusta) Implemente um limitador de taxa local usando a estratégia do balde furado.

Os seguintes exemplos de código Node.js incluem implementações de referência.

const apiKey = process.env.API_KEY;
if (!apiKey) {
throw new Error('A variável de ambiente API_KEY não está definida.');
}
const apiHeaderKey = 'x-api-key';
const universeId = '';
const dataStoreId = 'Inventory';
const baseUrl = 'https://apis.roblox.com/cloud/v2/';
// --- Configuração de limitação de taxa por operação (solicitações por minuto) ---
const LIST_RATE_PER_MIN = 60;
const GET_RATE_PER_MIN = 120;
const UPDATE_RATE_PER_MIN = 60;
// Intervalo superior por operação: 60 / (solicitações por min) segundos.
const LIST_INTERVAL_MS = (60 / LIST_RATE_PER_MIN) * 1000;
const GET_INTERVAL_MS = (60 / GET_RATE_PER_MIN) * 1000;
const UPDATE_INTERVAL_MS = (60 / UPDATE_RATE_PER_MIN) * 1000;
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
// Realiza a solicitação, depois espera o intervalo desta operação antes de retornar.
async function throttledFetch(url, options, intervalMs) {
const response = await fetch(url, options);
await sleep(intervalMs);
return response;
}
async function listEntries(universe, dataStore) {
const listPath = `universes/${universe}/data-stores/${dataStore}/entries`;
const url = baseUrl + listPath;
const response = await throttledFetch(url, {
headers: { [apiHeaderKey]: apiKey }
}, LIST_INTERVAL_MS);
return response.json();
}
async function getEntry(path) {
const url = baseUrl + path;
const response = await throttledFetch(url, {
headers: { [apiHeaderKey]: apiKey }
}, GET_INTERVAL_MS);
return response.json();
}
async function updateEntry(path, payload) {
const url = baseUrl + path;
const response = await throttledFetch(url, {
method: 'PATCH',
headers: {
[apiHeaderKey]: apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload) // O corpo deve ser uma string
}, UPDATE_INTERVAL_MS);
return response;
}
(async () => {
try {
const entries = await listEntries(universeId, dataStoreId);
for (const entry of entries.dataStoreEntries) {
const path = entry.path;
console.log(`\nProcessando entrada: ${path}`);
const currentData = await getEntry(path);
currentData.value.currency += 10;
const payload = { value: currentData.value };
const updateResponse = await updateEntry(path, payload);
console.log(`Status: ${updateResponse.status}`);
console.log(`Resposta: ${await updateResponse.text()}`);
}
} catch (error) {
console.error('Ocorreu um erro durante a execução:', error);
}
})();

Limites do servidor

Cada servidor tem um limite de taxa configurável para cada tipo de solicitação, com base no número de jogadores naquele servidor. Os servidores recebem um estouro inicial de orçamento de solicitação adicional quando são criados pela primeira vez. Use GetRequestBudgetForRequestType() para confirmar o número de solicitações de armazenamento de dados que o servidor atual pode fazer a qualquer momento.

Esses limites são configuráveis pelo criador usando a API SetRateLimitForRequestType(). Usando essa API, um criador pode configurar seus próprios limites de taxa de armazenamentos de dados para cada tipo de solicitação.

Os seguintes limites de taxa padrão se aplicam se a API não for chamada:

Armazenamentos de dados padrão
Tipo de solicitaçãoDataStoreRequestType EnumAPI do servidor do jogoSolicitações por minuto
LeituraStandardReadGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
60 + numPlayers × 40
GravaçãoStandardWriteSetAsync()
IncrementAsync()
UpdateAsync()
60 + numPlayers × 40
ListarStandardListListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
5 + numPlayers × 2
RemoverStandardRemoveRemoveAsync()60 + numPlayers × 40
RemoverVersão (Depreciado)RemoveVersionAsyncRemoveVersionAsync()5 + numPlayers × 2
Armazenamentos de dados ordenados
Tipo de solicitaçãoDataStoreRequestType EnumAPI do servidor do jogoSolicitações por minuto
LeituraOrderedReadGetAsync()
BatchGetAsync()
UpdateAsync()
60 + numPlayers × 40
GravaçãoOrderedWriteSetAsync()
IncrementAsync()
UpdateAsync()
30 + numPlayers × 5
ListarOrderedListGetSortedAsync()5 + numPlayers × 2
RemoverOrderedRemoveRemoveAsync()30 + numPlayers × 5

Limites de dados

Os armazenamentos de dados limitam quanto dados podem ser usados por entrada.

O nome do armazenamento de dados, o nome da chave e o escopo devem estar todos abaixo de um certo comprimento de caracteres. Use string.len() para verificar seu comprimento.

Os dados (valor da chave) também são armazenados como uma string, independentemente de seu tipo inicial. Você pode verificar o tamanho dos dados com a função JSONEncode(), que converte dados Luau em uma tabela JSON serializada.

ComponenteNúmero máximo de caracteres
Nome do armazenamento de dados50
Nome da chave50
Escopo50
Dados (valor da chave)4.194.304 por chave

Limites de metadados

Limites para o número de caracteres em metadados definidos pelo usuário.

ComponenteNúmero máximo de caracteres
Nome da chave50
Valor250
Pares chave-valor300

Limites de taxa

Limites de taxa por chave garantem que o desempenho seja ideal nos servidores do Roblox. Cada limite se aplica a cada chave individual em todos os servidores em uma experiência e é renovado ao longo do tempo.

O Roblox examina o uso da cota associada à chave nos últimos 60 segundos. Se o uso, incluindo a solicitação atual, estiver dentro do limite de taxa, a solicitação é aprovada. Se o uso exceder o limite, a solicitação é negada.

Tipo de solicitaçãoAPI do servidor do jogoAPI da Open CloudLimite
LeituraGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
ListVersionsAsync()
UpdateAsync()
Obter entrada do armazenamento de dados25 MB por minuto
GravaçãoSetAsync()
IncrementAsync()
UpdateAsync()
RemoveAsync()
Criar, atualizar, incrementar, remover entrada do armazenamento de dados4 MB por minuto

Além dos limites de taxa acima, o Roblox organiza dados em partições com base em um esquema interno. Como resultado, quando o servidor backend recebe um alto volume de solicitações para o mesmo armazenamento de dados, isso pode resultar em uma limitação adicional. Independentemente da causa, a limitação se manifesta como erros DatastoreThrottled ou KeyThrottled, dependendo se o limite de taxa foi excedido para um único armazenamento de dados ou uma chave. Essas mensagens de erro se aplicam tanto a armazenamentos de dados ordenados quanto padrão.

Limites de armazenamento

Para manter o armazenamento estável e escalável, os armazenamentos de dados usam um limite de nível de jogo em seu uso de armazenamento.

Esse limite consiste em uma alocação base para cada jogo mais uma alocação adicional com base no número de usuários vitalícios. Um usuário vitalício é qualquer usuário que tenha se juntado ao seu jogo pelo menos uma vez.

O limite de armazenamento é calculado usando a seguinte fórmula Limite total de armazenamento da versão mais recente = 500 MB + 1 MB × contagem de usuários vitalícios.

O uso de armazenamento é medido usando o tamanho comprimido da versão mais recente de cada chave. Os armazenamentos de dados comprimem automaticamente seus dados antes do armazenamento, portanto, evite pré-comprimir você mesmo. A pré-compressão adiciona sobrecarga de CPU desnecessária e pode reduzir a eficácia da compressão embutida dos armazenamentos de dados. Ao armazenar dados não comprimidos, você se beneficia automaticamente das melhorias nos algoritmos de compressão do Roblox e de futuras otimizações baseadas em esquema.

Apenas a versão mais recente de cada chave conta para o seu uso de armazenamento. Chaves excluídas e versões substituídas, embora ainda acessíveis por meio das APIs de versão durante seu período de retenção, não contam para o seu uso de armazenamento. No entanto, os armazenamentos de dados excluídos através do método Open Cloud DeleteDataStore continuam a contar para o uso de armazenamento durante seu período de processamento de exclusão de 30 dias, até que sejam removidos permanentemente.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.