Gestire i negozi di dati

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Gestisci i tuoi dati usando la versioning, la lista e la cache.

Versione

La versionizzazione avviene quando impostate set, aggiornate e incrementate i dati. Le funzioni 1> Class.GlobalDataStore:SetAsync()|SetAsync()1> , 4> Class.GlobalDataStore:Update

I backup versionati scadono 30 giorni dopo un nuovo write overwrzes them. The latest version never expires.

Le seguenti funzioni eseguono operazioni di versionamento:

FunzioneDescrizione

ListVersionsAsync()

Elenca tutte le versioni per una chiave restituendo un'istanza DataStoreVersionPages che puoi utilizzare per contare tutti i numeri di versione. Puoi filtrare le versioni utilizzando un intervallo di tempo.

GetVersionAsync()

Recupera una versione specifica di una chiave utilizzando il suo numero di versione.

RemoveVersionAsync()

Elimina una versione specifica di una chiave.

Questa funzione crea anche una versione tombstone mentre si mantiene la versione precedente. Ad esempio, se chiami RemoveAsync("User_1234") e poi provi a chiamare GetAsync("User_1234"), ottieni nil</

Puoi usare la versionizzazione per gestire le richieste dell'utente. Se un utente segnala che un problema si è verificato il 2020-10-09T01:42, puoi ripristinare i dati a una versione precedente usando il seguente esempio:


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local DATA_STORE_KEY = "User_1234"
local maxDate = DateTime.fromUniversalTime(2020, 10, 09, 01, 42)
-- Ottiene la versione più vicina al tempo specificato
local listSuccess, pages = pcall(function()
return experienceStore:ListVersionsAsync(DATA_STORE_KEY, Enum.SortDirection.Descending, nil, maxDate.UnixTimestampMillis)
end)
if listSuccess then
local items = pages:GetCurrentPage()
if #items > 0 then
-- Legge la versione più recente
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- Ripristina il valore corrente sovrascrivendolo con la versione più recente
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- Nessun risultato trovato
end
end

Raccolta

Il Snapshot Data Stores Open Cloud API ti consente di fare uno screenshot di tutti i datastore in un'esperienza una volta al giorno. Prima di pubblicare qualsiasi aggiornamento dell'esperienza che cambia la tua logica di archiviazione dei dati, assicurati di fare uno screenshot. Prendendo uno screenshot garantisce che tu abbia l'ultima versione disponibile dei datastore dalla versione precedente dell'esperienza.

Ad esempio, senza uno screenshot, se pubblichi un aggiornamento alle 3:30 UTC che causa la corruzione dei dati, i dati corrotti sovrascrive i dati scritti tra 3:00-3:30 UTC. Se prendi uno screenshot alle 3:29 UTC, tuttavia, i dati corrotti non sovrascrive nulla scritto prima di 3:29 UTC, e i dati più recenti per tutte le chiavi scritte tra

Liste e Prefissi

I magazzini di dati ti consentono di elencare in base al prefisso. Ad esempio, elencare in base ai primi n caratteri di un nome, come "d" , "do" o "dog" per qualsiasi key o magazzino di dati con un prefisso di "dog".

Puoi specificare un prefisso quando elencare tutti i datastore o chiavi, e ottenere solo oggetti che corrispondono a quel prefisso. Entrambi ListDataStoresAsync() e ListKeysAsync() funzioni restituiscono un oggetto DataStoreListingPages che puoi utilizzare

FunzioneDescrizione
ListDataStoresAsync()Elenca tutti i negozi di dati.
ListKeysAsync()Elenca tutte le chiavi in un Negoziodi dati.

Campi di visione

Ogni chiave in un data store ha uno scope globale predefinito. Puoi organizzare le chiavi ulteriormente impostando una stringa unica come uno scope per il secondo parametro di GetDataStore() . Questo attacca automaticamente lo scope all'inizio di tutte le operazioni eseguite sul data Negozio.

ChiaveScopo
houses/User_1234case
pets/User_1234animale domestico
inventory/User_1234inventario, reportorio

La combinazione di nome del magazzino dati, scala e chiave identifica unica e distinta una chiave. Tutti e tre i valori sono richiesti per identificare una chiave con una scala. Ad esempio, puoi leggere una chiave globale chiamata User_1234 come:


local DataStoreService = game:GetService("DataStoreService")
local inventoryStore = DataStoreService:GetDataStore("PlayerInventory")
local success, currentGold = pcall(function()
return inventoryStore:GetAsync("User_1234")
end)

Se la chiave User_1234 ha uno scopo d'oro, però, puoi leggere solo come:


local DataStoreService = game:GetService("DataStoreService")
local inventoryStore = DataStoreService:GetDataStore("PlayerInventory", "gold")
local success, currentGold = pcall(function()
return inventoryStore:GetAsync("User_1234")
end)

Proprietà di tutti gli scope

DataStoreOptions contiene una proprietà AllScopes che ti consente di restituire le chiavi da tutti gli <

Quando si utilizza la ProprietàAllScopes, il secondo parametro di GetDataStore() deve essere una stringa vuota ( "" ).


local DataStoreService = game:GetService("DataStoreService")
local options = Instance.new("DataStoreOptions")
options.AllScopes = true
local ds = DataStoreService:GetDataStore("DS1", "", options)

Se abiliti la proprietà AllScopes e crei una nuova chiave nel data Negozio, devi sempre specificare uno scopo per quella chiave nel formato di uno scopo/keyname. Se non lo fai, le API mostreranno un errore. Ad esempio, gold/player_34545 è accettabile con l'oro

global/K1house/K1
global/L2house/L2
global/M3house/M3

Caching

Usa il cache per memorizzare temporaneamente i dati dai magazzini di dati per migliorare le prestazioni e ridurre il numero di richieste fatte al Server. Ad esempio, un'esperienza può memorizzare una copia dei suoi dati in modo che possa accedervi rapidamente senza dover fare un'altra chiamata al data Negozio.

Il cache si applica alle modifiche che apporti alle chiavi del magazzino dei dati usando:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() e 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> non implementano la cache e ottengono sempre i dat

Per impostazione predefinita, il motore utilizza GetAsync() per memorizzare i valori che recuperi dal backend in una cache locale per quattro secondi. Inoltre, GetAsync() richiede le

Tutti GetAsync() chiamate che recuperano un valore non memorizzato dall'aggiornamento del backend aggiornano immediatamente la cache e riavviano il timer di quattro secondi.

Disattivare la cache

Per disabilitare la cache e ottenere l'ultimo valore aggiornato dai server, aggiungi il parametro DataStoreGetOptions al tuo Class.GlobalDataStore:GetAsync()|GetAsync() chiamata e imposta la proprietà Class.DataStoreGetOptions su 2>2>

Disabilitare la cache è utile se hai più server che scrivono a una chiave con una frequenza elevata e devi ottenere il valore più recente dai server. Tuttavia, può causarti di consumare più dei tuoi limiti e quotazioni dei dati , poiché le richieste Class.GlobalDataStore:GetAsync()|GetAsync() scavalcano sempre la cache, contando sempre il tuo flusso di dati e i limiti dei server.

Serializzazione

Il DataStoreService memorizza i dati in formato JSON. Quando salvi i dati in Lua in Studio, Roblox usa un processo chiamato serializzazione per convertire quei dati in JSON per salvarli negli archivi dei dati. Roblox poi converte i tuoi dati in Lua e li restituisce in un altro processo chiamato deserializzazione.

La serializzazione e la deserializzazione supportano i seguenti tipi di dati Lua:

  • Numeri
    • Non dovresti memorizzare i valori numerici speciali inf , -inf e nan, poiché questi valori non sono conformi agli standard JSON. Non puoi accedere ai chiavi che contengono questi valori con Open Cloud.
  • Tabelle
    • Le tabelle devono contenere solo altri tipi di dati supportati
    • Le chiavi numeriche vengono tradotte in stringhe se la lunghezza della tabella è 0

Se tenti di memorizzare un tipo di dati che la serializzazione non Assistenza, devi:

  • Falliti nel memorizzare quel tipo di dati e ottieni un Messaggiodi errore.
  • Riusci a memorizzare quel tipo di dati come nil .

Per debuggare il motivo per cui il tuo tipo di dati viene archiviato come nil, puoi usare la funzione JSONEncode. Quando passi il tuo tipo di dati in questa funzione, ricevi il suo ritorno nel formato Roblox che memorizza i dati, in modo da poter visualizzare e investigare i dati restituiti.