Büyüyen Roblox oyunlarında en sık karşılaşılan sorun "DataStore request was added to queue and dropped" hatasıdır. Her altın kazanımında veya envanter değişiminde GetAsync veya SetAsync çağırmak bütçeyi tüketir ve veri kaybına yol açar.
Bu rehber, prodüksiyon mimarilerini inceler: anlık istek bütçesi takibi, kirli bayrak (dirty flag) tabanlı bellek önbelleği, üstel geri çekilme ile UpdateAsync yeniden deneme döngüleri ve oturum kilitleme mekanizmaları.
Roblox, sunucudaki oyuncu sayısına göre katı sınırlar uygular:
60 + (oyuncuSayisi * 10) istek.60 + (oyuncuSayisi * 10) yazma isteği.Büyük ölçekli oyunlar için temel veri mimarisi:
game:BindToClose() ile paralel olarak kaydedin.-- Safe DataStore Write with Exponential Backoff and Budget Check
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local PlayerDataStore = DataStoreService:GetDataStore("PlayerCore_v1")
local MAX_RETRIES = 3
local BASE_DELAY = 1.5
local function safeUpdateAsync(key, transformFunc)
local budget = DataStoreService:GetRequestBudgetForRequestType(Enum.DataStoreRequestType.UpdateAsync)
if budget < 5 then
warn("[DataStore] Throttling warning: Low budget for UpdateAsync (" .. tostring(budget) .. ")")
end
local success, result
local attempts = 0
repeat
attempts = attempts + 1
success, result = pcall(function()
return PlayerDataStore:UpdateAsync(key, transformFunc)
end)
if not success then
local delayTime = BASE_DELAY * (2 ^ (attempts - 1)) + math.random() * 0.5
warn("[DataStore] Attempt " .. attempts .. " failed: " .. tostring(result) .. ". Retrying in " .. string.format("%.2f", delayTime) .. "s")
task.wait(delayTime)
end
until success or attempts >= MAX_RETRIES
return success, result
end
Hızlı sunucu geçişlerinde (server hop) oluşan açıkları engelleme:
Oyun güncellemelerinde veri bütünlüğünü koruma:
_SchemaVersion alanı ile yapı değişikliklerini izleme.Roblox sunucularını aşırı yükten korumak için aynı anahtara 6 saniye içinde birden fazla yazma yapılmasını engeller.
Oturum kilitleme, otomatik kaydetme ve sunucu kapanışında veri kurtarmayı standart olarak sağlar.
Oyun ayarlarından API erişimini açıp GetRequestBudgetForRequestType() fonksiyonunu inceleyebilirsiniz.
Kayıtları tek tek döngüyle yapmak yerine task.spawn ile paralel asenkron gruplar halinde kaydetmelisiniz.
Bilişsel profilinizi analiz edin ve DopaBrain araçlarıyla geliştirici yeteneklerinizi güçlendirin.
DopaBrain Bilişsel Testlerini Başlat