요약
메서드
GetDataStore(name: string,scope: string,options: Instance):DataStore |
GetOrderedDataStore(name: string,scope: string):OrderedDataStore |
GetRequestBudgetForRequestType(requestType: Enum.DataStoreRequestType):number |
ListDataStoresAsync(prefix: string,pageSize: number,cursor: string):DataStoreListingPages |
SetRateLimitForRequestType(requestType: Enum.DataStoreRequestType,baseLimit: number,perPlayerLimit: number):() |
상속된 멤버
코드 샘플
데이터 저장소 예산
local DataStoreService = game:GetService("DataStoreService")
for _, enumItem in pairs(Enum.DataStoreRequestType:GetEnumItems()) do
print(enumItem.Name, DataStoreService:GetRequestBudgetForRequestType(enumItem))
endAPI 참조
메서드
GetDataStore
GetGlobalDataStore
GetOrderedDataStore
코드 샘플
주문형 데이터 저장소 기본
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'는 OrderedDataStore의 키이고 '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)
-- 상위 10명의 플레이어를 표시합니다.
printTopTenPlayers()GetRequestBudgetForRequestType
매개 변수
반환
코드 샘플
인쇄 요청 예산
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
endListDataStoresAsync
DataStoreService:ListDataStoresAsync(
SetRateLimitForRequestType
DataStoreService:SetRateLimitForRequestType(
):()
매개 변수
반환
()
코드 샘플
비율 제한 설정
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("목적지 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("목적지 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("소스에서 키를 삭제하는 데 실패했습니다: " .. 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