學習
引擎類別
DataStoreService
無法建立
服務
未複製

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


範例程式碼
數據存儲預算
local DataStoreService = game:GetService("DataStoreService")
for _,
enumItem in pairs(Enum.DataStoreRequestType:GetEnumItems()) do
print(enumItem.Name,
DataStoreService:GetRequestBudgetForRequestType(enumItem))
end

API 參考
方法
GetDataStore
功能: DataStore
DataStoreService:GetDataStore(
name:string, scope:string, options:Instance
參數
name:string
scope:string
預設值:"global"
options:Instance
預設值:"nil"
返回

GetGlobalDataStore
功能: DataStore
DataStoreService:GetGlobalDataStore():DataStore
返回
範例程式碼
獲取 GlobalDataStore 實例
-- 獲取 DataStoreService
local DataStoreService = game:GetService("DataStoreService")
-- 獲取 GlobalDataStore 實例
local GlobalDataStore = DataStoreService:GetGlobalDataStore()
print(GlobalDataStore.Name) -- 輸出 GlobalDataStore 的名稱

GetOrderedDataStore
功能: DataStore
DataStoreService:GetOrderedDataStore(
name:string, scope:string
參數
name:string
scope:string
預設值:"global"
範例程式碼
有序數據存儲基礎
local DataStoreService = game:GetService("DataStoreService")
local pointsStore = DataStoreService:GetOrderedDataStore("Points")
local function printTopTenPlayers()
local isAscending = false
local pageSize = 10
local pages = pointsStore:GetSortedAsync(isAscending, pageSize)
local topTen = pages:GetCurrentPage()
-- 'topTen' 中的數據 是以索引為頁面上的索引進行存儲
-- 對於每個項目,'data.key' 是有序數據存儲中的鍵,而 'data.value' 是值
for rank, data in ipairs(topTen) do
local name = data.key
local points = data.value
print(name .. " 的排名是 #" .. rank .. ",得分是 " .. points .. " 分")
end
-- 可能加載下一頁...
--pages:AdvanceToNextPageAsync()
end
-- 創建一些數據
pointsStore:SetAsync("Alex", 55)
pointsStore:SetAsync("Charley", 32)
pointsStore:SetAsync("Sydney", 68)
-- 顯示前十名 玩家
printTopTenPlayers()

GetRequestBudgetForRequestType
功能: DataStore
DataStoreService:GetRequestBudgetForRequestType(requestType:Enum.DataStoreRequestType):number
參數
返回
範例程式碼
印刷請求預算
local DataStoreService = game:GetService("DataStoreService")
local globalStore = DataStoreService:GetGlobalDataStore()
local function printBudget()
local budget = DataStoreService:GetRequestBudgetForRequestType(Enum.DataStoreRequestType.SetIncrementAsync)
print("當前的設置/增量預算:", budget)
end
for i = 1, 5 do
local key = "key" .. i
local success, err = pcall(function()
globalStore:SetAsync(key, true)
end)
if success then
printBudget()
else
print(err)
end
end

ListDataStoresAsync
暫停
功能: DataStore
DataStoreService:ListDataStoresAsync(
prefix:string, pageSize:number, cursor:string
參數
prefix:string
pageSize:number
預設值:0
cursor:string

SetRateLimitForRequestType
功能: DataStore
DataStoreService:SetRateLimitForRequestType(
requestType:Enum.DataStoreRequestType, baseLimit:number, perPlayerLimit:number
):()
參數
baseLimit:number
perPlayerLimit:number
返回
()
範例程式碼
設置速率限制
local MigrateScript = require(script.Parent.MigrateScript)
local DataStoreService = game:GetService("DataStoreService")
DataStoreService:SetRateLimitForRequestType(Enum.DataStoreRequestType.StandardRead, 1000, 0)
DataStoreService:SetRateLimitForRequestType(Enum.DataStoreRequestType.StandardWrite, 2000, 0) -- 兩次寫入,因此需要雙倍限制
DataStoreService:SetRateLimitForRequestType(Enum.DataStoreRequestType.StandardList, 100, 0)
DataStoreService:SetRateLimitForRequestType(Enum.DataStoreRequestType.StandardRemove, 1000, 0)
local sourceStore = DataStoreService:GetDataStore("ds_to_migrate")
local destinationStore1 = DataStoreService:GetDataStore("ds_destination_1")
local destinationStore2 = DataStoreService:GetDataStore("ds_destination_2")
-- 等待預算的助手
local function waitForBudget(requestType)
while (DataStoreService:GetRequestBudgetForRequestType(requestType) <= 0) do
task.wait(1)
end
end
waitForBudget(Enum.DataStoreRequestType.StandardList)
local success, pages = pcall(function()
return sourceStore:ListKeysAsync()
end)
if success then
while true do
local items = pages:GetCurrentPage()
for _, item in ipairs(items) do
-- 1. 從來源提取資料
waitForBudget(Enum.DataStoreRequestType.StandardRead)
local getSuccess, value = pcall(function()
return sourceStore:GetAsync(item.KeyName)
end)
if getSuccess and value ~= nil then
-- 2. 將資料遷移到目的地
waitForBudget(Enum.DataStoreRequestType.StandardWrite)
local setSuccess, err = pcall(function()
destinationStore1:SetAsync(item.KeyName, MigrateScript.Migrate1(value))
end)
if setSuccess then
print("成功將鍵遷移到目的地 1: " .. item.KeyName)
else
warn("Failed to migrate key to destination 1: " .. item.KeyName .. " - " .. tostring(err))
end
waitForBudget(Enum.DataStoreRequestType.StandardWrite)
local setSuccess, err = pcall(function()
destinationStore2:SetAsync(item.KeyName, MigrateScript.Migrate2(value))
end)
if setSuccess then
print("成功將鍵遷移到目的地 2: " .. item.KeyName)
else
warn("Failed to migrate key to destination 2: " .. item.KeyName .. " - " .. tostring(err))
end
-- 3. 從來源刪除資料
waitForBudget(Enum.DataStoreRequestType.StandardRemove)
local deleteSuccess, err = pcall(function()
sourceStore:RemoveAsync(item.KeyName)
end)
if deleteSuccess then
print("成功從來源刪除鍵: " .. item.KeyName)
else
warn("Failed to delete key from source: " .. item.KeyName .. " - " .. tostring(err))
end
else
warn("無法從來源獲取鍵: " .. item.KeyName)
end
end
if pages.IsFinished then break end
-- 3. 前進頁面
waitForBudget(Enum.DataStoreRequestType.StandardList)
local nextSuccess = pcall(function()
pages:AdvanceToNextPageAsync()
end)
if not nextSuccess then
warn("無法前進到下一頁。")
break
end
end
print("遷移過程完成。")
else
warn("無法列出鍵。")
end

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。