Veri depoları

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

The DataStoreService ile oturumlar arasında sürekli olması gereken verileri depolayabilirsiniz, oyuncunun envanterindeki öğeler veya beceri noktaları gibi.Veri depoları deneyime göre tutarlıdır, bu nedenle deneyimdeki herhangi bir yer farklı sunuculardaki yerler de dahil olmak üzere aynı verilere erişebilir ve değiştirebilir.

Veri depolarına granüler izin kontrolü eklemek ve Studio veya Roblox sunucularının dışına erişmek istiyorsanız, Veri depoları için Açık Bulut API'lerini kullanabilirsiniz.

Deneyimdeki tüm veri depolarını Yaratıcı Merkez aracılığıyla görüntülemek ve izlemek için Veri Depolama Yöneticisi kullanın.

Sık sık güncellemeniz veya erişmeniz gereken geçici veriler için bellek depoları kullanın.

Studio erişimini etkinleştir

Varsayılan olarak, Studio'da test edilen deneyimler veri depolarına erişemez, bu yüzden önce etkinleştirmeniz gerekir.Studio'daki veri depolarına erişmek, canlı deneyimler için tehlikeli olabilir çünkü Studio, aynı veri depolarına istemci uygulaması aracılığıyla erişir.Üretim verilerini üzerine yazmaktan kaçınmak için, canlı deneyimler için bu ayarı etkinleştirmeyin.Bunun yerine, deneyimin ayrı bir test sürümü için etkinleştirin.

Studio erişimini yayınlanmış bir deneyimde etkinleştirmek için:

  1. Navigate to Güvenlik .
  2. API Hizmetlerine Stüdyo Erişimini Etkinleştir geçişini etkinleştirin.
  3. Tıklayın Kaydet .

Erişim veri depoları

Deneyim içinde bir veri depolarına erişmek için:

  1. Bir sunucu tarafına DataStoreService ekleyin Script .
  2. GetDataStore() fonksiyonunu kullanın ve kullanmak istediğiniz veri depolama adını belirtin.Veri depoları mevcut değilse, deneyim verilerinizi ilk kez kaydettiğinizde Studio bir tane oluşturur.

local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")

Veri oluşturma

Veri depoları temelde bir Luau tablosuna benzer bir sözlüktür.Eşsiz bir anahtar indeksi, veri mağazaher değeri bir kullanıcının benzersiz Player.UserId veya bir deneyim promosyonu için adlandırılmış bir dize gibi etiketler.

Kullanıcı veri anahtarı Değer
3125060850
35167597920
50530609278000
Promosyon veri anahtarı Değer
ActiveSpecialEventYaz Partisi2
ActivePromoCodeBONUS123
CanAccessPartyPlacedoğru

Yeni bir giriş oluşturmak için, anahtar adı ve bir değer ile SetAsync() 'yi arayın.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end

Verileri güncelle

Bir veri mağazadepolanan herhangi bir değeri değiştirmek için, girişin anahtar adıyla UpdateAsync() 'yi arayın ve girişi nasıl güncelleştirmek istediğinizi tanımlayan bir geri çağrı işlevi.Bu geri arama mevcut değeri alır ve tanımladığınız mantığa dayanarak yeni bir değer döndürür.Geri çağrılma nil döndürürse, yazma işlemi iptal edilir ve değer güncellenmez.


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end

Set vs güncelleme

Özel bir anahtarı hızlı bir şekilde güncellemek için ayarı kullanın. SetAsync() fonksiyonu:

  • İki sunucu aynı anda aynı anahtarı ayarmaya çalışırsa veri tutarsızlığına neden olabilir
  • Sadece yazma sınırına karşı sayılır

Güncellemeyi çok sunucu denemelerini ele almak için kullanın. UpdateAsync() fonksiyonu:

  • Herhangi bir değişiklik yapmadan önce sunucu tarafından son kez güncellenen mevcut anahtar değerini okur
  • Yazmadan önce okuduğu için daha yavaş
  • Hem okuma hem de yazma sınırlarına karşı sayılır

Verileri oku

Bir veri depolama girişinin değerini okumak için, girişin anahtar adıyla GetAsync() 'yi arayın.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end

Artırma verileri

Bir veri mağazabir sayı artırmak için, girişin anahtar adı ve değeri değiştirecek miktar için bir sayı ile IncrementAsync() 'yi arayın.IncrementAsync() bir rahatlık işlevidir ve UpdateAsync() 'yi çağırmayı ve sayıyı manuel olarak artırmayı engeller.


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end

Verileri kaldır

Bir girişi kaldırmak ve anahtar ile ilişkili değeri geri dönüştürmek için RemoveAsync() 'yi arayın.


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end

Meta veriler

Anahtarlarla ilişkili iki tür metadat var:

  • Hizmet tarafından tanımlanmış : En son güncelleme süresi ve oluşturma süresi gibi varsayılan okunabilir metad veriler, her nesneye hizmet tarafından tanımlanmıştır.
  • Kullanıcı tanımlı : Etiketleme ve kategorizasyon için özel metadatlar. DataStoreSetOptions nesnesi ve SetMetadata() fonksiyonu kullanılarak tanımlandı.

Metadatları yönetmek için, SetAsync() , UpdateAsync() , GetAsync() , IncrementAsync() ve RemoveAsync() fonksiyonlarını genişletin.

  • SetAsync() zorunlu üçüncü ve dördüncü argümanları kabul eder:

    • UserIds 'den bir tablo. Bu, içerik telif hakları ve entelektüel mülkiyet izleme ve kaldırma konusunda yardımcı olabilir.

    • Bir DataStoreSetOptions nesne, SetMetadata() işlevini kullanarak özel metadat tanımlayabileceğiniz yer.


      local DataStoreService = game:GetService("DataStoreService")
      local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
      local setOptions = Instance.new("DataStoreSetOptions")
      setOptions:SetMetadata({["ExperienceElement"] = "Fire"})
      local success, errorMessage = pcall(function()
      experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)
      end)
      if not success then
      print(errorMessage)
      end
  • GetAsync() , IncrementAsync() ve RemoveAsync() , DataStoreKeyInfo nesnesinde ikinci bir değer döndürür.Bu ikinci değer, kullanıcı tarafından tanımlanan metadatları almak için hem hizmet tarafından tanımlanan özellikleri hem de işlevleri içerir.

    • The GetUserIds() fonksiyonu, geçtiğiniz UserIds tablosunu alır SetAsync() .
    • The GetMetadata() fonksiyonu, SetAsync() aracılığıyla geçirdiğiniz kullanıcı tanımlı metadatayı alır SetMetadata() .
    • The Version özelliği anahtarın sürümünü alır.
    • The CreatedTime özelliği, anahtarın oluşturulduğu süreyi alır, anahtarın oluşturulduğu andan itibaren milisaniye sayısı olarak biçimlendirilir.
    • The UpdatedTime özelliği, anahtarın son kez güncellendiği, epokadan milisaniye sayısı olarak biçimlendirildiği son kez alır.

    local DataStoreService = game:GetService("DataStoreService")
    local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
    local success, currentExperience, keyInfo = pcall(function()
    return experienceStore:GetAsync("User_1234")
    end)
    if success then
    print(currentExperience)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end
  • UpdateAsync() 'nin geri çağrılma işlevi, mevcut anahtar durumunu tanımlayan DataStoreKeyInfo nesnesinde ek bir parametre alır.Değiştirilmiş değeri, UserIds ile ilişkili anahtarları ve anahtarın metadatlarını geri döndürür.


    local DataStoreService = game:GetService("DataStoreService")
    local nicknameStore = DataStoreService:GetDataStore("Nicknames")
    local function makeNameUpper(currentName, keyInfo)
    local nameUpper = string.upper(currentName)
    local userIDs = keyInfo:GetUserIds()
    local metadata = keyInfo:GetMetadata()
    return nameUpper, userIDs, metadata
    end
    local success, updatedName, keyInfo = pcall(function()
    return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
    end)
    if success then
    print(updatedName)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end

Metadatayı tanımlarken sınırlara bakın metadat sınırları.

Sıralanmış veri depoları

Varsayılan olarak, veri depoları içeriğini sıralamaz.Kalıcı lider tablosu istatistikleri gibi düzenli bir şekilde veri almanız gerekiyorsa, GetOrderedDataStore() yerine GetDataStore() yerine çağırın.


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")

Sıralanmış veri depoları, varsayılan veri depolarıyla aynı temel işlevleri destekler, artı benzersiz GetSortedAsync() işlevi.Bu, belirli bir sıralama düzenine, sayfa boyutuna ve minimum/maksimum değerlere dayanarak çok sayıda sıralanmış anahtarı alır.

Aşağıdaki örnek, karakter verilerini üç girişle sayfalara sıralar, her biri azalan sırayla, ardından sayfalar aracılığıyla döngüye girer ve her karakterin adını ve yaşını çıkarır.


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- Sıralanmış veri mağazadoldurur
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- Verileri, her biri üç giriş sayfasına inen sırayla sıralar
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- Mevcut (ilk) sayfayı alır
local entries = pages:GetCurrentPage()
-- Sayfadaki tüm anahtar-değer çiftleri arasında dolaşır
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Son sayfaya ulaşıldığını kontrol eder
if pages.IsFinished then
break
else
print("----------")
-- Sonraki sayfaya ilerlemeler
pages:AdvanceToNextPageAsync()
end
end
end