Veri Depolarını Yönetme

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Verilerinizi yönetmek için versiyonlama, listeleme ve önbelleklemeyi kullanın.

Versiyonlama

Versiyonlanma, şu anda set, update ve crement verileriyle gerçekleşir. Fonksiyonlar 2>Class.GlobalDataStore:SetAsync()|SetAsync()2>, 5>

Yeniden yazma, yeni bir yazma üzerinde 30 gün sonra sona eriyor. En son versiyon asla sona ermez.

Aşağıdaki işlevler versiyonlama işlemlerini yapar:

FonksiyonAçıklama

ListVersionsAsync()

Tüm versiyonları bir anahtar için bir liste oluşturur, bir DataStoreVersionPages instansını döndürerek tüm versiyon numaralarını listeleyebilirsiniz. Versiyonları bir süre aralığını kullanarak filtreleyebilirsiniz.

GetVersionAsync()

Anahtarın versiyon numarasını kullanarak belirli bir versiyon alır.

RemoveVersionAsync()

Bir anahtarın belirli bir versiyonunu siler.

Bu işlev ayrıca önceki versiyonu koruyarak mezar taşı versiyonunu oluşturur. Örneğin, RemoveAsync("User_1234") ı çağırırken GetAsync("User_12

Kullanıcı isteklerini yönetmek için versiyonlama kullanabilirsiniz. Eğer bir kullanıcı 2020-10-09T01:42'de bir problem oluştuğunu bildirirse, aşağıdaki örnekte gösterildiği gibi verileri daha önce bir versiyona geri çevirebilirsiniz:


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)
-- Verilen zamana en yakın versiyonu alır
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
-- En yakın versiyonu okur
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- En yakın versiyonla bir değeri yeniden yazıyor
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- Girişler bulunamadı
end
end

Ekran Görüntüleri

Snapshot Data Stores Open Cloud API ile, bir deneyimdeki tüm veri depolarının bir günlüğü açık bulut API'si alabilirsiniz. Her gün bir deneyim güncellemesi değiştirmezseniz, bir günlüğü almak emin olun. Bir günlüğü almak, en son veri depolama mantığınızı değiştiren herhangi bir deneyim güncellemesini yayınlamadan önce

Örneğin, bir güncellemeyi 3:30 UTC'de yayınladığınızda, hasar veren verileri yazıp 3:00-3:30 UTC arasındaki herhangi bir veriyi yazarsanız, hasar veren veriler 3:29 UTC'de yazılan herhangi bir veriyi yazmaz. Ayrıca, 3:00-3:29 UTC aras

Listeler ve Prefixler

Veri depoları, isimlerin ilk n karakterleri listelenebilir. Örneğin, bir isimin ilk karakterleri gibi "d" veya "do" gibi bir isim, herhangi bir kлюç veya veri depolarında bir köpek olarak listelenebilir.

Tüm veri depolarını veya anahtarları listelerken bir başlangıç ​​belirtip sadece bu başlangıç ​​ile eşleşen nesneleri alabilirsiniz. Her iki Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync() ve Class.DataStoreListKeysAsync()|Class.DataStoreListKeys() fonksiyonları, listeyi listele

FonksiyonAçıklama
ListDataStoresAsync()Tüm veri depolarını listeler.
ListKeysAsync()Bir veri depolarındaki tüm anahtarları listeler.

Alanlar

Veri depolarındaki her anahtarın varsayılan bir küresel alanı vardır. Unique bir yol olarak küresel alanı ayarlayarak anahtarları daha da düzenleyebilirsiniz. Bu, tüm mağazaişlenmesi için veri depolarındaki tüm işlemlerin başlangıcına otomatik olarak bağlanır.

AnahtarMira
houses/User_1234evler
pets/User_1234evcil hayvanlar
inventory/User_1234envanter

Veri depolama ismi, alanı ve anahtarın bir kombinasyonu, bir anahtarı benzersiz bir şekilde tanımlar. Tüm üç değer, bir alanı olan bir anahtarı tanımlamak için gereklidir. Örneğin, şu global bir anahtar adını iletir: User_1234 ile:


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

Ancak, anahtarın User_1234 altın alanı varsa, sadece şu şekilde okuyabilirsiniz:


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

Tüm Özellikler

Class.DataStoreOptions``Class.DataStoreOptions.AllScopes|AllScopes özelliğini içerir, böylece listedeki tüm

AllScopes özelliğini kullandığınızda, GetDataStore() ikinci parametresi boş bir yuva olmalıdır ( "" ).


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

Class.DataStoreOptions.AllScopes|AllScopes özelliğini etkinleştirirseniz ve veri depolarında yeni bir anahtar oluşturursanız, her zaman bu anahtarın biçimini belirtmelisiniz. Aksi takdirde API'ler bir hata oluşturur. Örneğin

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

Çevirimi

Geçici olarak performansı artırmak ve sunucuya yapılan istekleri azaltmak için veri depolarından verileri geçici olarak depolamak için önbelleği kullanın. Örneğin, bir deneyim, verilerinin bir kopyasını depolayabilir, böylece başka bir çağrıya gerek olmadan hızlı erişim sağlayabilir.

Önbellekleme, veritabanı anahtarlarını kullanarak yapılan değişikliklere uygulanır:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() ve 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> kayışı uygulamayı

Varsayılan olarak, motor önbellekteki değerleri GetAsync() ile depolayır, böylece arka plana dört saniye içinde yerel bir cache'de depolanır. Ayrıca varsay

Class.GlobalDataStore:GetAsync()|GetAsync() önbelleklenmeyen bir değer alan yükseltmesi yapar ve dört saniye zamanlayıcıyı yeniden başlatır.

Önbelleği devre dışı bırakma

Sunuculardan en yeni değerleri almak için önbelleği devre dışı bırakmak ve DataStoreGetOptions parametresini Class.GlobalDataStore:GetAsync()|GetAsync() çağırıp ve 2> Class.DataStoreGetOptions.UseCache|UseCache2> öz

Önbelleği devre dışı bırakmak, yüksek frekanslı bir anahtara yazan çok sayıda sunucunuz varsa işletim için yararlıdır. Ancak, çok sayıda veri depolarınızın sınırlarını ve kısıtlama istekleri, önbelleği her zaman sunucu sınırlarınız üzerinde sayar.

Serileştirme

Class.DataStoreService , verileri JSON formatında depolar. Studio'da Lua verilerini kaydederken, Roblox seri hale dönüştürme adı verilen süreci kullanır ve bu verileri depolar için JSON olarak kaydeder. Roblox, dönüştürme sırasında verileri Lua'ya döndürür ve bunu depolar için de seri olarak kaydeder.

Serilizasyon ve şifre çözme aşağıdaki Lua veri türlerini destekler:

  • Sayılar
    • Özel sayı değerlerini inf, -inf ve nan olarak depolamayın, çünkü bu değerler JSON standartlarına uymıyor. Open Cloud'da bu değerleri içeren anahtarlara erişemezsiniz.
  • Masalar
    • Tablolar sadece desteklenen diğer veri türlerini içermelidir
    • Tablo uzunluğu 0 ise sayısal anahtarlar strung olarak çevirilir

Eğer seri hale getirmeyi desteklemiyen bir veri türü depolamaya çalışırsanız, ya:

  • Bu veri türünü depolamada başarısız ol ve bir hata mesajı al.
  • Bu veri türünü nil olarak depolayın.

Veri türünüzün neden nil olarak depolandığını depilerken kullanabilirsiniz. JSONEncode işlevini kullanarak, Lua veri türünüzü bu depolama ile gönderdiğinizde, gönderilen verileri gözden geçirip araştırabilirsiniz.