Os pedidos que você faz para os armazenamentos de dados podem falhar devido a uma conectividade ruim ou outros problemas. Para lidar com erros e retornar mensagens com um código de erro, envolva funções de armazenamento de dados em pcall().
Uma chamada de gravação falha, como UpdateAsync(), significa que o servidor do jogo não recebeu uma resposta bem-sucedida. Não garante sempre que a gravação no back-end 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 erro | Nome do erro | Mensagem de erro | Notas | |
|---|---|---|---|---|
| 101 | KeyNameEmpty | O nome da chave não pode estar vazio. | Verifique se a chave inserida na função de armazenamento de dados é uma string vazia. | |
| 102 | KeyNameLimit | O nome da chave excede o limite de 50 caracteres. | Verifique se a chave inserida na função de armazenamento de dados excede 50 caracteres. | |
| 103 | ValueNotAllowed | Não é permitido X em DataStore. | Uma função de atualização ruim retornou um valor do tipo X. | |
| 104 | CantStoreValue | Não é possível armazenar X em DataStore. | A função de atualização retornou um valor do tipo X que não serializou. | |
| 105 | ValueTooLarge | O 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(). | |
| 106 | MaxValueInvalid | MaxValue deve ser um número inteiro. | Se você estiver passando um valor máximo para GetSortedAsync() para um OrderedDataStore, deve ser um número inteiro. | |
| 106 | MinValueInvalid | MinValue deve ser um número inteiro. | Se você estiver passando um valor mínimo para GetSortedAsync() para um OrderedDataStore, deve ser um número inteiro. | |
| 106 | PageSizeGreater | PageSize deve estar dentro de um intervalo predefinido. | O tamanho mínimo da página para um OrderedDataStore é 1. | |
| 106 | PageSizeLesser | PageSize deve estar dentro de um intervalo predefinido. | O tamanho máximo da página para um OrderedDataStore é 100. | |
| 107 | MinMaxOrderInvalid | MaxValue deve ser maior ou igual a MinValue. | O valor máximo deve ser maior ou igual ao valor mínimo para GetSortedAsync(). | |
| 301 | GetAsyncThrottle | Pedido de GetAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido GetAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 302 | SetAsyncThrottle | Pedido de SetAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido SetAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 303 | IncreAsyncThrottle | Pedido de IncrementAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido IncrementAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 304 | UpdateAsyncThrottle | Pedido de UpdateAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido UpdateAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 304 | TransformThrottle | Pedido de UpdateAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido UpdateAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 305 | GetSortedThrottle | Pedido de GetSorted descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido GetSortedAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 306 | RemoveAsyncThrottle | Pedido de RemoveAsync descartado. Pedido foi estrangulado, mas a fila estava cheia. | O pedido RemoveAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | |
| 401 | DataModelNoAccess | Pedido falhou. DataModel está inacessível enquanto a experiência está desligando. | DataModel não está inicializado porque a experiência está desligando. | |
| 402 | LuaWebSrvsNoAccess | Pedido falhou. LuaWebService está inacessível enquanto a experiência está desligando. | LuaWebService não está inicializado porque a experiência está desligando. | |
| 403 | StudioAccessToApisNotAllowed | Não é possível gravar no DataStore do Studio porque o acesso à API não está habilitado. | O acesso à API deve estar ativo para usar os armazenamentos de dados no Studio. | |
| 404 | InternalError | OrderedDataStore não existe. | O OrderedDataStore associado a este pedido não foi encontrado. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde. | |
| 501 | InternalError | Não é possível analisar a resposta porque os dados podem estar corrompidos. | O servidor não conseguiu analisar a resposta ao seu pedido. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde. | |
| 502 | RequestRejected | Os serviços da API rejeitaram o pedido com erro X. | O erro X ocorreu ao processar nos servidores Roblox. Tente novamente mais tarde. | |
| 503 | InternalError | O pedido de armazenamento de dados foi bem-sucedido, 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. | |
| 504 | InternalError | O pedido de armazenamento de dados foi bem-sucedido, mas a resposta não estava formatada corretamente. | O servidor não conseguiu analisar a resposta ao seu pedido. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde. | |
| 505 | InternalError | O pedido de OrderedDataStore foi bem-sucedido, mas a resposta não estava formatada corretamente. | O servidor não conseguiu analisar a resposta ao seu pedido OrderedDataStore. Isso pode ser um sinal de corrupção de dados. Tente novamente mais tarde. | |
| 509 | OperationNotAllowed | As operações de armazenamento de dados estão bloqueadas enquanto executando em um RCC Pessoal para evitar possível corrupção de dados. | As gravações de armazenamento de dados são bloqueadas em canais RCC privados. | |
| 511 | AttributeSizeTooLarge | O tamanho do atributo de metadados excede o limite de X. | O tamanho do metadado serializado excede o limite de X. O valor X é dinâmico. Se o tamanho mudar, o valor também muda. | |
| 512 | UserIdLimitExceeded | O tamanho de UserID excede o limite de X. | O comprimento do array de IDs de usuários fornecidos pelo usuário excede o limite de X. | |
| 513 | AttributeFormatError | O formato do atributo userId é inválido. | O ID do usuário fornecido não é um número. | |
| 513 | AttributeFormatError | O formato do atributo de metadados é inválido. | Os metadados não são uma tabela. | |
| GetVersionAsyncThrottle | Pedido de GetVersionAsync descartado. Pedido foi estrangulado. | O pedido GetVersionAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| GetVersionAtTimeAsyncThrottle | Pedido de GetVersionAtTimeAsync descartado. Pedido foi estrangulado. | O pedido GetVersionAtTimeAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| ListDataStoresAsyncThrottle | Pedido de ListDataStoresAsync descartado. Pedido foi estrangulado. | O pedido ListDataStoresAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| ListKeysAsyncThrottle | Pedido de ListKeysAsync descartado. Pedido foi estrangulado. | O pedido ListKeysAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| ListVersionsAsyncThrottle | Pedido de ListVersionsAsync descartado. Pedido foi estrangulado. | O pedido ListVersionsAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| RemoveVersionAsyncThrottle | Pedido de RemoveVersionAsync descartado. Pedido foi estrangulado. | O pedido RemoveVersionAsync() excedeu o tamanho máximo da fila e o Roblox não consegue processar os pedidos na largura de banda atual. | ||
| InvalidTimestamp | O timestamp deve ser positivo e não mais do que dez minutos no futuro. | O timestamp fornecido para GetVersionAtTimeAsync() não era válido. | ||
| StandardReadExperienceThrottled | O pedido StandardRead foi estrangulado pelos limites da experiência. | Um pedido 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. | ||
| StandardWriteExperienceThrottled | O pedido StandardWrite foi estrangulado pelos limites da experiência. | Um pedido 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. | ||
| StandardListExperienceThrottled | O pedido StandardList foi estrangulado pelos limites da experiência. | Um pedido para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa da experiência StandardList. | ||
| StandardRemoveExperienceThrottled | O pedido StandardRemove foi estrangulado pelos limites da experiência. | Um pedido para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRemove. | ||
| OrderedReadExperienceThrottled | O pedido OrderedRead foi estrangulado pelos limites da experiência. | Um pedido para GetAsync() ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRead. | ||
| OrderedWriteExperienceThrottled | O pedido OrderedWrite foi estrangulado pelos limites da experiência. | Um pedido para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedWrite. | ||
| OrderedListExperienceThrottled | O pedido OrderedList foi estrangulado pelos limites da experiência. | Um pedido para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedList. | ||
| OrderedRemoveExperienceThrottled | O pedido OrderedRemove foi estrangulado pelos limites da experiência. | Um pedido para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRemove. | ||
| StandardReadGameServerThrottled | O pedido StandardRead foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou a leitura de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor de jogo StandardRead. | ||
| StandardWriteGameServerThrottled | O pedido StandardWrite foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor de jogo StandardWrite. | ||
| StandardListGameServerThrottled | O pedido StandardList foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa do servidor de jogo StandardList. | ||
| StandardRemoveGameServerThrottled | O pedido StandardRemove foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa do servidor de jogo StandardRemove. | ||
| OrderedReadGameServerThrottled | O pedido OrderedRead foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para GetAsync() ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor de jogo OrderedRead. | ||
| OrderedWriteGameServerThrottled | O pedido OrderedWrite foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor de jogo OrderedWrite. | ||
| OrderedListGameServerThrottled | O pedido OrderedList foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor de jogo OrderedList. | ||
| OrderedRemoveGameServerThrottled | O pedido OrderedRemove foi estrangulado pelos limites do servidor de jogo ou a fila de pedidos estava cheia. | Um pedido para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa do servidor de jogo OrderedRemove. |
Códigos de erro do servidor
| Nome do erro | Mensagem de erro | Notas |
|---|---|---|
| DatastoreDeleted | O armazenamento de dados foi excluído. | Uma operação no armazenamento de dados não pôde ocorrer porque o armazenamento foi previamente excluído. |
| DatastoreThrottled | A taxa de pedidos excede o máximo permitido para o datastore. | Pedidos demais foram enviados para um único armazenamento de dados. |
| InternalServerError | Ocorreu um erro interno do servidor. | Erro ocasional nos servidores Roblox. Tente novamente, idealmente com retrocesso exponencial. |
| InvalidExclusiveStartKey | A chave de início exclusivo fornecida não é válida. | A chave de início exclusivo (cursor) fornecida para uma operação de lista, como ListKeysAsync(), não é válida. |
| InvalidPlace | O lugar fornecido é inválido. | Nenhum ID de Universo correspondente para o lugar. Tente novamente mais tarde. |
| InvalidTarget | O alvo fornecido é inválido. | O nome da chave do armazenamento de dados ordenado excede o limite de 50 caracteres. |
| InvalidUniverse | O universo fornecido é inválido. | Nenhum ID de Lugar correspondente para o universo. Tente novamente mais tarde. |
| InvalidUserIds | Os IDs de usuário fornecidos têm um formato inválido. | Falha ao analisar os IDs de usuário. |
| KeyThrottled | A taxa de pedidos excede o máximo permitido para a chave. | A taxa de pedidos excede a taxa de pedido máxima permitida para uma única chave. |
| KeyNotFound | A chave solicitada não existe. | A chave não existe. |
| N/A | Não há páginas para avançar. | Esse erro ocorre quando você chama Pages:AdvanceToNextPageAsync() na última página. |
| StandardReadExperienceThrottled | A taxa de pedido de leitura padrão excede o máximo permitido para a experiência. | Um pedido 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. |
| StandardWriteExperienceThrottled | A taxa de pedido de gravação padrão excede o máximo permitido para a experiência. | Um pedido 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. |
| StandardListExperienceThrottled | A taxa de pedido de lista padrão excede o máximo permitido para a experiência. | Um pedido para ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() em armazenamentos de dados padrão excedeu o limite de taxa da experiência StandardList. |
| StandardRemoveExperienceThrottled | A taxa de pedido de remoção padrão excede o máximo permitido para a experiência. | Um pedido para RemoveAsync() em um armazenamento de dados padrão excedeu o limite de taxa da experiência StandardRemove. |
| OrderedReadExperienceThrottled | A taxa de pedido de leitura ordenada excede o máximo permitido para a experiência. | Um pedido para GetAsync() ou a leitura de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRead. |
| OrderedWriteExperienceThrottled | A taxa de pedido de gravação ordenada excede o máximo permitido para a experiência. | Um pedido para SetAsync(), IncrementAsync(), ou a gravação de UpdateAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedWrite. |
| OrderedListExperienceThrottled | A taxa de pedido de lista ordenada excede o máximo permitido para a experiência. | Um pedido para GetSortedAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedList. |
| OrderedRemoveExperienceThrottled | A taxa de pedido de remoção ordenada excede o máximo permitido para a experiência. | Um pedido para RemoveAsync() em um armazenamento de dados ordenado excedeu o limite de taxa da experiência OrderedRemove. |
Limites
Modelos de dados têm limites. Se uma experiência exceder esses limites, o serviço estrangula automaticamente o uso de armazenamento de dados da experiência e faz com que futuros pedidos sejam colocados em uma das seguintes filas:
- Definir
- Conjunto ordenado
- Obter
- Obter ordenado
Os pedidos em uma fila são tratados na ordem em que são recebidos. A função chamada continua a ceder enquanto seu pedido ainda estiver na fila. Se a própria chave do armazenamento de dados estiver estrangulada, o pedido é colocado em uma fila, mas é temporariamente ignorado.
Cada fila tem um limite de 30 pedidos. Quando o limite de uma fila é atingido, os pedidos falham com um código de erro no intervalo de 301-306, indicando que os pedidos foram descartados completamente.
Limites de acesso
Armazenamentos de dados estão sujeitos a limites de experiência e de servidor. Limites de nível de experiência escalam com o número total de usuários simultâneos na experiência, enquanto limites de nível de servidor são configuráveis e devem ser usados como uma ferramenta pelo criador.
Limites de experiência
Cada experiência tem um número permitido de pedidos de armazenamento de dados com base no tipo de armazenamento de dados, tipo de pedido e número de usuários simultâneos. Para cada tipo de armazenamento de dados e tipo de pedido, o limite é compartilhado entre todas as funções listadas.
Observe que UpdateAsync() consome dos orçamentos de pedidos de leitura e de gravação. Uma única chamada irá decrementar ambos os limites.
Armazenamentos de dados padrão
| Tipo de pedido | Funções | Pedidos por minuto |
|---|---|---|
| Leitura | GetAsync() GetVersionAsync() GetVersionAtTimeAsync() UpdateAsync() | 250 + usuáriosConcorrentes × 40 |
| Gravação | SetAsync() IncrementAsync() UpdateAsync() | 250 + usuáriosConcorrentes × 20 |
| Listar | ListDataStoresAsync() ListKeysAsync() ListVersionsAsync() | 10 + usuáriosConcorrentes × 2 |
| Remoção | RemoveAsync() | 100 + usuáriosConcorrentes × 40 |
Armazenamentos de dados ordenados
| Tipo de pedido | Funções | Pedidos por minuto |
|---|---|---|
| Leitura | GetAsync() UpdateAsync() | 250 + usuáriosConcorrentes × 40 |
| Gravação | SetAsync() IncrementAsync() UpdateAsync() | 250 + usuáriosConcorrentes × 20 |
| Listar | GetSortedAsync() | 100 + usuáriosConcorrentes × 2 |
| Remoção | RemoveAsync() | 100 + usuáriosConcorrentes × 40 |
Limites de servidor
Cada servidor tem um limite de taxa configurável para cada tipo de pedido, com base no número de jogadores nesse servidor. Os servidores recebem um aumento único de orçamento adicional de pedidos quando são criados pela primeira vez. Use GetRequestBudgetForRequestType() para confirmar o número de pedidos 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 esta API, um criador pode configurar seus próprios limites de taxa de armazenamento de dados para cada tipo de pedido.
Os seguintes limites de taxa padrão se aplicam se a API não for chamada:
Armazenamentos de dados padrão
| Tipo de pedido | Enum DataStoreRequestType | Funções | Pedidos por minuto |
|---|---|---|---|
| Leitura | StandardRead | GetAsync() GetVersionAsync() GetVersionAtTimeAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Gravação | StandardWrite | SetAsync() IncrementAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Listar | StandardList | ListDataStoresAsync() ListKeysAsync() ListVersionsAsync() | 5 + numPlayers × 2 |
| Remoção | StandardRemove | RemoveAsync() | 60 + numPlayers × 40 |
| RemoverVersão (obsoleto) | RemoveVersionAsync | RemoveVersionAsync() | 5 + numPlayers × 2 |
Armazenamentos de dados ordenados
| Tipo de pedido | Enum DataStoreRequestType | Funções | Pedidos por minuto |
|---|---|---|---|
| Leitura | OrderedRead | GetAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Gravação | OrderedWrite | SetAsync() IncrementAsync() UpdateAsync() | 30 + numPlayers × 5 |
| Listar | OrderedList | GetSortedAsync() | 5 + numPlayers × 2 |
| Remoção | OrderedRemove | RemoveAsync() | 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 escopo devem estar todos abaixo de um determinado 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.
| Componente | Número máximo de caracteres |
|---|---|
| Nome do armazenamento de dados | 50 |
| Nome da chave | 50 |
| Escopo | 50 |
| Dados (valor da chave) | 4.194.304 por chave |
Limites de metadados
Limites ao número de caracteres em metadados definidos pelo usuário.
| Componente | Número máximo de caracteres |
|---|---|
| Nome da chave | 50 |
| Valor | 250 |
| Pares chave-valor | 300 |
Limites de capacidade
Limites de capacidade por chave garantem que o desempenho seja ótimo nos servidores Roblox. Cada limite se aplica a cada chave única em todos os servidores em uma experiência e é atualizado ao longo do tempo.
Roblox examina o uso de cota associado à chave nos últimos 60 segundos. Se o uso, incluindo o pedido atual, estiver dentro do limite de capacidade, o pedido é aprovado. Se o uso exceder o limite, o pedido é negado.
| Tipo de pedido | Limite |
|---|---|
| Leitura | 25 MB por minuto |
| Gravação | 4 MB por minuto |
Além dos limites de capacidade acima, o Roblox organiza dados em partições com base em um esquema interno. Como resultado, quando o servidor back-end recebe um alto volume de pedidos para o mesmo armazenamento de dados, isso pode resultar em estrangulamento adicional. Independentemente da causa, o estrangulamento se manifesta como erros DatastoreThrottled ou KeyThrottled, dependendo se o limite de capacidade foi excedido para um único armazenamento de dados ou para uma chave. Essas mensagens de erro se aplicam tanto a armazenamentos de dados ordenados quanto padrão.
Limites de armazenamento
No futuro, para fornecer uma experiência de armazenamento escalável e estável, os armazenamentos de dados implementarão um limite de armazenamento de nível de experiência sobre o seu uso de armazenamento.
Esse limite será a soma de um limite base para cada uma de suas experiências e um limite por usuário baseado no número de usuários vitalícios em sua experiência. Um usuário vitalício é qualquer usuário que tenha ingressado em sua experiência pelo menos uma vez.
O limite de armazenamento será calculado usando a fórmula Total do limite de armazenamento da versão mais recente = 100 MB + 1 MB * contagem de usuários vitalícios.
Quaisquer chaves que você excluir ou substituir, mesmo se ainda acessíveis por meio das APIs de versão, não contam para o uso de armazenamento de sua experiência. No entanto, armazenamentos de dados inteiros excluídos via o método Open Cloud DeleteDataStore continuam a contar para o uso de armazenamento durante o seu período de processamento de 30 dias, até serem excluídos permanentemente.