Najlepsze praktyki dotyczące magazynów danych

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Użyj tych praktyk, aby zorganizować i zarządzać niezawodnymi, skalowalnymi i obserwowalnymi danymi przez cały ich cykl życia.

Zorganizuj swoje dane

Twórz mniej magazynów danych

Magazyny danych zachowują się podobnie do tabel w bazach danych. Użyj małego, stałego zestawu magazynów danych i zorganizuj rekordy w nich według klucza. Na przykład, przechowuj profil każdego gracza w jednym magazynie danych PlayerData, zamiast tworzyć magazyn danych dla każdego gracza.

Używaj jednego lub kilku kluczy na gracza

Przechowuj dane trwałe dla każdego gracza pod jednym kluczem, gdy tylko dane mieszczą się w limicie rozmiaru obiektu 4 MB. Na przykład, użyj klucza takiego jak User_123456 w magazynie danych PlayerData. Ten wzór zmniejsza liczbę żądań, pozwala na atomowe aktualizowanie powiązanych wartości i ułatwia rozumienie wycofań.

Jeśli różne części danych gracza mają różne wzorce dostępu lub zbliżają się do limitów rozmiaru lub przepustowości na klucz, podziel rekord na małą liczbę deterministycznych kluczy. Przechowuj dane, które muszą zmieniać się atomowo, w tym samym kluczu.

Używaj statycznych wzorców kluczy i prefiksów

Buduj nazwy kluczy z stabilnych identyfikatorów i statycznych wzorców, takich jak User_{UserId}. Nie używaj nazw wyświetlanych ani innych wartości, które mogą się zmieniać. Statyczne wzorce sprawiają, że klucze są przewidywalne w różnych serwerach i narzędziach. Dla magazynów danych pozwalają również na automatyczne przetwarzanie prawa do bycia zapomnianym w celu identyfikacji danych gracza.

Użyj prefiksów, aby grupować powiązane klucze. Na przykład, doświadczenie, które obsługuje wiele profili postaci, może używać User_123456/Profile/Warrior i User_123456/Profile/Mage. Możesz następnie przekazać User_123456/Profile do ListKeysAsync(), aby wylistować profile tego gracza.

Zakresy to inny sposób na podział magazynu danych. Zakres dodaje ciąg do każdego klucza w tej instancji magazynu danych, a domyślnym zakresem jest global.

Oceń moduły magazynów danych

Moduły magazynów danych od osób trzecich są zawsze opcją, a w wielu przypadkach mogą być preferowane w porównaniu do budowania systemów od podstaw. Przed przyjęciem jednego z nich, sprawdź jego własność, status utrzymania i zestaw funkcji. Zrozum, jak uzyskać dostęp do swoich danych i migrować je bez modułu.

Zmniejszaj i rozdzielaj żądania

Buforuj dane gracza w pamięci

Załaduj dane gracza na początku sesji i zachowaj lokalną kopię na serwerze do rozgrywki. Aktualizuj lokalną kopię zamiast wysyłać żądanie do magazynu danych dla każdej zmiany. Zapisuj ją okresowo, gdy gracz opuszcza grę, gdy serwer się zamyka oraz w krytycznych punktach kontrolnych, takich jak przetwarzanie zakupu. Wybierz okresowy interwał zapisu, który mieści się w twoich limitach żądań i jest krótszy niż jakiekolwiek wygaśnięcie blokady sesji; przykład danych gracza i zakupu używa 180 sekund.

Rozkładaj powtarzające się żądania

Nie rozpoczynaj powtarzających się żądań z każdego serwera w tym samym harmonogramie. Przed rozpoczęciem pętli o stałej częstotliwości przypisz każdemu serwerowi lub graczowi losowy początkowy offset. Dla pętli pollingowych lub koordynacyjnych, które nie wymagają dokładnej kadencji, dodaj ograniczone losowe jitter do każdego interwału. Te wzorce rozkładają żądania w czasie i zmniejszają zsynchronizowane szczyty ruchu.

Powtarzaj tymczasowe błędy

Owiń żądania w pcall() i powtarzaj tymczasowe błędy z wykładniczym opóźnieniem. Dodaj losowe jitter do każdego opóźnienia, aby serwery nie powtarzały jednocześnie. Ogranicz opóźnienie i liczbę prób, a nie powtarzaj błędów spowodowanych nieprawidłowymi żądaniami lub operacjami, które nie mogą już dostarczyć użytecznych wyników.

Przetwarzaj powtórzenia magazynu danych w kolejności dla każdego klucza. Starsze żądanie, które powtarza się po tym, jak nowsze żądanie zakończy się sukcesem, może nadpisać nowsze dane. Uwzględnij również zapisy z nieznanymi wynikami: nieudane wywołanie oznacza, że serwer nie otrzymał pozytywnej odpowiedzi, ale backend mógł zakończyć zapis. Aby uzyskać więcej informacji, zobacz Kody błędów magazynu danych i limity oraz Powtórzenia.

Preferuj UpdateAsync zamiast SetAsync

Preferuj UpdateAsync(), gdy zapis zależy od bieżącej wartości lub gdy wiele serwerów może zapisywać ten sam klucz. UpdateAsync() odczytuje najnowszą wartość do twojego callbacka przed zapisaniem, co zmniejsza utratę aktualizacji. SetAsync() nadpisuje klucz bez wcześniejszego odczytu i może powodować niespójność, jeśli dwa serwery zapisują w tym samym czasie.

Użyj SetAsync(), gdy tworzysz nowy klucz lub zastępujesz wartość, która nie zależy od poprzedniej wartości. Aby porównać te dwie metody, zobacz Set vs update.

Podziel gorące klucze

Każdy klucz ma limity przepustowości odczytu i zapisu. Jeśli jeden logiczny rekord konsekwentnie osiąga te limity po zmniejszeniu zbędnych żądań, podziel go na deterministyczne klucze. Wybierz stabilny shard z identyfikatora, takiego jak User_{UserId}_Inventory_{ShardId}, aby każdy serwer kierował te same dane do tego samego sharda.

Shardowanie sprawia, że utrzymanie spójności i przeprowadzanie przyszłych migracji staje się bardziej skomplikowane. Nie sharduj danych, które mieszczą się w jednym kluczu i pozostają poniżej swoich limitów przepustowości.

Zbuduj workflow operacyjny

Użyj dostępnych narzędzi razem:

  1. Obserwuj. Użyj Dashboardu Obserwowalności Magazynów Danych, aby śledzić żądania, status odpowiedzi, przepustowość i przechowywanie. Skonfiguruj niestandardowe powiadomienia dla ważnych metryk magazynów danych, aby twój zespół mógł reagować na długotrwałe awarie lub niespodziewany wzrost. Powiadomienia w Creator Hub również informują cię, gdy przechowywanie zbliża się do limitów lub je przekracza, a także zawierają wskazówki i linki do dashboardów.
  2. Inspekcja. Użyj Menadżera Magazynów Danych, aby zbadać magazyny danych, klucze, wykorzystanie pamięci i szacowane koszty. Jeśli doświadczenie ma więcej niż 100 magazynów danych, lista magazynów danych nie pokazuje rozmiaru i liczby kluczy. Użyj Open Cloud lub Batch Processor Magazynów Danych dla tych metryk.
  3. Napraw. Użyj Menadżera Magazynów Danych dla pojedynczych rekordów. Użyj API magazynów danych Open Cloud lub Batch Processor Magazynów Danych dla powtarzalnych lub dużych workflowów.
  4. Skaluj świadomie. Najpierw zmniejsz zbędne przechowywanie i żądania. Jeśli uzasadnione użycie przekracza domyślne limity, oceń Usługi Rozszerzone.

Open Cloud i serwery gier dzielą budżet żądań na poziomie doświadczenia. Ograniczaj operacyjne skrypty Open Cloud, aby nie zakłócały ruchu na żywo.

Zarządzaj cyklem życia danych

Użyj wersji magazynów danych zamiast tworzyć nowy klucz dla każdej rewizji. Tylko najnowsza wersja klucza liczy się do wykorzystania pamięci, a wersje pozwalają na inspekcję lub przywracanie wcześniejszych wartości.

Użyj magazynów pamięci dla tymczasowych i szybko zmieniających się danych. Dane w magazynie pamięci wygasają automatycznie i nie dodają się do przechowywania w magazynie danych trwałych.

Usuń dane testowe, gdy testy się kończą, i usuń dane dla wygasłych wydarzeń lub wycofanych funkcji. Po oznaczeniu magazynu danych do usunięcia, istnieje 30-dniowy okres, w którym możesz go przywrócić. Po tych 30 dniach Roblox na stałe usuwa magazyn danych. Aby uzyskać więcej informacji, zobacz Menadżer Magazynów Danych.

Skonfiguruj przetwarzanie prawa do bycia zapomnianym

Skonfiguruj automatyczne przetwarzanie prawa do bycia zapomnianym (RTBF) dla danych gracza, które podążają za statycznymi wzorcami magazynów danych i kluczy. Automatyczne RTBF jest preferowanym workflow, ponieważ Roblox stosuje twoje szablony usunięcia, gdy przetwarza kwalifikowane żądanie.

Jeśli automatyczne RTBF nie obsługuje twojego schematu danych, użyj webhooka prawa do usunięcia, aby uruchomić niestandardowy workflow usunięcia. Upewnij się, że którykolwiek z workflowów usuwa wszystkie pasujące dane gracza.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.