Hafıza Deposu Sıralama Haritası

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

Hafıza depolarının sıralama veri yapısı, anlık hafıza erişiminde sık hafıza erişiminde anahtar değer çiftleri olarak sık hafıza erişiminde anahtar değerlerini ve anahtar değerlerini tutar ve etkinleştirilen sıralama anahtar

Sınırlar

Veri yapısı boyut sınırlarına ek olarak, sıralanmış haritaların bir anahtar boyut sınırı 128 karakter, bir değer boyut sınırı 32 KB ve bir sıralama anahtarı boyut sınırı 128 karakter.

Tecrübeniz için bu sınırı aşan verileri depolmak gerekirse, anahtar özelliği ile birlikte birkaç veri yapısı arasında bölme ve dağıtma tekniğini kabul edebilirsiniz. Bölme belleği de sisteminizin skalabilitesini artırabilir.

Sıralanmış Bir Harita Alınır

Sıralanmış bir harita almak için, Class.MemoryStoreService:GetSortedMap() ile bir isim ile çağırın</a> bir harita için. İsim, deneyim içindeki bir haritadaki global bir isimdir, böylece ismi kullanarak herhangi bir haritaya erişebilirsiniz.

Sıralanmış Bir Harita Alınır

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")

Sıralanmış bir harita aldıktan sonra, verileri okumak veya yazmak için aşağıdaki işlevlerden herhangi birini çağırın:

FonksiyonEylem
MemoryStoreSortedMap:SetAsync()Eklemek yeni bir anahtar ekleyin veya anahtar mevcutsa değer ve/veya sıralama anahtarını yeniden yazın.
MemoryStoreSortedMap:GetAsync()Okuyun belirli bir anahtarı.
MemoryStoreSortedMap:GetRangeAsync()Okuyun tüm mevcut anahtarları veya belirli bir menzili okuyun.
MemoryStoreSortedMap:UpdateAsync() Güncellemeyi öğrencikten sonra bir anahtarın/ya da sıralama düzenleyicisinden alındıktan sonra değerini güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncellemeyi güncelle
MemoryStoreSortedMap:RemoveAsync()Kaldır sıralanmış haritadan bir anahtarı kaldır.

Verileri Ekleme veya Yazma

Yeni bir anahtar eklemek veya anahtarın sıralanmış haritasındaki değerini veya sıralama anahtarının süresini değiştirmek için Class.MemoryStoreSortedMap:SetAsync()</

Anahtarlarınızın sıralama düzeni, bir anahtarın üstünlüğünü bir anahtarda ilk olarak alır. Örneğin, yukarıda sıralanmışken, sayısal sıralama anahtarı ilk sıralama yapar, ardından yazılım dü

Biraz veri sıralanmış yükselenme sırasına göre örneği -


{Key: "player1", Value: someValue1, SortKey: -1}
{Key: "player2", Value: someValue2, SortKey: 0}
{Key: "player4", Value: someValue3, SortKey: 1}
{Key: "player5", Value: someValue4, SortKey: 1}
{Key: "player3", Value: someValue5, SortKey: 3.14}
{Key: "player6", Value: someValue6, SortKey: "someString"}
{Key: "player0", Value: someValue7}
{Key: "player7", Value: someValue8}

player0 ile tüm anahtarları bir sıralama anahtarıyla sıralar. player6 ile tüm anahtarları bir sayısal sıralama anahtarıyla sıralar. player4 ve 1>player51> aynı sıralama anahtarıyla sıralanır, bu yüzden sıralama sayısına göre yükselenen s

Sıralanmış Bir Haritaya Veriler Ekleme

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end

Verileri Almak

Belirli bir anahtara bağlı bir veri değeri alabilir veya bir dizi değerini ve anahtarların içindeki anahtarları sıralayabilirsiniz.

Bir Anahtar ile Veri Alınması

Sıralanmış haritadaki bir anahtarın değerini ve sıralama anahtarının sıralanmış sırasını almak için, anahtarın MemoryStoreSortedMap:GetAsync() çağır Class.MemoryStoreSortedMap:GetAsync() .

Sıralanmış bir hariteden belirli bir anahtar alınıyor

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end
local item
local getSuccess, getError = pcall(function()
item = sortedMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end

Çokluklu Anahtarlarla Veri Alınıyor

Sıralanmış haritadaki bir dizi anahtar için çok sayıda veri almak için, MemoryStoreSortedMap:GetRangeAsync() diyor. Bu işlev

Sıralanmış Bir Haritadan Bir Dizi Anahtar Alın

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local lowerBound = {}
lowerBound["key"] = "10"
lowerBound["sortKey"] = 100
local upperBound = {}
upperBound["key"] = "50"
upperBound["sortKey"] = 500
-- Başlangıç ​​nadiren 20 tane eşyayı alın
local getSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(
Enum.SortDirection.Ascending, 20, lowerBound, upperBound)
end)
if getSuccess then
for _, item in items do
print(item.key)
print(item.sortKey)
end
end

Verileri Güncelleme

Bir anahtarın sıralanmış bir haritadan değerini ve sıralamayı geri almak ve güncellermek için, MemoryStoreSortedMap:UpdateAsync() ile bir anahtarın ismini, bir çağrı işlevini güncellemeyi ve değer için bir

Çoğu deneyim için, birden fazla sunucu aynı anda anahtarı güncellemeyi ve değerleri değiştmeyi mümkün kılabilir ve değerleri güncellemeden önce her zaman en son değeri okumak için kullanmalısınız. As UpdateAsync() iletken olarak değiştirilir, birden fazla sunucu güncellemeden önce her zaman en son

Örneğin, aşağıdaki kod örneği, bir oyuncunun bir tabloyu günceller ve skoru öldürmeleri / ölümleri için bir lider tablosunda günceller. Skor, öldürmeler / ölümler olarak hesaplanır. UpdateAsync() , öldürmeler ve ölümleri

Sıralama Haritasındaki bir oyuncunun lider tablosu skorunu güncelleme

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("Leaderboard")
local function updateLeaderboard(itemKey, killsToAdd, deathsToAdd)
local success, newStats, newScore = pcall(function()
return sortedMap:UpdateAsync(itemKey, function(playerStats, playerScore)
playerStats = playerStats or { kills = 0, deaths = 0 }
playerStats.kills += killsToAdd
playerStats.deaths += deathsToAdd
if playerStats then
-- `playerScore` haritadaki öğeleri sıralamak için kullanılan sıralama anahtarıdır
playerScore = playerStats.kills / math.max(playerStats.deaths, 1)
return playerStats, playerScore
end
return nil
end, 30)
end)
if success then
print(newStats)
print(newScore)
end
end

Class.MemoryStoreSortedMap:UpdateAsync()|UpdateAsync() için gecikme, GetAsync() ve SetAsync()'a benzerdir, aksi takdirde içerik için gecikme vardır.

Kontrol oluştuğunda, sistem bu üç olaydan biri olana kadar otomatik olarak işlemi tekrar deneyecek: işlem başarılı olur, çağrı işlevi nil'i döndürür veya maksimum tekrar sayısına ulaşılır. Eğer sistem maksimum tekrar sayısına ulaşırsa, bir çatışma döndürür.

Verileri Kaldırma

Sıralama haritasından bir anahtarı kaldırmak ve bir memori depolarındaki tüm verileri silmek için MemoryStoreSortedMap:RemoveAsync() kullanabilirsiniz.

Bir Anahtarı Kaldırma

Sıralanmış haritadan bir anahtarı kaldırmak için, MemoryStoreSortedMap:RemoveAsync() ile bir anahtar ismiyle çağır.

Sıralanmış bir haritadan bir anahtar kaldır

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, "someStringSortKey")
end)
if setSuccess then
print("Set succeeded.")
end
local removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end

Tüm Verileri Silme

Sıralı haritalardaki hafiyayı silmek için, tüm anahtarlarınızı MemoryStoreSortedMap:GetRangeAsync() ile listeleyin, sonra MemoryStoreSortedMap:RemoveAsync() ile onları kaldırın.

Sıralı Bir Haritada Hafızayı Sil

local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
-- Nil'in ilk öğesi ile başlayan ilk düşük bağlantı çözülür
local exclusiveLowerBound = nil
while true do
-- Mevcut düşük sınırdan başlayan yüzlerce öğeye ulaşın
local getRangeSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(Enum.SortDirection.Ascending, 100, exclusiveLowerBound)
end)
if getRangeSuccess then
local removeSuccess = true
local removeError = nil
for _, item in items do
removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync(item.key)
end)
end
-- Eşyaları kaldırırken bir hata oluştuysa, aynı özel düşük sınırlarıyla tekrar deneyin
if not removeSuccess then
warn(removeError)
-- Menzil yüzden fazla bir öğeden daha küçükse, haritanın sonuna ulaşılır
elseif #items < 100 then
break
else
-- Son alınan anahtar, bir sonraki itera için özel bir alt sınırdır
exclusiveLowerBound = {}
exclusiveLowerBound["key"] = items[#items].key
exclusiveLowerBound["sortKey"] = items[#items].sortKey
end
end
end