Datenspeicher

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Die DataStoreService lässt dich Daten speichern, die zwischen Sitzungen bestehen müssen, wie Artikel im Inventar eines Spieler:inoder Fähigkeitspunkte.Datenspeicher sind für jede Erlebniskonsistent, sodass jede Stelle in einer Erfahrung auf die gleichen Daten zugreifen und ändern kann, einschließlich Orten auf verschiedenen Servern.

Wenn du granulare Berechtigungskontrollen zu deinen Datenlagern hinzufügen und auf sie außerhalb von Studio- oder Roblox-Servern zugreifen möchtest, kannst du Open Cloud APIs für Datenlagern verwenden.

Um alle Datenspeicher in einem Erlebnis durch den Creator-Hub anzuzeigen und zu überwachen, verwende den Datenspeicher-Manager.

Für vorübergehende Daten, die du häufig aktualisieren oder zugreifen musst, verwende Speicherstände.

Studio-Zugriff aktivieren

Standardmäßig können Erlebnisse, die in Studio getestet wurden, keine Datenbanken zugreifen, daher musst du sie zuerst aktivieren.Der Zugriff auf Datenspeicher in Studio kann für Live-Erlebnisse gefährlich sein, weil Studio auf die gleichen Datenspeicher zugreift wie die Client-Anwendung.Um Produktionsdaten zu vermeiden, aktiviere diese Einstellung nicht für Live-Erlebnisse.Stattdessen aktiviere es für eine separate Testversion des Erlebnisses.

Um den Studio-Zugriff in einer veröffentlichten Erlebniszu aktivieren:

  1. Navigiere zu Sicherheit .
  2. Aktivieren Sie die Aktivieren von Studio-Zugriff auf API-Dienste umschalten.
  3. Klicken Sie auf Speichern .

Zugriffsdatenspeicher

Um auf einen Datenstore innerhalb einer Erlebniszuzugreifen:

  1. Füge DataStoreService zu einer serverseitigen Script hinzu.
  2. Verwende die GetDataStore()-Funktion und gib den Namen des Datenspeichers an, den du verwenden möchtest.Wenn der Datenspeicher nicht existiert, erstellt Studio einen, wenn du deine Erfahrungsdaten zum ersten Mal speicherst.

local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")

Daten erstellen

Ein Datenspeicher ist im Wesentlichen ein Wörterbuch, ähnlich einem Luau-Tabellen.Ein einzigartiger Schlüssel -Index dokumentiert jeden Wert im Store, wie einen einzigartigen Player.UserId eines Benutzers oder einen benannten String für ein Erlebnis-Promo.

Schlüssel Wert
3125060850
35167597920
50530609278000
Schlüssel Wert
ActiveSpecialEventSommerparty2
ActivePromoCodeBONUS123
CanAccessPartyPlacewahr

Um einen neuen Eintrag zu erstellen, rufen Sie SetAsync() mit dem Schlüsselnamen und einem Wert auf.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end

Daten aktualisieren

Um einen gespeicherten Wert in einem Storezu ändern, rufen Sie UpdateAsync() mit dem Schlüsselnamen des Eintrags und einer Rückruffunktion auf, die definiert, wie Sie den Eintrag aktualisieren möchten.Dieser Rückruf nimmt den aktuellen Wert und gibt einen neuen Wert basierend auf der von Ihnen definierten Logik zurück.Wenn der Rückruf nil zurückgibt, wird die Schreiboperation abgebrochen und der Wert wird nicht aktualisiert.


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end

Setzen vs Update

Verwende set, um einen bestimmten Schlüssel schnell zu aktualisieren. Die SetAsync()-Funktion:

  • Kann zu Datenunzulänglichkeit führen, wenn zwei Server gleichzeitig denselben Schlüssel festlegen
  • Zählt nur gegen das Schreiblimit

Verwende das Update, um mehrere Serverversuche zu verwalten. Die UpdateAsync() Funktion:

  • Liest den aktuellen Schlüsselwert vom Server, der ihn zuletzt aktualisiert hat, bevor er Änderungen vornimmt
  • Ist langsamer, weil es liest, bevor es schreibt
  • Zählt gegen beide Lesegrenzen und Schreibgrenzen

Daten lesen

Um den Wert eines Datenspeicher-Eintrags zu lesen, rufe GetAsync() mit dem Schlüsselnamen des Eintrags auf.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end

Zunahme der Daten

Um eine Zahl im Storezu erhöhen, rufe IncrementAsync() mit dem Schlüsselnamen des Eintrags und einer Zahl für die Änderungsmenge auf, um den Wert zu ändern. IncrementAsync() ist eine Komfortfunktion, die es Ihnen ermöglicht, UpdateAsync() nicht aufzurufen und den ganzzahligmanuell zu erhöhen.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end

Daten löschen

Um einen Eintrag zu löschen und den mit dem Schlüssel verbundenen Wert zurückzugeben, rufen Sie RemoveAsync() auf.


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end

Metadaten

Es gibt zwei Arten von Metadaten, die mit Schlüsseln verbunden sind:

  • Service definiert : Standardlesbare Metadaten, wie die jüngste Aktualisierungszeit und die Erstellungszeit. Jedes Objekt hat Metadaten, die vom Service definiert wurden.
  • Benutzerdefiniert : Benutzerdefinierte Metadaten für Markierung und Kategorisierung. Definiert mit dem DataStoreSetOptions Objekt und der SetMetadata() Funktion.

Um Metadaten zu verwalten, erweitern Sie die SetAsync(), UpdateAsync(), GetAsync(), IncrementAsync() und RemoveAsync() Funktionen.

  • SetAsync() akzeptiert die optionalen dritten und vierten argumente:

    • Eine Tabelle von UserIds. Dies kann bei der Content-Copyright- und Urheberrechtsverfolgung und -entfernung helfen.

    • Ein DataStoreSetOptions Objekt, in dem Sie benutzerdefinierte Metadaten mit der SetMetadata() Funktion definieren können.


      local DataStoreService = game:GetService("DataStoreService")
      local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
      local setOptions = Instance.new("DataStoreSetOptions")
      setOptions:SetMetadata({["ExperienceElement"] = "Fire"})
      local success, errorMessage = pcall(function()
      experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)
      end)
      if not success then
      print(errorMessage)
      end
  • GetAsync() , IncrementAsync() und RemoveAsync() geben eine zweite Werte im DataStoreKeyInfo Objekt zurück.Dieser zweite Wert enthält sowohl service definierte Eigenschaften als auch Funktionen, um benutzerdefinierte Metadaten abzurufen.

    • Die GetUserIds()-Funktion ruft die Tabelle von UserIds ab, die Sie an SetAsync() übergeben haben.
    • Die GetMetadata() Funktion ruft benutzerdefinierte Metadaten ab, die Sie über SetAsync() an SetMetadata() übermittelt haben.
    • Die Version-Eigenschaft holt die Version des Schlüssels ab.
    • Die Eigenschaft CreatedTime holt die Zeit, zu der der Schlüssel erstellt wurde, formatiert als die Anzahl der Millisekunden seit der Epoche.
    • Die UpdatedTime-Eigenschaft holt das letzte Mal, dass der Schlüssel aktualisiert wurde, formatiert als die Anzahl der Millisekunden seit der Epoche.

    local DataStoreService = game:GetService("DataStoreService")
    local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
    local success, currentExperience, keyInfo = pcall(function()
    return experienceStore:GetAsync("User_1234")
    end)
    if success then
    print(currentExperience)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end
  • Die Rückruffunktion von UpdateAsync() nimmt einen zusätzlichen Parameter im DataStoreKeyInfo Objekt auf, das den aktuellen Schlüsselzustand beschreibt.Es gibt den modifizierten Wert, die mit UserIds verbundenen Schlüssel und die Metadaten des Schlüssels zurück.


    local DataStoreService = game:GetService("DataStoreService")
    local nicknameStore = DataStoreService:GetDataStore("Nicknames")
    local function makeNameUpper(currentName, keyInfo)
    local nameUpper = string.upper(currentName)
    local userIDs = keyInfo:GetUserIds()
    local metadata = keyInfo:GetMetadata()
    return nameUpper, userIDs, metadata
    end
    local success, updatedName, keyInfo = pcall(function()
    return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
    end)
    if success then
    print(updatedName)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end

Für Einschränkungen bei der Definition von Metadaten siehe die Metadaten-Grenzen.

Bestellte Datenspeicher

Standardmäßig sortieren Datenlagers nicht ihren Inhalt.Wenn Sie Daten in einer geordneten Weise erhalten müssen, wie in persistenten Ranglistenstatistiken, rufen Sie GetOrderedDataStore() anstelle von GetDataStore() an.


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")

Sortierte Datenspeicher unterstützen die gleichen grundlegenden Funktionen wie Standard-Datenspeicher, plus die einzigartige GetSortedAsync()-Funktion.Dies ruft mehrere sortierte Schlüssel ab, basierend auf einer bestimmten Sortierungs顺序, Seitengröße und Mindest-/Höchstwerten.

Das folgende Beispiel sortiert Charakterdaten in Seiten mit drei Einträgen, jedem in absteigender Reihenfolge, und durchläuft dann die Seiten und gibt den Namen und das Alter jedes Charakters aus.


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- Füllt den angeordneten Storeauf
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- Sortiert Daten nach absteigender Reihenfolge in Seiten mit jeweils drei Einträgen
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- Holt die aktuelle (erste) Seite
local entries = pages:GetCurrentPage()
-- Iteriert durch alle Schlüssel-Wert-Paare auf der Seite
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Überprüft, ob die letzte Seite erreicht wurde
if pages.IsFinished then
break
else
print("----------")
-- Vorstöße auf die nächste Seite
pages:AdvanceToNextPageAsync()
end
end
end