管理資料儲存

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

使用版本管理、清單和儲存來管理您的資料。

版本管理

版本發生在你 設定、更新 和 增量 資料時。 功能 2>Class.GlobalDataStore:SetAsync()|SetAsync()2>、5>Class.GlobalDataStore:UpdateAsync()|Update

版本過時的備份在新的寫入後 30 天會過期。最新版本永遠不會過期。

下列功能執行版本操作:

函數說明

ListVersionsAsync()

列出所有版本,並且返回 DataStoreVersionPages 實例,以便您使用它來枚數所有版本。您可以使用時間範圍來過濾版本。

GetVersionAsync()

使用鑰鍵的版本號取回特定版本的鑰匙。

RemoveVersionAsync()

刪除特定版本的鑰鍵。

此功能也會在保留以前版本的情況下創建墓碑版本。例如,如果您調用 RemoveAsync("User_1234") 並嘗試 GetAsync("User_1234")

您可以使用版本來處理用戶請求。如果用戶在 2020-10-09T01:42 報告發生了問題,您可以使用以下範例將資料重新寫入到以前版本:


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)
-- 取得最接近指定時間的版本
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
-- 閱讀最近的版本
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- 以最近版本覆蓋現有值
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- 找不到結果
end
end

截圖

快照資料存取開啟雲朵 API 讓您每天可以檢查任意資料存取的快照。在發布任何更新您的資料存储論理時,請務必檢查快照。檢取快照將確保您有最新的資料可用。

例如,沒有儲存截圖時,如果在 UTC 3:30 發布更新,導致資料損壞,那麼損壞的資料會覆蓋任何寫在 3:00-3:30 之間的資料。 如果您在 UTC 3:29 發布截圖,那麼損壞的資料並不會覆蓋任何寫在

清單和據點

資料存取讓您以預碼列出。例如,以 "d"、"do" 或 "dog" 的名稱列出,以任何與 "dog" 預碼的鑰匙或資料存取處。

您可以在列出所有數據儲存或鑰匙時指定一個擬稱,並且僅返回與此擬稱匹配的對象。 ListDataStoresAsync()ListKeysAsync() 功能都會返回一個 Class.DataStoreList

函數說明
ListDataStoresAsync()列出所有資料儲存。
ListKeysAsync()列出資商店 商家存取中的所有鑰匙。

範圍

資料存取服務的每個鑰匙都有預設全球範圍。您可以通過設置獨一無二的字串作為 GetDataStore() 的範圍來組織鑰匙。這會自動將範圍設置為所有操作完成後的所有鑰商店 商家的開始。

鑰匙範圍
houses/User_1234房屋
pets/User_1234寵物
inventory/User_1234道具欄

資料存取名、範圍和鑰匙的結合,讓鑰匙獨一無二地識別鑰鍵。 您需要三個值來識別具有範圍的鑰匙。 例如,您可以以 User_1234 的全球鑰匙名稱來讀取:


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

如果鑰匙 User_1234 有金屬範圍,你只能讀作:


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

AllScopes 屬性

DataStoreOptions 包含一個 AllScopes 屬性,讓您可以從所有

當你使用 AllScopes 屬性時,GetDataStore() 的第二個參數必須為空串 ( "" )。


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

如果您啟用 AllScopes 屬性並在數據存取中建立新鑰匙,您必須總是在鑰匙/鑰匙名格式的鑰匙上指定鑰匙。 如果您未指定鑰匙,則 API 將發

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

儲存

使用儲存暫時存儲資料,從資料存儲中擷取資料,以提高性能並減少對伺服器的請求。舉例來說,體驗可以暫時儲存資料,以便可以快速存取資料,而不需要另一個呼叫到資料存商店 商家。

監視適用於您使用:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() 和 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> 不實現導

預設情況下,引擎會使用 GetAsync() 來在本地 cache 中儲存您從後端取得的值,四秒後自動斷開與後端的連接。您的 Class.GlobalData

所有 GetAsync() 呼叫取回端口端未儲存的值,立即更新隨機值,重新啟動四秒鐘計時器。

停用導入

要禁用儲存,並且從服務器上取得最新值的方式,將 DataStoreGetOptions 參數添加到您的 Class.GlobalDataStore:GetAsync()|GetAsync() 呼叫,並將 Class.DataStoreGetOptions.UseCache|UseCache 屬性設為 2>Class.DataStoreGetOptions.IgnoreKeys

停用盤階是如果您有多個服務器寫入鑰匙並需要從服務器上取得最新值的情況下所有最好的方法。但是,它可能會導致您消耗更多的資料存放限制和額外,因為Class.GlobalDataStore:GetAsync()|GetAsync()要求盤階通過盤階通過2>通過</

serial化

Class.DataStoreService 在 JSON 格式儲存資料。當您在 Studio 儲存 Lua 資料時,Roblox 會使用名為 serialization 的過程來將該資料轉換為 JSON 以儲存在資料存取中。Roblox 會然後將您的資料轉換回 Lua 並在另一個過程中稱為 deserialization 返回給您。

串化和解串化支持以下 Lua 資料類型:

  • 數量
    • 您不應該存儲特殊數字值 inf-infnan ,因為這些值不適用於 JSON 標準。您無法使用 Open Cloud 存取這些值。
  • 桌子
    • 桌子只能包含其他支持的資料類型
    • 如果表的長度為 0 ,數字鍵會轉換為字串

如果您嘗試存儲不協助持串行化的資料類型,您將以下方式做:

  • 儲存此資訊息類型時發生錯誤。
  • 成功存儲該資料類型為 nil

要確認為什麼您的資料類型存儲為 nil,您可以使用 JSONEncode 函數。當您將 Lua 資料類型傳入此函數時,您將它返回在 Roblox 的資料儲存中,讓您預覽和調查返回的資料。