Mengelola Toko Data

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Kelola data Anda menggunakan versi, daftar, dan cache.

Versi

Versi terjadi ketika Anda menetapkan, menyetujui, dan meningkatkan data. Fungsi 2>Class.GlobalDataStore:SetAsync()|SetAsync()2>, 5>Class.GlobalDataStore:UpdateAsync

Pencadangan cadangan bertahan 30 hari setelah cadangan baru menulisnya. Versi terbaru tidak pernah kadaluarsa.

Berikut fungsi yang melakukan operasi pembagian versi:

FungsiDeskripsi

ListVersionsAsync()

Daftar semua versi untuk kunci dengan mengembalikan instansi DataStoreVersionPages yang dapat Anda gunakan untuk menghitung semua nomor versi. Anda dapat menyaring versi dengan menggunakan rentang waktu.

GetVersionAsync()

Mengambil versi kunci tertentu menggunakan nomor versi unit.

RemoveVersionAsync()

Menghapus versi unittertentu.

Fungsi ini juga membuat versi tombstone saat menyimpan versi sebelumnya. Misalnya, jika Anda menelepon RemoveAsync("User_1234") dan kemudian mencoba untuk menelepon GetAsync("User_

Anda dapat menggunakan versi untuk menangani permintaan pengguna. Jika seorang pengguna melaporkan bahwa masalah terjadi pada 2020-10-09T01:42, Anda dapat mengembalikan data ke versi sebelumnya menggunakan contoh berikut:


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)
-- Mendapatkan versi terdekat waktu yang diberikan
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
-- Membaca versi terdekat
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- Mengembalikan nilai saat ini dengan menulis ulang dengan versi terdekat
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- Tidak ada entri yang ditemukan
end
end

Pemotretan layar

Snapshot Data Tokens Terbuka Cloud API memungkinkan Anda mengambil tangkapan layar dari semua toko data dalam pengalaman sekali sehari. Sebelum Anda menerbitkan update pengalaman yang mengubah logika penyimpanan data Anda, pastikan untuk mengambil tangkapan layar. Mengambil tangkapan layar menjamin bahwa Anda memiliki data terbaru yang tersedia dari versi sebelumnya dari pengalaman.

Misalnya, tanpa snapshot, jika Anda menerbitkan pembaruan pada pukul 3:30 UTC yang menyebabkan korupsi data, data yang rusak menulis semua data yang ditulis di antara 3:00-3:30 UTC. Jika Anda mengambil snapshot pada pukul 3:29 UTC, namun, data yang rusak tidak menulis apa pun yang ditulis sebelum 3:29

Daftar dan Prefix

Penyimpanan data memungkinkan Anda untuk menyimpan daftar dengan pr prefiks. Misalnya, menyimpan dengan n karakter pertama dari nama, seperti "d" , "do" atau "dog" untuk setiap kunci atau penyimpanan data dengan pr prefiks "dog".

Anda dapat menentukan prefiks saat menulis semua toko data atau kunci, dan hanya mengembalikan objek yang cocok dengan prefiks itu. Kedua ListDataStoresAsync() dan ListKeysAsync() fungsi kembali hanya mengembalikan objek

FungsiDeskripsi
ListDataStoresAsync()Mencantum semua toko data.
ListKeysAsync()Mencantum semua kunci di toko data.

Skala

Setiap kunci dalam penyimpanan data memiliki scope global default. Anda dapat mengatur kunci lebih lanjut dengan menetapkan string unik sebagai scope untuk parameter kedua dari GetDataStore() . Ini secara otomatis menambahkan scope ke awal dari semua kunci dalam semua operasi yang dilakukan di tokodata.

KunciPenglihatan
houses/User_1234rumah
pets/User_1234hewan peliharaan
inventory/User_1234inventaris

Kombinasi nama toko data, skala, dan kunci secara unik mengidentifikasi unit. Semua tiga nilai diperlukan untuk mengidentifikasi kunci dengan skala. Misalnya, Anda dapat membaca kunci global bernama User_1234 sebagai:


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

Jika kunci User_1234 memiliki scope emas, Anda hanya dapat membacanya sebagai:


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

Semua Scopes Properti

DataStoreOptions berisi properti AllScopes yang memungkinkan Anda untuk mengembalikan k

Ketika Anda menggunakan property AllScopes, parameter kedua dari GetDataStore() harus menjadi string kosong ( "" ).


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

Jika Anda mengaktifkan property AllScopes dan membuat kunci baru di data toko, Anda harus selalu menyebutkan scope untuk kunci itu dalam format scope / keyname. Jika tidak, API menunjukkan kesalahan. Misalnya, gold/player_34545 adalah m

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

Menyimpan

Gunakan cache untuk menyimpan sementara data dari toko data untuk meningkatkan kinerja dan mengurangi jumlah permintaan yang dibuat ke server. Misalnya, pengalaman dapat menyimpan salinan data mereka sehingga mereka dapat mengakses data itu dengan cepat tanpa harus membuat panggilan lain ke toko data.

Penge cache berlaku untuk modifikasi yang Anda buat ke kunci penyimpanan data menggunakan:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() , dan 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> tidak menerapkan cache dan selalu

Secara default, mesin menggunakan GetAsync() untuk menyimpan nilai yang Anda mengambil dari backend dalam cache lokal selama empat detik. Juga secara default, Class.GlobalDataStore:GetAsync()|GetAsync

Semua panggilan GetAsync() yang mengambil nilai yang tidak di-Cache dari pembaruan backend segera menyimpan ulang dan memulai ulang timer empat detik.

Menonaktifkan Penyimpanan

Untuk menonaktifkan cache dan memilih keluar dari menggunakan cache untuk mengambil nilai terbaru dari server, tambahkan parameter DataStoreGetOptions ke panggilan GetAsync() dan tetapkan propinsi UseCache ke 1>

Menonaktifkan cache berguna jika Anda memiliki beberapa server menulis ke kunci dengan frekuensi tinggi dan perlu mendapatkan nilai terbaru dari server. Namun, itu dapat menyebabkan Anda mengkonsumsi lebih banyak batas dan kuota simpan data Anda, karena Class.GlobalDataStore:GetAsync()|GetAsync() permintaan mengalami bypassing cache selalu menghitung melalui <

Serialisasi

Class.DataStoreService menyimpan data dalam format JSON. Saat Anda menyimpan data Lua di Studio, Roblox menggunakan proses bernama serialisasi untuk mengubah data itu menjadi JSON untuk disimpan di penyimpanan data. Kemudian Roblox mengubah data Anda kembali ke Lua dan mengembalikannya kepada Anda dalam proses deserialisasi lainnya yang bernama deserialisasi.

Serialisasi dan deserialisasi mendukung berbagai jenis data Lua berikut:

  • Angka
    • Anda seharusnya tidak menyimpan nilai numerik khusus inf, -inf, dan nan, karena nilai-nilai ini tidak sesuai dengan standar JSON. Anda tidak dapat mengakses kunci yang mengandung nilai ini dengan Open Cloud.
  • Tabel
    • Tabel hanya boleh berisi tipe data yang didukung lainnya
    • Kunci numerik diterjemahkan menjadi string jika panjang tabel adalah 0

Jika Anda mencoba menyimpan jenis data yang serialisasi tidak mendukung, Anda harus:

  • Gagal menyimpan jenis data tersebut dan menerima pesan kesalahan.
  • Berhasil menyimpan jenis data tersebut sebagai nil .

Untuk men-debug mengapa jenis data Anda disimpan sebagai nil , Anda dapat menggunakan fungsi JSONEncode. Saat Anda menyampaikan data Lua Anda ke fungsi ini, Anda menerimanya kembali dalam format Roblox yang akan disimpan dengan penyimpanan data, sehingga Anda dapat meninjau dan menyelidiki data yang dikembalikan.