Zgłoszenia, które robisz do przechowywania danych, mogą się zakończyć niepowodzeniem ze względu na niską połączenie lub inne problemy. Aby uzyskać dostęp do błędów i powiadomić o błędach z kodem błędu, zapakuj funkcje przechowywania danych w pcall() .
Referencja kodu błędu
Kod błędu | Nazwa błędu | Wiadomość o błędzie | Notatki | |
---|---|---|---|---|
101 | KeyNameEmpty | Nazwa klucza nie może zostać pusta. | Sprawdź, czy kluczowy wpis do funkcji przechowywania danych jest pusty ciąg. | |
102 | KeyNameLimit | Nazwa klucza przekracza limit 50 znaków. | Sprawdź, czy klucz w funkcji przechowywania danych przekracza długość 50. | |
103 | ValueNotAllowed | Nie można pozwolić X w DataStore . | Zła funkcja aktualizacji zwróciła wartość typu X. | |
104 | CantStoreValue | Nie można zapisać X w DataStore . | Funkcja aktualizacji zwróciła wartość typu X, która nie była seryalizowana. | |
105 | ValueTooLarge | Wartość serjalna przekracza X limit. | Jeśli ustawiasz wartość z SetAsync() lub UpdateAsync(), długość serweryzowaną wartość nie może przekroczyć rozmiaru X. Aby sprawdzić długość serweryzowaną wartość, użyj 1> Class.HttpService:JSONEncode()|JSONEncode | |
106 | MaxValueInvalid | MaxValue musi być liczbą. | Jeśli przekazujesz maksymalną wartość do GetSortedAsync() dla OrderedDataStore, to musi to być liczba. | |
106 | MinValueInvalid | MinValue musi być liczbą. | Jeśli przesyłasz minimum wartości do GetSortedAsync() dla OrderedDataStore, musi to być liczba całkowita. | |
106 | PageSizeGreater | PageSize musi leżeć w przeddefiniowanym zakresie. | Maksymalna wielkość strony dla OrderedDataStore wynosi 1. | |
106 | PageSizeLesser | PageSize musi leżeć w przeddefiniowanym zakresie. | Maksymalna wielkość strony dla OrderedDataStore wynosi 100. | |
107 | MinMaxOrderInvalid | Wartość MaxValue musi być większa lub równa Wartości MinValue . | Maksymalna wartość musi być większa lub równa minimalnej wartości dla GetSortedAsync() . | |
301 | GetAsyncThrottle | GetAsync prośba zatrzymana. Prośba była ograniczona, ale kierunek była pełna. | Class.GlobalDataStore:GetAsync()|GetAsync() żądanie przekroczył maksymalny rozmiar kolejki, a Roblox nie jest w stanie przetworzyć żądań w obecnym przepływie | |
302 | SetAsyncThrottle | SetAsync prośba zatrzymana. Prośba była ograniczona, ale kierunek była pełna. | Class.GlobalDataStore:SetAsync()|SetAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie może przetworzyć żądań w obecnym przepływie. | |
303 | IncreAsyncThrottle | IncrementAsync prośba zatrzymana. Prośba była ograniczona, ale kierunek była pełna. | Class.GlobalDataStore:IncrementAsync()|IncrementAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć wniosków w obecnym przepływie. | |
304 | UpdateAsyncThrottle | UpdateAsync zaprzestano wysyłania prośby. Prośba była ograniczona, ale kierunek była pełna. | UpdateAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć żądań w obecnym przepływie. | |
304 | TransformThrottle | UpdateAsync zaprzestano wysyłania prośby. Prośba była ograniczona, ale kierunek była pełna. | UpdateAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć żądań w obecnym przepływie. | |
305 | GetSortedThrottle | GetSorted zapis wysłany. Request został szybko odrzucony, ale koda była pełna. | GetSortedAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć zapytania w obecnym przepływie. | |
306 | RemoveAsyncThrottle | RemoveAsync prośba zatrzymana. Prośba była ograniczona, ale kierunek była pełna. | Class.GlobalDataStore:RemoveAsync()|RemoveAsync() prośba przekroczyła maksymalny rozmiar kolejki i Roblox nie może przetworzyć prośb w obecnym przepływie | |
401 | DataModelNoAccess | Prośba nie powiodła się. DataModel jest niedostępny podczas gdy doświadczenie jest zamykane. | DataModel jest niezainicjatyzowany, ponieważ doświadczenie jest zamykane. | |
402 | LuaWebSrvsNoAccess | Prośba nie powiodła się. LuaWebService jest niedostępny podczas gdy doświadczenie jest zamykane. | LuaWebService nie jest inicjalizowany, ponieważ doświadczenie jest zamykane. | |
403 | StudioAccessToApisNotAllowed | Nie można zapisać do DataStore z Studio, ponieważ dostęp API nie jest włączony. | Dostęp API musi być aktywny, aby używać magazynów danych w Studio. | |
404 | InternalError | OrderedDataStore nie istnieje. | Nie znaleziono związanego z tym żądaniem OrderedDataStore . To może być znak uszkodzonego dnia. Spróbuj ponownie później. | |
501 | InternalError | Nie można zeskanować odpowiedzi, ponieważ dane mogą być uszkodzone. | Nie udało się wyczytać odpowiedzi na twoje prośba. To może być wskaźnik uszkodzenia danych. Spróbuj ponownie później. | |
502 | RequestRejected | API Services odrzucił prośbę z błędem X. | Błąd X nastąpił podczas przetwarzania na serwerach Roblox. Spróbuj ponownie później. | |
503 | InternalError | Prośba o przechowywanie danych była powodzeniem, ale klucz nie został znaleziony. | Żądany klucz nie został znaleziony w magazynie danych. To może być wskaźnik uszkodzenia danych. Spróbuj ponownie później. | |
504 | InternalError | Prośba o przechowywanie danych była powodzeniem, ale odpowiedź nie została poprawnie zaimportowana. | Nie udało się wyczytać odpowiedzi na twoje prośba. To może być wskaźnik uszkodzenia danych. Spróbuj ponownie później. | |
505 | InternalError | OrderedDataStore prośba odebrana z sukcesem, ale odpowiedź nie została poprawnie zaimportowana. | Nie udało się serwerowi zeskanować odpowiedzi na twój prośbaOrderedDataStore. Być może to wynik uszkodzonej bazy danych. Spróbuj ponownie później. | |
509 | OperationNotAllowed | Operacje przechowywania danych są zablokowane podczas uruchomienia na osobistym RCC, aby zapobiec ewentualnej uszkodzonej danych. | Wpisy w tabelach danych są zapisane na prywatnych kanałach RCC. | |
511 | AttributeSizeTooLarge | Rozmiar atrybutu metadanych przekracza X limit. | Rozmiar serwowanego metadanych przekracza limit X. Wartość X jest dynamiczna. Jeśli rozmiar się zmienia, wartość również się zmienia. | |
512 | UserIdLimitExceeded | UserID rozmiar przekracza limit X. | Długość zapisu ID użytkownika dostarczonej przez użytkownika przekracza limit X. | |
513 | AttributeFormatError | Format atrybutu userId jest nieprawidłowe. | Dostarczony identyfikator użytkownika nie jest liczbą. | |
513 | AttributeFormatError | Format metadanych atrybutu jest nieprawidłowe. | Metadane nie są tabelą. | |
GetVersionAsyncThrottle | GetVersionAsync prośba została upuszczona. Prośba była ograniczona. | Class.DataStore:GetVersionAsync()|GetVersionAsync() zapytanie przekroczył maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć wniosków w obecnym przepływie. | ||
ListDataStoresAsyncThrottle | ListDataStoresAsync wyszukał prośbę. Prośba została ograniczona. | ListDataStoresAsync() wniosek przekroczył maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć wniosków w obecnym przepływie. | ||
ListKeysAsyncThrottle | ListKeysAsync wysunięto prośbę. Prośba została ograniczona. | ListKeysAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć zapytania w tej chwili poprzez przepustnicę. | ||
ListVersionsAsyncThrottle | ListVersionsAsync zapytanie upuszczone. Request był ograniczony. | ListVersionsAsync() zapytanie przekroczyło maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć zapytania w obecnym przepustowym. | ||
RemoveVersionAsyncThrottle | RemoveVersionAsync prośba została upuszczona. Prośba została ograniczona. | Class.DataStore:RemoveVersionAsync()|RemoveVersionAsync() prośba przekroczyła maksymalny rozmiar kolejki i Roblox nie jest w stanie przetworzyć prośb w obecnym przepływie. |
Kody błędów serwera
Nazwa błędu | Wiadomość o błędzie | Notatki |
---|---|---|
DatastoreThrottled | Szybkość wysyłania przekracza maksymalne pozwolone dla datastore . | Zbyt wiele wysyłanych żądań było do jednego magazynu danych. |
InternalServerError | Wystąpił wewnętrzny błąd serwera. | Okazjonalny błąd na serwerach Roblox. Spróbuj ponownie, idealnie z eksponencjalnym odchyleniem. |
InvalidPlace | Zaproszony przez Ciebie zapis jest nieprawidłowe. | Nie znaleziono odpowiedniego identyfikatora wszechświata dla miejsce. Spróbuj ponownie później. |
InvalidTarget | Podany cel jest nieprawidłowe. | Nazwa klucza magazynu danych przekracza limit 50 znaków. |
InvalidUniverse | Dostarczony wszechświat jest nieprawidłowe. | Nie znaleziono odpowiedniego identyfikatora miejsca dla wszechświata. Spróbuj ponownie później. |
InvalidUserIds | Podane ID użytkowników mają nieprawidłowy format. | Nie udało się zeskanować ID użytkownika. |
KeyThrottled | Szybkość wysyłania przekracza maksymalny limit dla klucza. | Wskaźnik prośby przekracza maksymalną wskazaną wskaźnik prośby dla jednego klucza. |
KeyNotFound | Zapytany klucz nie istnieje. | Klucz nie istnieje. |
N/A | Nie ma stron do przesunięcia. | Ten błąd następuje, gdy wywołasz Pages:AdvanceToNextPageAsync() na ostatniej stronie. |
Ograniczenia
Modele danych mają ograniczenia . Jeśli doświadczenie przekracza te ograniczenia, usługa automatycznie ogranicza użycie magazynu danych doświadczenia i powoduje, że nadchodzące wnioski są umieszczone w jednej z następujących kolejek:
- Ustawić
- Zamówiony ustawiać
- Zdobądź
- Zamówiony dostęp
Zgłoszenia w kolejce są przetwarzane w kolejności, w jakiej są otrzymywane. Funkcja wezwana nadal zwraca, dopóki jej zgłoszenie nadal jest w kolejce. Jeśli klucz przechowywania danych jest ograniczony, zgłoszenie jest umieszczone w kolejce, ale jest tymczasowo odrzucane.
Każda kolejka ma limit 30 żądań. Gdy limit kolejki zostanie osiągnięty, wszystkie żądania zakończą się błędem kodu w zakresie 301-306, co wskazuje, że wszystkie żądania zostały całkowicie zgubione.
Ograniczenia serwera
Każdy serwer jest dozwolony pewną liczbą prośb o przechowywanie danych w zależności od typu prośby i liczby użytkowników. Użyj GetRequestBudgetForRequestType() , aby potwierdzić liczbę prośb o przechowywanie danych, które może wykonać obecne miejsce.
Typ prośby | Funkcje | Zgłaszania na minutę |
---|---|---|
Zdobądź | GetAsync() | 60 + liczba graczy × 10 |
Ustaw (ograniczenie jest dzielone między wszystkie wymienione funkcje) | SetAsync() Class.GlobalDataStore:IncrementAsync()|IncrementAsync() Class.GlobalDataStore:UpdateAsync()|UpdateAsync() 0> Class.GlobalDataStore:RemoveAsync()|RemoveAsync()0> | 60 + liczba graczy × 10 |
Zostań sortowany | GetSortedAsync() | 5 + numPlayers × 2 |
Zdobądź wersję | GetVersionAsync() | 5 + numPlayers × 2 |
Lista | Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()``Class.DataStore:ListKeysAsync()|ListKeysAsync()``Class.DataStore:ListVersionsAsync()|ListVersionAsync() | 5 + numPlayers × 2 |
Usuń | RemoveVersionAsync() | 5 + numPlayers × 2 |
Ograniczenia danych
Limitowanie przechowywanych danych pozwala na użycie tylko określonej ilości danych za wejście.
Nazwa magazynu danych, imię klucza i zakres muszą wszystkie być pod pewną długością znaku. Użyj string.len() aby sprawdzić ich długość.
Wartość klucza jest również przechowywana jako ciąg znaków, niezależnie od jej początkowego wpisywać. Możesz sprawdzić rozmiar danych za pomocą funkcji JSONEncode(), która konwertuje dane Lua w seriałizowaną tabelę JSON.
Składnik | Maksymalna liczba znaków |
---|---|
Nazwa magazynu danych | 50 |
Nazwa klucza | 50 |
Zakres | 50 |
Dane (Wartość klucza) | 4,194,304 za klucz |
Limitowanie metadanych
Ograniczenia liczby znaków w metadanych użytkownika.
Składnik | Maksymalna liczba znaków |
---|---|
Nazwa klucza | 50 |
Wartość | 250 |
Pary kluczowe | 300 |
Ograniczenia przepustowości
Ograniczenia przepustowości kluczowej zapewniają, że wydajność jest optymalna na serwerach Roblox. Każde ograniczenie dotyczy każdego pojedynczego klucza na wszystkich serwerach w doświadczeniu i aktualizuje się wraz z upływem czasu.
Roblox ocenia użycie kwoty związanej z kluczem w ciągu ostatnich 60 sekund. Jeśli użycie, w tym obecna prośba, jest w limicie przepustowości, prośba jest zatwierdzona. Jeśli użycie przekracza limit, prośba jest odrzucona.
Typ prośby | Ograniczenie |
---|---|
Przeczytaj | 25 MB na minutę |
Pisać | 4 MB na minutę |