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:
Fonksiyon | Açıklama |
---|---|
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. | |
Anahtarın versiyon numarasını kullanarak belirli bir versiyon alır. | |
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
Fonksiyon | Açı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.
Anahtar | Mira |
---|---|
houses/User_1234 | evler |
pets/User_1234 | evcil hayvanlar |
inventory/User_1234 | envanter |
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 = truelocal 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/K1 | house/K1 |
global/L2 | house/L2 |
global/M3 | house/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:
- IncrementAsync() ile veri artışı .
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.