Codes d'erreur et limites de la base de données

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Les requêtes que vous faites aux bases de données peuvent échouer en raison d'une mauvaise connectivité ou d'autres problèmes. Pour gérer les erreurs et renvoyer des messages avec un code d'erreur, enveloppez les fonctions de la base de données dans pcall().

Un appel d'écriture échoué, tel que UpdateAsync(), signifie que le serveur de jeu n'a pas reçu de réponse réussie. Cela ne garantit pas toujours que l'écriture en arrière-plan n'a pas eu lieu. Dans certains scénarios d'échec, l'état d'écriture final peut être inconnu pour l'appelant jusqu'à ce qu'il soit vérifié avec une lecture de suivi sans cache.

Référence des codes d'erreur

Code d'erreurNom d'erreurMessage d'erreurRemarques
101KeyNameEmptyLe nom de la clé ne peut pas être vide.Vérifiez si la clé entrée dans la fonction de la base de données est une chaîne vide.
102KeyNameLimitLe nom de la clé dépasse la limite de 50 caractères.Vérifiez si la clé entrée dans la fonction de la base de données dépasse une longueur de 50.
103ValueNotAllowedNe peut pas autoriser X dans DataStore.Une mauvaise fonction de mise à jour a renvoyé une valeur de type X.
104CantStoreValueNe peut pas stocker X dans DataStore.La fonction de mise à jour a renvoyé une valeur de type X qui n'a pas pu être sérialisée.
105ValueTooLargeLa valeur sérialisée dépasse la limite de X.Si vous définissez une valeur avec SetAsync() ou UpdateAsync(), la longueur sérialisée de la valeur ne peut pas dépasser la taille X. Pour vérifier la longueur sérialisée des données, utilisez JSONEncode().
106MaxValueInvalidMaxValue doit être un entier.Si vous passez une valeur maximale à GetSortedAsync() pour un OrderedDataStore, cela doit être un entier.
106MinValueInvalidMinValue doit être un entier.Si vous passez une valeur minimale à GetSortedAsync() pour un OrderedDataStore, cela doit être un entier.
106PageSizeGreaterPageSize doit être dans une plage prédéfinie.La taille de page minimale pour un OrderedDataStore est 1.
106PageSizeLesserPageSize doit être dans une plage prédéfinie.La taille de page maximale pour un OrderedDataStore est 100.
107MinMaxOrderInvalidMaxValue doit être supérieur ou égal à MinValue.La valeur maximale doit être supérieure ou égale à la valeur minimale pour GetSortedAsync().
301GetAsyncThrottleRequête GetAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête GetAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
302SetAsyncThrottleRequête SetAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête SetAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
303IncreAsyncThrottleRequête IncrementAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête IncrementAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
304UpdateAsyncThrottleRequête UpdateAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête UpdateAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
304TransformThrottleRequête UpdateAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête UpdateAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
305GetSortedThrottleRequête GetSorted abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête GetSortedAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
306RemoveAsyncThrottleRequête RemoveAsync abandonnée. La requête a été limitée mais la file d'attente était pleine.La requête RemoveAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
401DataModelNoAccessLa requête a échoué. DataModel est inaccessible pendant que l'expérience est en train de se fermer.DataModel est non initialisé car l'expérience est en train de se fermer.
402LuaWebSrvsNoAccessLa requête a échoué. LuaWebService est inaccessible pendant que l'expérience est en train de se fermer.LuaWebService est non initialisé car l'expérience est en train de se fermer.
403StudioAccessToApisNotAllowedImpossible d'écrire dans DataStore depuis Studio car l'accès à l'API n'est pas activé.L'accès à l'API doit être actif pour utiliser les bases de données dans Studio.
404InternalErrorOrderedDataStore n'existe pas.Le OrderedDataStore associé à cette requête n'a pas été trouvé. Cela pourrait être un signe de corruption des données. Réessayez plus tard.
501InternalErrorImpossible de parser la réponse car les données pourraient être corrompues.Le serveur n'a pas pu parser la réponse à votre requête. Cela pourrait être un signe de corruption des données. Réessayez plus tard.
502RequestRejectedLes services d'API ont rejeté la requête avec l'erreur X.L'erreur X s'est produite lors du traitement sur les serveurs Roblox. Réessayez plus tard.
503InternalErrorLa requête de la base de données était réussie, mais la clé n'a pas été trouvée.La clé demandée n'a pas été trouvée dans la base de données. Cela pourrait être un signe de corruption des données. Réessayez plus tard.
504InternalErrorLa requête de la base de données était réussie, mais la réponse n'était pas correctement formatée.Le serveur n'a pas pu parser la réponse à votre requête. Cela pourrait être un signe de corruption des données. Réessayez plus tard.
505InternalErrorLa requête OrderedDataStore était réussie, mais la réponse n'était pas correctement formatée.Le serveur n'a pas pu parser la réponse à votre requête OrderedDataStore. Cela pourrait être un signe de corruption des données. Réessayez plus tard.
509OperationNotAllowedLes opérations de base de données sont bloquées lorsqu'elles sont exécutées sur un RCC Personnel pour prévenir une possible corruption des données.Les écritures de la base de données sont bloquées sur les canaux RCC privés.
511AttributeSizeTooLargeLa taille de l'attribut de métadonnées dépasse la limite de X.La taille des métadonnées sérialisées dépasse la limite de X. La valeur X est dynamique. Si la taille change, la valeur change aussi.
512UserIdLimitExceededLa taille de UserID dépasse la limite de X.La longueur du tableau des IDs d'utilisateur fourni par l'utilisateur dépasse la limite de X.
513AttributeFormatErrorLe format de l'attribut userId est invalide.L'ID d'utilisateur fourni n'est pas un nombre.
513AttributeFormatErrorLe format des métadonnées de l'attribut est invalide.Les métadonnées ne sont pas un tableau.
GetVersionAsyncThrottleRequête GetVersionAsync abandonnée. La requête a été limitée.La requête GetVersionAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
GetVersionAtTimeAsyncThrottleRequête GetVersionAtTimeAsync abandonnée. La requête a été limitée.La requête GetVersionAtTimeAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
ListDataStoresAsyncThrottleRequête ListDataStoresAsync abandonnée. La requête a été limitée.La requête ListDataStoresAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
ListKeysAsyncThrottleRequête ListKeysAsync abandonnée. La requête a été limitée.La requête ListKeysAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
ListVersionsAsyncThrottleRequête ListVersionsAsync abandonnée. La requête a été limitée.La requête ListVersionsAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
RemoveVersionAsyncThrottleRequête RemoveVersionAsync abandonnée. La requête a été limitée.La requête RemoveVersionAsync() a dépassé la taille maximale de la file d'attente et Roblox n'est pas en mesure de traiter les requêtes au débit actuel.
InvalidTimestampLe timestamp doit être positif et ne pas dépasser dix minutes dans le futur.Le timestamp fourni à GetVersionAtTimeAsync() n'était pas valide.
StandardReadExperienceThrottledLa requête StandardRead a été limitée par des limites d'expérience.Une requête à GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou la lecture de UpdateAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardRead.
StandardWriteExperienceThrottledLa requête StandardWrite a été limitée par des limites d'expérience.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardWrite.
StandardListExperienceThrottledLa requête StandardList a été limitée par des limites d'expérience.Une requête à ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() sur des bases de données standard a dépassé la limite de taux d'expérience StandardList.
StandardRemoveExperienceThrottledLa requête StandardRemove a été limitée par des limites d'expérience.Une requête à RemoveAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardRemove.
OrderedReadExperienceThrottledLa requête OrderedRead a été limitée par des limites d'expérience.Une requête à GetAsync() ou la lecture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedRead.
OrderedWriteExperienceThrottledLa requête OrderedWrite a été limitée par des limites d'expérience.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedWrite.
OrderedListExperienceThrottledLa requête OrderedList a été limitée par des limites d'expérience.Une requête à GetSortedAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedList.
OrderedRemoveExperienceThrottledLa requête OrderedRemove a été limitée par des limites d'expérience.Une requête à RemoveAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedRemove.
StandardReadGameServerThrottledLa requête StandardRead a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou la lecture de UpdateAsync() sur une base de données standard a dépassé la limite de taux de serveur de jeu StandardRead.
StandardWriteGameServerThrottledLa requête StandardWrite a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données standard a dépassé la limite de taux de serveur de jeu StandardWrite.
StandardListGameServerThrottledLa requête StandardList a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() sur des bases de données standard a dépassé la limite de taux de serveur de jeu StandardList.
StandardRemoveGameServerThrottledLa requête StandardRemove a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à RemoveAsync() sur une base de données standard a dépassé la limite de taux de serveur de jeu StandardRemove.
OrderedReadGameServerThrottledLa requête OrderedRead a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à GetAsync() ou la lecture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux de serveur de jeu OrderedRead.
OrderedWriteGameServerThrottledLa requête OrderedWrite a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux de serveur de jeu OrderedWrite.
OrderedListGameServerThrottledLa requête OrderedList a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à GetSortedAsync() sur une base de données ordonnée a dépassé la limite de taux de serveur de jeu OrderedList.
OrderedRemoveGameServerThrottledLa requête OrderedRemove a été limitée par des limites de serveur de jeu ou la file d'attente des requêtes était pleine.Une requête à RemoveAsync() sur une base de données ordonnée a dépassé la limite de taux de serveur de jeu OrderedRemove.

Codes d'erreur du serveur

Nom d'erreurMessage d'erreurRemarques
DatastoreDeletedLa base de données est supprimée.Une opération sur la base de données n'a pas pu se produire car la base de données a été précédemment supprimée.
DatastoreThrottledLe taux de requêtes dépasse le maximum autorisé pour la datastore.Trop de requêtes ont été envoyées à une seule base de données.
InternalServerErrorUne erreur interne du serveur s'est produite.Erreur occasionnelle sur les serveurs Roblox. Réessayez, idéalement avec un temps d'attente exponentiel.
InvalidExclusiveStartKeyLa clé de départ exclusive fournie n'est pas valide.La clé de départ exclusive (curseur) fournie à une opération de liste telle que ListKeysAsync() n'est pas valide.
InvalidPlaceLe lieu fourni est invalide.Aucun ID d'Univers correspondant pour le lieu. Réessayez plus tard.
InvalidTargetLa cible fournie est invalide.Le nom de la clé de la base de données ordonnée dépasse la limite de 50 caractères.
InvalidUniverseL'univers fourni est invalide.Aucun ID de Lieu correspondant pour l'univers. Réessayez plus tard.
InvalidUserIdsLes IDs d'utilisateur fournis ont un format invalide.Échec de l'analyse des IDs d'utilisateur.
KeyThrottledLe taux de requêtes dépasse le maximum autorisé pour la clé.Le taux de requêtes dépasse le maximum de requêtes autorisé pour une seule clé.
KeyNotFoundLa clé demandée n'existe pas.La clé n'existe pas.
N/AAucune page à avancer.Cette erreur se produit lorsque vous appelez Pages:AdvanceToNextPageAsync() sur la dernière page.
StandardReadExperienceThrottledLe taux de requêtes de lecture standard dépasse le maximum autorisé pour l'expérience.Une requête à GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), ou la lecture de UpdateAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardRead.
StandardWriteExperienceThrottledLe taux de requêtes d'écriture standard dépasse le maximum autorisé pour l'expérience.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardWrite.
StandardListExperienceThrottledLe taux de requêtes de liste standard dépasse le maximum autorisé pour l'expérience.Une requête à ListKeysAsync(), ListVersionsAsync(), ou ListDataStoresAsync() sur des bases de données standard a dépassé la limite de taux d'expérience StandardList.
StandardRemoveExperienceThrottledLe taux de requêtes de suppression standard dépasse le maximum autorisé pour l'expérience.Une requête à RemoveAsync() sur une base de données standard a dépassé la limite de taux d'expérience StandardRemove.
OrderedReadExperienceThrottledLe taux de requêtes de lecture ordonnée dépasse le maximum autorisé pour l'expérience.Une requête à GetAsync() ou la lecture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedRead.
OrderedWriteExperienceThrottledLe taux de requêtes d'écriture ordonnée dépasse le maximum autorisé pour l'expérience.Une requête à SetAsync(), IncrementAsync(), ou l'écriture de UpdateAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedWrite.
OrderedListExperienceThrottledLe taux de requêtes de liste ordonnée dépasse le maximum autorisé pour l'expérience.Une requête à GetSortedAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedList.
OrderedRemoveExperienceThrottledLe taux de requêtes de suppression ordonnée dépasse le maximum autorisé pour l'expérience.Une requête à RemoveAsync() sur une base de données ordonnée a dépassé la limite de taux d'expérience OrderedRemove.

Limites

Les modèles de données ont des limites. Si une expérience dépasse ces limites, le service limite automatiquement l'utilisation de la base de données de l'expérience et place les requêtes futures dans l'une des files d'attente suivantes :

  • Définir
  • Définir ordonné
  • Obtenir
  • Obtenir ordonné

Les requêtes dans une file d'attente sont traitées dans l'ordre où elles sont reçues. La fonction appelée continue de s'engager tant que sa requête est toujours dans la file d'attente. Si la clé de la base de données elle-même est limitée, la requête est placée dans une file d'attente mais est temporairement sautée.

Chaque file d'attente a une limite de 30 requêtes. Lorsque la limite d'une file d'attente est atteinte, les requêtes échouent avec un code d'erreur dans la plage 301-306, indiquant que les requêtes ont été totalement abandonnées.

Limites d'accès

Les bases de données sont soumises à la fois à des limites de niveau d'expérience et de serveur. Les limites de niveau d'expérience augmentent avec le nombre total d'utilisateurs simultanés à travers l'expérience, tandis que les limites de niveau de serveur sont configurables et destinées à être utilisées comme un outil par le créateur.

Limites de l'expérience

Chaque expérience est autorisée à un certain nombre de requêtes de base de données en fonction du type de base de données, du type de requête et du nombre d'utilisateurs simultanés. Pour chaque type de base de données et type de requête, la limite est partagée parmi toutes les fonctions répertoriées.

  • UpdateAsync() consomme à la fois le budget des requêtes de lecture et d'écriture. Un seul appel diminuera les deux limites.
  • Le serveur de jeu et le Cloud Ouvert partagent un budget ; Le trafic du Cloud Ouvert peut être limité par l'utilisation en expérience (et vice versa). Voir Contrôler les limites de taux pour des orientations supplémentaires.
Base de données standard
Type de requêteAPI de serveur de jeuAPI Cloud OuvertLimites partagées (requêtes par minute)
LireGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
Obtenir l'entrée de la base de données300 + usersSimultanes × 40
ÉcrireSetAsync()
IncrementAsync()
UpdateAsync()
Créer, Mettre à jour, Incrémenter l'entrée de la base de données300 + usersSimultanes × 20
ListerListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
Lister les bases de données, Lister les entrées de la base de données, Lister les révisions des entrées de la base de données300 + usersSimultanes × 2
SupprimerRemoveAsync()Supprimer l'entrée de la base de données, Supprimer la base de données, Récupérer une base de données supprimée300 + usersSimultanes × 40
Base de données ordonnée
Type de requêteAPI de serveur de jeuAPI Cloud OuvertLimites partagées (requêtes par minute)
LireGetAsync()
UpdateAsync()
Obtenir l'entrée de la base de données ordonnée300 + usersSimultanes × 40
ÉcrireSetAsync()
IncrementAsync()
UpdateAsync()
Créer, Mettre à jour, Incrémenter l'entrée de la base de données ordonnée300 + usersSimultanes × 20
ListerGetSortedAsync()Lister les entrées de la base de données ordonnée300 + usersSimultanes × 2
SupprimerRemoveAsync()Supprimer l'entrée de la base de données ordonnée300 + usersSimultanes × 40
Contrôler les limites de taux

Étant donné que les demandes du Cloud Ouvert et du serveur de jeu sont partagées, il est important de contrôler de manière indépendante combien chacun peut consommer du budget.

Serveur de jeu

Les serveurs individuels ont des limites intégrées, comme décrit ci-dessus. Utilisez une combinaison de SetRateLimitForRequestType() et GetRequestBudgetForRequestType() pour maintenir un contrôle fin sur la contribution des serveurs individuels au budget total.

Cloud Ouvert

Les demandes du Cloud Ouvert nécessitent une solution externe de limitation de taux. Nous recommandons l'une des approches suivantes :

  • (Simple) Ajoutez un court délai après chaque demande, surtout si vous appelez la même API dans une boucle continue. Fixez ce délai égal à 60 / (consommation budgétaire souhaitée par minute) secondes, comme limite supérieure. Notez que cette approche n'autorise pas les demandes à être envoyées par rafales.
  • (Robuste) Implémentez un limiteur de taux local utilisant la stratégie du seau percé.

Les échantillons de code Node.js suivants incluent des implémentations de référence.

const apiKey = process.env.API_KEY;
if (!apiKey) {
throw new Error('La variable d\'environnement API_KEY n\'est pas définie.');
}
const apiHeaderKey = 'x-api-key';
const universeId = '';
const dataStoreId = 'Inventory';
const baseUrl = 'https://apis.roblox.com/cloud/v2/';
// --- Configuration de limitation de taux par opération (requêtes par minute) ---
const LIST_RATE_PER_MIN = 60;
const GET_RATE_PER_MIN = 120;
const UPDATE_RATE_PER_MIN = 60;
// Espacement maximal par opération : 60 / (requêtes par min) secondes.
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));
// Exécute la requête, puis attend l'intervalle de cette opération avant de retourner.
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) // Le corps doit être une chaîne
}, 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(`\nTraitement de l'entrée : ${path}`);
const currentData = await getEntry(path);
currentData.value.currency += 10;
const payload = { value: currentData.value };
const updateResponse = await updateEntry(path, payload);
console.log(`Statut : ${updateResponse.status}`);
console.log(`Réponse : ${await updateResponse.text()}`);
}
} catch (error) {
console.error('Une erreur est survenue durant l\'exécution :', error);
}
})();

Limites du serveur

Chaque serveur a une limite de taux configurable pour chaque type de requête, basée sur le nombre de joueurs dans ce serveur. Les serveurs reçoivent une rafale de budget de requêtes supplémentaires une seule fois lorsqu'ils sont créés. Utilisez GetRequestBudgetForRequestType() pour confirmer le nombre de requêtes de la base de données que le serveur actuel peut effectuer à tout moment.

Ces limites sont configurables par le créateur à l'aide de l SetRateLimitForRequestType() API. En utilisant cette API, un créateur peut configurer ses propres limites de taux pour les bases de données pour chaque type de requête.

Les limites de taux par défaut suivantes s'appliquent si l'API n'est pas appelée :

Base de données standard
Type de requêteEnum DataStoreRequestTypeAPI de serveur de jeuRequêtes par minute
LireStandardReadGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
60 + nbJoueurs × 40
ÉcrireStandardWriteSetAsync()
IncrementAsync()
UpdateAsync()
60 + nbJoueurs × 40
ListerStandardListListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
5 + nbJoueurs × 2
SupprimerStandardRemoveRemoveAsync()60 + nbJoueurs × 40
SupprimerVersion (Obsolète)RemoveVersionAsyncRemoveVersionAsync()5 + nbJoueurs × 2
Base de données ordonnée
Type de requêteEnum DataStoreRequestTypeAPI de serveur de jeuRequêtes par minute
LireOrderedReadGetAsync()
UpdateAsync()
60 + nbJoueurs × 40
ÉcrireOrderedWriteSetAsync()
IncrementAsync()
UpdateAsync()
30 + nbJoueurs × 5
ListerOrderedListGetSortedAsync()5 + nbJoueurs × 2
SupprimerOrderedRemoveRemoveAsync()30 + nbJoueurs × 5

Limites de données

Les bases de données limitent la quantité de données pouvant être utilisée par entrée.

Le nom de la base de données, le nom de la clé et le scope doivent tous être sous une certaine longueur de caractères. Utilisez string.len() pour vérifier leur longueur.

Les données (valeur de clé) sont également stockées sous forme de chaîne, indépendamment de leur type initial. Vous pouvez vérifier la taille des données avec la fonction JSONEncode(), qui convertit les données Luau en une table JSON sérialisée.

ComposantNombre maximum de caractères
Nom de la base de données50
Nom de la clé50
Scope50
Données (valeur de clé)4,194,304 par clé

Limites de métadonnées

Limites au nombre de caractères dans les métadonnées définies par l'utilisateur.

ComposantNombre maximum de caractères
Nom de la clé50
Valeur250
Paires clé-valeur300

Limites de débit

Les limites de débit par clé garantissent que les performances sont optimales sur les serveurs Roblox. Chaque limite s'applique à chaque clé individuelle sur tous les serveurs dans une expérience et se rafraîchit avec le temps.

Roblox examine l'utilisation du quota associé à la clé au cours des 60 dernières secondes. Si l'utilisation, y compris la requête actuelle, est dans la limite de débit, la requête est approuvée. Si l'utilisation dépasse la limite, la requête est refusée.

Type de requêteAPI de serveur de jeuAPI Cloud OuvertLimite
LireGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
ListVersionsAsync()
UpdateAsync()
Obtenir l'entrée de la base de données25 MB par minute
ÉcrireSetAsync()
IncrementAsync()
UpdateAsync()
RemoveAsync()
Créer, Mettre à jour, Incrémenter, Supprimer l'entrée de la base de données4 MB par minute

En plus des limites de débit ci-dessus, Roblox organise les données en partitions en fonction d'un schéma interne. Par conséquent, lorsque le serveur en arrière-plan reçoit un volume élevé de requêtes pour la même base de données, cela peut entraîner un ralentissement supplémentaire. Quelle que soit la cause, le ralentissement se manifeste par des erreurs DatastoreThrottled ou KeyThrottled, selon que la limite de débit a été dépassée pour une seule base de données ou une clé. Ces messages d'erreur s'appliquent à la fois aux bases de données ordonnées et standard.

Limites de stockage

Pour maintenir un stockage stable et évolutif, les bases de données utilisent une limite de niveau de jeu sur votre utilisation de stockage.

Cette limite consiste en une allocation de base pour chaque jeu plus une allocation supplémentaire basée sur le nombre d'utilisateurs en lifetime. Un utilisateur en lifetime est tout utilisateur qui a rejoint votre jeu au moins une fois.

La limite de stockage est calculée à l'aide de la formule suivante Limite de stockage de la dernière version totale = 500 Mo + 1 Mo × compte des utilisateurs en lifetime.

L'utilisation du stockage est mesurée en utilisant la taille compressée de la dernière version de chaque clé. Les bases de données compressent automatiquement vos données avant le stockage, donc évitez de les compresser vous-même. La pré-compression ajoute une surcharge CPU inutile et peut réduire l'efficacité de la compression intégrée des bases de données. En stockant des données non compressées, vous profitez automatiquement des améliorations apportées aux algorithmes de compression de Roblox et des optimisations basées sur le schéma à venir.

Seule la dernière version de chaque clé compte pour votre utilisation de stockage. Les clés supprimées et les versions remplacées, tout en étant toujours accessibles via les API de version pendant leur période de conservation, ne comptent pas pour votre utilisation de stockage. Cependant, les bases de données supprimées via la méthode du Cloud Ouvert DeleteDataStore continuent de compter pour l'utilisation de stockage pendant leur période de traitement de suppression de 30 jours, jusqu'à ce qu'elles soient définitivement supprimées.

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.