Anfragen, die Sie an Datenspeicher stellen, können aufgrund schlechter Konnektivität oder anderer Probleme fehlschlagen. Um Fehler zu behandeln und Nachrichten mit einem Fehlercode zurückzugeben, wickeln Sie Datenspeicherfunktionen in pcall() ein.
Ein fehlgeschlagener Schreibaufruf, wie z. B. UpdateAsync(), bedeutet, dass der Spieleserver keine erfolgreiche Antwort erhalten hat. Es garantiert jedoch nicht immer, dass der Backend-Schreibvorgang nicht stattgefunden hat. In einigen Fehlerszenarien kann der endgültige Schreibstatus dem Aufrufer bis zur Überprüfung mit einem nachfolgenden Lesevorgang ohne Cache unbekannt bleiben.
Fehlercode-Referenz
| Fehlercode | Fehlername | Fehlermeldung | Hinweise | |
|---|---|---|---|---|
| 101 | KeyNameEmpty | Der Schlüsselname darf nicht leer sein. | Überprüfen Sie, ob der Schlüssel, der in die Datenspeicherfunktion eingegeben wurde, eine leere Zeichenkette ist. | |
| 102 | KeyNameLimit | Der Schlüsselname überschreitet das Limit von 50 Zeichen. | Überprüfen Sie, ob der Schlüssel, der in die Datenspeicherfunktion eingegeben wurde, länger als 50 Zeichen ist. | |
| 103 | ValueNotAllowed | Kann X in DataStore nicht zulassen. | Eine fehlerhafte Aktualisierungsfunktion hat einen Wert des Typs X zurückgegeben. | |
| 104 | CantStoreValue | Kann X in DataStore nicht speichern. | Die Aktualisierungsfunktion hat einen Wert des Typs X zurückgegeben, der nicht serialisierbar war. | |
| 105 | ValueTooLarge | Serialisierter Wert überschreitet das Limit von X. | Wenn Sie einen Wert mit SetAsync() oder UpdateAsync() setzen, darf die serialisierte Länge des Wertes nicht größer als X sein. Um die serialisierte Länge der Daten zu überprüfen, verwenden Sie JSONEncode(). | |
| 106 | MaxValueInvalid | MaxValue muss eine ganze Zahl sein. | Wenn Sie einen maximalen Wert an GetSortedAsync() für einen OrderedDataStore übergeben, muss dieser eine ganze Zahl sein. | |
| 106 | MinValueInvalid | MinValue muss eine ganze Zahl sein. | Wenn Sie einen minimalen Wert an GetSortedAsync() für einen OrderedDataStore übergeben, muss dieser eine ganze Zahl sein. | |
| 106 | PageSizeGreater | PageSize muss innerhalb eines vordefinierten Bereichs liegen. | Die minimale Seitenanzahl für einen OrderedDataStore beträgt 1. | |
| 106 | PageSizeLesser | PageSize muss innerhalb eines vordefinierten Bereichs liegen. | Die maximale Seitenanzahl für einen OrderedDataStore beträgt 100. | |
| 107 | MinMaxOrderInvalid | MaxValue muss größer oder gleich MinValue sein. | Der Maximalwert muss größer oder gleich dem Minimalwert für GetSortedAsync() sein. | |
| 301 | GetAsyncThrottle | GetAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage GetAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 302 | SetAsyncThrottle | SetAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage SetAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 303 | IncreAsyncThrottle | IncrementAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage IncrementAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 304 | UpdateAsyncThrottle | UpdateAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage UpdateAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 304 | TransformThrottle | UpdateAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage UpdateAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 305 | GetSortedThrottle | GetSorted-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage GetSortedAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 306 | RemoveAsyncThrottle | RemoveAsync-Anfrage verworfen. Anfrage wurde eingeschränkt, aber die Warteschlange war voll. | Die Anfrage RemoveAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | |
| 401 | DataModelNoAccess | Die Anfrage ist fehlgeschlagen. DataModel ist nicht zugänglich, während die Erfahrung heruntergefahren wird. | DataModel ist nicht initialisiert, da die Erfahrung heruntergefahren wird. | |
| 402 | LuaWebSrvsNoAccess | Die Anfrage ist fehlgeschlagen. LuaWebService ist nicht zugänglich, während die Erfahrung heruntergefahren wird. | LuaWebService ist nicht initialisiert, da die Erfahrung heruntergefahren wird. | |
| 403 | StudioAccessToApisNotAllowed | Kann nicht aus dem Studio auf DataStore schreiben, da der API-Zugriff nicht aktiviert ist. | Der API-Zugriff muss aktiv sein, um Datenspeicher im Studio verwenden zu können. | |
| 404 | InternalError | OrderedDataStore existiert nicht. | Der OrderedDataStore, der mit dieser Anfrage verknüpft ist, wurde nicht gefunden. Dies könnte ein Zeichen für Datenbeschädigung sein. Versuchen Sie es später erneut. | |
| 501 | InternalError | Antwort kann nicht geparsed werden, da die Daten möglicherweise beschädigt sind. | Der Server konnte die Antwort auf Ihre Anfrage nicht analysieren. Dies könnte ein Zeichen für Datenbeschädigung sein. Versuchen Sie es später erneut. | |
| 502 | RequestRejected | API-Dienste haben die Anfrage mit Fehler X abgelehnt. | Fehler X trat bei der Verarbeitung auf Roblox-Servern auf. Versuchen Sie es später erneut. | |
| 503 | InternalError | Datenspeicheranfrage war erfolgreich, aber der Schlüssel wurde nicht gefunden. | Der angeforderte Schlüssel wurde im Datenspeicher nicht gefunden. Dies könnte ein Zeichen für Datenbeschädigung sein. Versuchen Sie es später erneut. | |
| 504 | InternalError | Datenspeicheranfrage war erfolgreich, aber die Antwort war nicht korrekt formatiert. | Der Server konnte die Antwort auf Ihre Anfrage nicht analysieren. Dies könnte ein Zeichen für Datenbeschädigung sein. Versuchen Sie es später erneut. | |
| 505 | InternalError | OrderedDataStore-Anfrage war erfolgreich, aber die Antwort war nicht korrekt formatiert. | Der Server konnte die Antwort auf Ihre OrderedDataStore-Anfrage nicht analysieren. Dies könnte ein Zeichen für Datenbeschädigung sein. Versuchen Sie es später erneut. | |
| 509 | OperationNotAllowed | Datenspeicheroperationen sind auf einem persönlichen RCC blockiert, um mögliche Datenbeschädigung zu verhindern. | Datenspeicher-Schreibvorgänge werden auf privaten RCC-Kanälen blockiert. | |
| 511 | AttributeSizeTooLarge | Die Größe des Metadatensatzattributs überschreitet das Limit von X. | Die serialisierte Metadatenmenge überschreitet das Limit von X. Der Wert X ist dynamisch. Wenn sich die Größe ändert, ändert sich auch der Wert. | |
| 512 | UserIdLimitExceeded | Die Größe von UserID überschreitet das Limit von X. | Die Länge des von Benutzern bereitgestellten Benutzer-ID-Arrays überschreitet das Limit von X. | |
| 513 | AttributeFormatError | Das Format des Attributs userId ist ungültig. | Die bereitgestellte Benutzer-ID ist keine Zahl. | |
| 513 | AttributeFormatError | Das Format der Attributmetadaten ist ungültig. | Die Metadaten sind keine Tabelle. | |
| GetVersionAsyncThrottle | GetVersionAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage GetVersionAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| GetVersionAtTimeAsyncThrottle | GetVersionAtTimeAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage GetVersionAtTimeAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| ListDataStoresAsyncThrottle | ListDataStoresAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage ListDataStoresAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| ListKeysAsyncThrottle | ListKeysAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage ListKeysAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| ListVersionsAsyncThrottle | ListVersionsAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage ListVersionsAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| RemoveVersionAsyncThrottle | RemoveVersionAsync-Anfrage verworfen. Anfrage wurde eingeschränkt. | Die Anfrage RemoveVersionAsync() hat die maximale Warteschlangengröße überschritten und Roblox kann die Anfragen bei der aktuellen Durchsatzrate nicht bearbeiten. | ||
| InvalidTimestamp | Der Zeitstempel muss positiv und darf nicht mehr als zehn Minuten in der Zukunft liegen. | Der dem GetVersionAtTimeAsync() übergebene Zeitstempel war ungültig. | ||
| StandardReadExperienceThrottled | StandardRead-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), oder das Lesen von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardRead-Erfahrungsgrenzenlimit. | ||
| StandardWriteExperienceThrottled | StandardWrite-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardWrite-Erfahrungsgrenzenlimit. | ||
| StandardListExperienceThrottled | StandardList-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an ListKeysAsync(), ListVersionsAsync(), oder ListDataStoresAsync() auf Standarddatenspeichern überschritt das StandardList-Erfahrungsgrenzenlimit. | ||
| StandardRemoveExperienceThrottled | StandardRemove-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an RemoveAsync() auf einem Standarddatenspeicher überschritt das StandardRemove-Erfahrungsgrenzenlimit. | ||
| OrderedReadExperienceThrottled | OrderedRead-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an GetAsync() oder das Lesen von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedRead-Erfahrungsgrenzenlimit. | ||
| OrderedWriteExperienceThrottled | OrderedWrite-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedWrite-Erfahrungsgrenzenlimit. | ||
| OrderedListExperienceThrottled | OrderedList-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an GetSortedAsync() auf einem geordneten Datenspeicher überschritt das OrderedList-Erfahrungsgrenzenlimit. | ||
| OrderedRemoveExperienceThrottled | OrderedRemove-Anfrage wurde durch Erfahrungslimits eingeschränkt. | Eine Anfrage an RemoveAsync() auf einem geordneten Datenspeicher überschritt das OrderedRemove-Erfahrungsgrenzenlimit. | ||
| StandardReadGameServerThrottled | StandardRead-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), oder das Lesen von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardRead-Spielservergrenzenlimit. | ||
| StandardWriteGameServerThrottled | StandardWrite-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardWrite-Spielservergrenzenlimit. | ||
| StandardListGameServerThrottled | StandardList-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an ListKeysAsync(), ListVersionsAsync(), oder ListDataStoresAsync() auf Standarddatenspeichern überschritt das StandardList-Spielservergrenzenlimit. | ||
| StandardRemoveGameServerThrottled | StandardRemove-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an RemoveAsync() auf einem Standarddatenspeicher überschritt das StandardRemove-Spielservergrenzenlimit. | ||
| OrderedReadGameServerThrottled | OrderedRead-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an GetAsync() oder das Lesen von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedRead-Spielservergrenzenlimit. | ||
| OrderedWriteGameServerThrottled | OrderedWrite-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedWrite-Spielservergrenzenlimit. | ||
| OrderedListGameServerThrottled | OrderedList-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an GetSortedAsync() auf einem geordneten Datenspeicher überschritt das OrderedList-Spielservergrenzenlimit. | ||
| OrderedRemoveGameServerThrottled | OrderedRemove-Anfrage wurde durch Spielserverlimits oder die Anfragewarteschlange war voll eingeschränkt. | Eine Anfrage an RemoveAsync() auf einem geordneten Datenspeicher überschritt das OrderedRemove-Spielservergrenzenlimit. |
Serverfehlercodes
| Fehlername | Fehlermeldung | Hinweise |
|---|---|---|
| DatastoreDeleted | Der Datenspeicher wurde gelöscht. | Eine Operation auf dem Datenspeicher konnte nicht stattfinden, da der Datenspeicher zuvor gelöscht wurde. |
| DatastoreThrottled | Die Anfragerate überschreitet das erlaubte Maximum für den Datastore. | Zu viele Anfragen wurden an einen einzelnen Datenspeicher gesendet. |
| InternalServerError | Ein interner Serverfehler ist aufgetreten. | Gelegentliches Fehler auf den Roblox-Servern. Versuchen Sie es erneut, idealerweise mit exponentiellem Backoff. |
| InvalidExclusiveStartKey | Der bereitgestellte exklusive Startschlüssel ist nicht gültig. | Der bereitgestellte exklusive Startschlüssel (Cursor) für eine Listoperation wie ListKeysAsync() ist ungültig. |
| InvalidPlace | Der bereitgestellte Ort ist ungültig. | Keine übereinstimmende Universum-ID für den Ort. Versuchen Sie es später erneut. |
| InvalidTarget | Das bereitgestellte Ziel ist ungültig. | Der Schlüsselname des geordneten Datenspeichers überschreitet das Limit von 50 Zeichen. |
| InvalidUniverse | Das bereitgestellte Universum ist ungültig. | Keine übereinstimmende Platz-ID für das Universum. Versuchen Sie es später erneut. |
| InvalidUserIds | Die bereitgestellten Benutzer-IDs haben ein ungültiges Format. | Fehler beim Parsen der Benutzer-IDs. |
| KeyThrottled | Die Anfragerate überschreitet das erlaubte Maximum für den Schlüssel. | Die Anfragerate überschreitet die maximal zulässige Anfragerate für einen einzelnen Schlüssel. |
| KeyNotFound | Der angeforderte Schlüssel existiert nicht. | Der Schlüssel existiert nicht. |
| N/A | Keine Seiten zum Fortfahren. | Dieser Fehler tritt auf, wenn Sie Pages:AdvanceToNextPageAsync() auf der letzten Seite aufrufen. |
| StandardReadExperienceThrottled | Die Anfragerate für die Standardleseanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), oder das Lesen von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardRead-Erfahrungsgrenzenlimit. |
| StandardWriteExperienceThrottled | Die Anfragerate für die Standardänderungsanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem Standarddatenspeicher überschritt das StandardWrite-Erfahrungsgrenzenlimit. |
| StandardListExperienceThrottled | Die Anfragerate für die Standardauflistungsanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an ListKeysAsync(), ListVersionsAsync(), oder ListDataStoresAsync() auf Standarddatenspeichern überschritt das StandardList-Erfahrungsgrenzenlimit. |
| StandardRemoveExperienceThrottled | Die Anfragerate für die Standardentfernung überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an RemoveAsync() auf einem Standarddatenspeicher überschritt das StandardRemove-Erfahrungsgrenzenlimit. |
| OrderedReadExperienceThrottled | Die Anfragerate für die geordnete Leseanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an GetAsync() oder das Lesen von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedRead-Erfahrungsgrenzenlimit. |
| OrderedWriteExperienceThrottled | Die Anfragerate für die geordnete Schreibanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an SetAsync(), IncrementAsync(), oder das Schreiben von UpdateAsync() auf einem geordneten Datenspeicher überschritt das OrderedWrite-Erfahrungsgrenzenlimit. |
| OrderedListExperienceThrottled | Die Anfragerate für die geordnete Anfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an GetSortedAsync() auf einem geordneten Datenspeicher überschritt das OrderedList-Erfahrungsgrenzenlimit. |
| OrderedRemoveExperienceThrottled | Die Anfragerate für die geordnete Entfernungsanfrage überschreitet das zulässige Maximum für die Erfahrung. | Eine Anfrage an RemoveAsync() auf einem geordneten Datenspeicher überschritt das OrderedRemove-Erfahrungsgrenzenlimit. |
Beschränkungen
Datenmodelle haben Beschränkungen. Wenn eine Erfahrung diese Beschränkungen überschreitet, drosselt der Dienst automatisch die Nutzung des Datenspeichers der Erfahrung und lässt zukünftige Anfragen in eine der folgenden Warteschlangen einreihen:
- Setzen
- Geordnetes Setzen
- Abrufen
- Geordnetes Abrufen
Anfragen in einer Warteschlange werden in der Reihenfolge bearbeitet, in der sie empfangen wurden. Die aufgerufene Funktion bleibt solange blockiert, wie die Anfrage noch in der Warteschlange ist. Wenn der Datenspeicherschlüssel selbst gedrosselt ist, wird die Anfrage in einer Warteschlange platziert, aber vorübergehend übersprungen.
Jede Warteschlange hat ein Limit von 30 Anfragen. Wenn das Limit einer Warteschlange erreicht ist, schlägt die Anfrage mit einem Fehlercode im Bereich von 301-306 fehl, was darauf hinweist, dass die Anfragen vollständig verworfen wurden.
Zugriffsbeschränkungen
Datenspeicher unterliegen sowohl Erfahrungs- als auch serverseitigen Beschränkungen. Die Erfahrungen-basierten Grenzen skalieren mit der Gesamtanzahl der gleichzeitigen Benutzer in der Erfahrung, während die serverseitigen Begrenzungen konfigurierbar sind und als Werkzeug vom Ersteller verwendet werden sollen.
Erfahrungsgrenzen
Jede Erfahrung darf eine bestimmte Anzahl von Datenspeicheranfragen basierend auf dem Datenspeichertyp, dem Anfrage Typ, und der Anzahl gleichzeitiger Benutzer haben. Für jeden Datenspeichertyp und Anfrage Typ wird das Limit unter allen aufgelisteten Funktionen geteilt.
Bitte beachten Sie, dass UpdateAsync() sowohl aus dem Lese- als auch aus dem Schreibbudget verbraucht. Ein einzelner Aufruf verringert beide Limits.
Standard-Datenspeicher
| Anfrage Typ | Funktionen | Anfragen pro Minute |
|---|---|---|
| Lesen | GetAsync() GetVersionAsync() GetVersionAtTimeAsync() UpdateAsync() | 250 + concurrentUsers × 40 |
| Schreiben | SetAsync() IncrementAsync() UpdateAsync() | 250 + concurrentUsers × 20 |
| Auflisten | ListDataStoresAsync() ListKeysAsync() ListVersionsAsync() | 10 + concurrentUsers × 2 |
| Entfernen | RemoveAsync() | 100 + concurrentUsers × 40 |
Geordnete Datenspeicher
| Anfrage Typ | Funktionen | Anfragen pro Minute |
|---|---|---|
| Lesen | GetAsync() UpdateAsync() | 250 + concurrentUsers × 40 |
| Schreiben | SetAsync() IncrementAsync() UpdateAsync() | 250 + concurrentUsers × 20 |
| Auflisten | GetSortedAsync() | 100 + concurrentUsers × 2 |
| Entfernen | RemoveAsync() | 100 + concurrentUsers × 40 |
Serverbeschränkungen
Jeder Server hat ein konfigurierbares Ratenlimit für jeden Anfrage Typ, basierend auf der Anzahl der Spieler auf diesem Server. Server erhalten einen einmaligen Startschub an zusätzlichem Anfragenbudget, wenn sie zum ersten Mal erstellt werden. Verwenden Sie GetRequestBudgetForRequestType(), um die Anzahl der Datenspeicheranfragen zu bestätigen, die der aktuelle Server zu einem bestimmten Zeitpunkt stellen kann.
Diese Limits sind für den Ersteller konfigurierbar über die API SetRateLimitForRequestType(). Ein Ersteller kann mit dieser API die eigenen Ratenlimits für Datenspeicher für jeden Anfrage Typ konfigurieren.
Die folgenden Standardratenlimits gelten, wenn die API nicht aufgerufen wird:
Standard-Datenspeicher
| Anfrage Typ | DataStoreRequestType Enum | Funktionen | Anfragen pro Minute |
|---|---|---|---|
| Lesen | StandardRead | GetAsync() GetVersionAsync() GetVersionAtTimeAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Schreiben | StandardWrite | SetAsync() IncrementAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Auflisten | StandardList | ListDataStoresAsync() ListKeysAsync() ListVersionsAsync() | 5 + numPlayers × 2 |
| Entfernen | StandardRemove | RemoveAsync() | 60 + numPlayers × 40 |
| RemoveVersion (Veraltet) | RemoveVersionAsync | RemoveVersionAsync() | 5 + numPlayers × 2 |
Geordnete Datenspeicher
| Anfrage Typ | DataStoreRequestType Enum | Funktionen | Anfragen pro Minute |
|---|---|---|---|
| Lesen | OrderedRead | GetAsync() UpdateAsync() | 60 + numPlayers × 40 |
| Schreiben | OrderedWrite | SetAsync() IncrementAsync() UpdateAsync() | 30 + numPlayers × 5 |
| Auflisten | OrderedList | GetSortedAsync() | 5 + numPlayers × 2 |
| Entfernen | OrderedRemove | RemoveAsync() | 30 + numPlayers × 5 |
Datenbeschränkungen
Datenspeicher begrenzen, wie viel Daten pro Eintrag verwendet werden können.
Der Name des Datenspeichers, der Schlüsselname und der Geltungsbereich müssen alle eine bestimmte Zeichenlänge unterhalb haben. Verwenden Sie string.len(), um ihre Länge zu überprüfen.
Die Daten (Schlüsselwert) werden auch als Zeichenkette gespeichert, unabhängig von ihrem ursprünglichen Typ. Sie können die Größe der Daten mit der Funktion JSONEncode() überprüfen, die Luau-Daten in eine serialisierte JSON-Tabelle umwandelt.
| Komponente | Maximale Anzahl von Zeichen |
|---|---|
| Name des Datenspeichers | 50 |
| Schlüsselname | 50 |
| Geltungsbereich | 50 |
| Daten (Schlüsselwert) | 4.194.304 pro Schlüssel |
Metadatenlimits
Limits für die Anzahl der Zeichen in benutzerdefinierten Metadaten.
| Komponente | Maximale Anzahl von Zeichen |
|---|---|
| Schlüsselname | 50 |
| Wert | 250 |
| Schlüssel-Wert-Paare | 300 |
Durchsatzlimits
Durchsatzlimits pro Schlüssel gewährleisten, dass die Leistung auf Roblox-Servern optimal ist. Jedes Limit gilt für jeden einzelnen Schlüssel über alle Server in einer Erfahrung hinweg und wird im Laufe der Zeit zurückgesetzt.
Roblox untersucht die Nutzung des mit dem Schlüssel verbundenen Kontingents in den letzten 60 Sekunden. Wenn die Nutzung, einschließlich der aktuellen Anfrage, innerhalb des Durchsatzlimits liegt, wird die Anfrage genehmigt. Wenn die Nutzung das Limit überschreitet, wird die Anfrage abgelehnt.
| Anfrage Typ | Limit |
|---|---|
| Lesen | 25 MB pro Minute |
| Schreiben | 4 MB pro Minute |
Zusätzlich zu den oben genannten Durchsatzlimits organisiert Roblox Daten in Partitionen basierend auf einem internen Schema. Wenn der Backend-Server also eine hohe Anzahl von Anfragen für denselben Datenspeicher erhält, kann dies zu weiteren Drosselungen führen. Unabhängig von der Ursache äußert sich die Drosselung in Form von Fehlern wie DatastoreThrottled oder KeyThrottled, je nachdem, ob das Durchsatzlimit für einen einzelnen Datenspeicher oder einen Schlüssel überschritten wurde. Diese Fehlermeldungen gelten sowohl für geordnete als auch für Standarddatenspeicher.
Speicherlimits
In Zukunft wird es, um ein skalierbares und stabiles Speichererlebnis zu bieten, im Datenspeicher ein erfahrungsbezogenes Speicherlimit für Ihre Speichernutzung implementiert.
Dieses Limit wird die Summe aus einem Basislimit für jede Ihrer Erfahrungen und einem pro Benutzer Limit basierend auf der Anzahl der Lebenszeit-Nutzer in Ihrer Erfahrung sein. Ein Lebenszeit-Nutzer ist jeder Benutzer, der Ihrer Erfahrung mindestens einmal beigetreten ist.
Das Speicherlimit wird anhand der Formel Total latest version storage limit = 100 MB + 1 MB * lifetime user count berechnet.
Alle Schlüssel, die Sie löschen oder ersetzen, sogar wenn sie weiterhin über Versions-APIs zugänglich sind, zählen nicht zu Ihrer Speichernutzung in Ihrer Erfahrung. Allerdings zählen gesamte Datenspeicher, die über die Open Cloud DeleteDataStore Methode gelöscht werden, weiterhin zu Ihrer Speichernutzung für die Dauer ihrer 30-tägigen Bearbeitungsphase, bis sie endgültig gelöscht werden.