Kode error dan batas penyimpanan data

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

Permintaan yang Anda buat ke penyimpanan data dapat gagal karena konektivitas yang buruk atau masalah lainnya. Untuk menangani kesalahan dan mengembalikan pesan dengan kode error, bungkus fungsi penyimpanan data dalam pcall().

Panggilan tulis yang gagal, seperti UpdateAsync(), berarti server game tidak menerima respons yang berhasil. Ini tidak selalu menjamin bahwa penulisan backend tidak terjadi. Dalam beberapa skenario kegagalan, kondisi penulisan terakhir mungkin tidak diketahui oleh pemanggil sampai diverifikasi dengan pembacaan tindak lanjut tanpa cache.

Referensi kode kesalahan

Kode kesalahanNama kesalahanPesan kesalahanCatatan
101KeyNameEmptyNama kunci tidak boleh kosong.Periksa apakah input kunci ke fungsi penyimpanan data adalah string kosong.
102KeyNameLimitNama kunci melebihi batas 50 karakter.Periksa apakah input kunci ke fungsi penyimpanan data melebihi panjang 50.
103ValueNotAllowedTidak dapat mengizinkan X di DataStore.Fungsi update yang buruk mengembalikan nilai tipe X.
104CantStoreValueTidak dapat menyimpan X di DataStore.Fungsi pembaruan mengembalikan nilai tipe X yang tidak dapat diserialisasi.
105ValueTooLargeNilai yang diserialisasi melebihi batas X.Jika Anda mengatur nilai dengan SetAsync() atau UpdateAsync(), panjang nilai yang diserialisasi tidak boleh melebihi ukuran X. Untuk memeriksa panjang serialisasi data, gunakan JSONEncode().
106MaxValueInvalidMaxValue harus berupa integer.Jika Anda melewatkan nilai maksimum ke GetSortedAsync() untuk OrderedDataStore, itu harus berupa integer.
106MinValueInvalidMinValue harus berupa integer.Jika Anda melewatkan nilai minimum ke GetSortedAsync() untuk OrderedDataStore, itu harus berupa integer.
106PageSizeGreaterPageSize harus dalam rentang yang telah ditentukan.Ukuran halaman minimum untuk OrderedDataStore adalah 1.
106PageSizeLesserPageSize harus dalam rentang yang telah ditentukan.Ukuran halaman maksimum untuk OrderedDataStore adalah 100.
107MinMaxOrderInvalidMaxValue harus lebih besar dari atau sama dengan MinValue.Nilai maksimum harus lebih besar dari atau sama dengan nilai minimum untuk GetSortedAsync().
301GetAsyncThrottlePermintaan GetAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan GetAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
302SetAsyncThrottlePermintaan SetAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan SetAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
303IncreAsyncThrottlePermintaan IncrementAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan IncrementAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
304UpdateAsyncThrottlePermintaan UpdateAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan UpdateAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
304TransformThrottlePermintaan UpdateAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan UpdateAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
305GetSortedThrottlePermintaan GetSorted dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan GetSortedAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
306RemoveAsyncThrottlePermintaan RemoveAsync dibatalkan. Permintaan telah dibatasi tetapi antrean penuh.Permintaan RemoveAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
401DataModelNoAccessPermintaan gagal. DataModel tidak dapat diakses saat pengalaman sedang ditutup.DataModel tidak terinisialisasi karena pengalaman sedang ditutup.
402LuaWebSrvsNoAccessPermintaan gagal. LuaWebService tidak dapat diakses saat pengalaman sedang ditutup.LuaWebService tidak terinisialisasi karena pengalaman sedang ditutup.
403StudioAccessToApisNotAllowedTidak dapat menulis ke DataStore dari Studio karena akses API tidak diaktifkan.Akses API harus aktif untuk menggunakan penyimpanan data di Studio.
404InternalErrorOrderedDataStore tidak ada.OrderedDataStore yang terkait dengan permintaan ini tidak ditemukan. Ini mungkin tanda adanya korupsi data. Cobalah lagi nanti.
501InternalErrorTidak dapat mengurai respons karena data mungkin rusak.Server tidak dapat mengurai respons permintaan Anda. Ini mungkin tanda adanya korupsi data. Cobalah lagi nanti.
502RequestRejectedAPI Services menolak permintaan dengan error X.Error X terjadi saat memproses di server Roblox. Cobalah lagi nanti.
503InternalErrorPermintaan penyimpanan data berhasil tetapi kunci tidak ditemukan.Kunci yang diminta tidak ditemukan di penyimpanan data. Ini mungkin tanda adanya korupsi data. Cobalah lagi nanti.
504InternalErrorPermintaan penyimpanan data berhasil tetapi respons tidak diformat dengan benar.Server tidak dapat mengurai respons permintaan Anda. Ini mungkin tanda adanya korupsi data. Cobalah lagi nanti.
505InternalErrorPermintaan OrderedDataStore berhasil tetapi respons tidak diformat dengan benar.Server tidak dapat mengurai respons untuk permintaan OrderedDataStore Anda. Ini mungkin tanda adanya korupsi data. Cobalah lagi nanti.
509OperationNotAllowedOperasi penyimpanan data diblokir saat dijalankan di RCC Pribadi untuk mencegah kemungkinan korupsi data.Penulisan penyimpanan data diblokir di saluran RCC pribadi.
511AttributeSizeTooLargeUkuran atribut metadata melebihi batas X.Ukuran metadata yang diserialisasi melebihi batas X. Nilai X bersifat dinamis. Jika ukuran berubah, nilai juga berubah.
512UserIdLimitExceededUkuran UserID melebihi batas X.Panjang array ID pengguna yang diberikan oleh pengguna melebihi batas X.
513AttributeFormatErrorFormat atribut userId tidak valid.ID pengguna yang diberikan bukan angka.
513AttributeFormatErrorFormat metadata atribut tidak valid.Metadata bukan tabel.
GetVersionAsyncThrottlePermintaan GetVersionAsync dibatalkan. Permintaan telah dibatasi.Permintaan GetVersionAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
GetVersionAtTimeAsyncThrottlePermintaan GetVersionAtTimeAsync dibatalkan. Permintaan telah dibatasi.Permintaan GetVersionAtTimeAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
ListDataStoresAsyncThrottlePermintaan ListDataStoresAsync dibatalkan. Permintaan telah dibatasi.Permintaan ListDataStoresAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
ListKeysAsyncThrottlePermintaan ListKeysAsync dibatalkan. Permintaan telah dibatasi.Permintaan ListKeysAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
ListVersionsAsyncThrottlePermintaan ListVersionsAsync dibatalkan. Permintaan telah dibatasi.Permintaan ListVersionsAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
RemoveVersionAsyncThrottlePermintaan RemoveVersionAsync dibatalkan. Permintaan telah dibatasi.Permintaan RemoveVersionAsync() telah melebihi ukuran antrean maksimum dan Roblox tidak dapat memproses permintaan pada throughput saat ini.
InvalidTimestampStempel waktu harus positif dan tidak lebih dari sepuluh menit di masa depan.Stempel waktu yang diberikan kepada GetVersionAtTimeAsync() tidak valid.
StandardReadExperienceThrottledPermintaan StandardRead telah dibatasi oleh batas pengalaman.Sebuah permintaan ke GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), atau pembacaan UpdateAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardRead.
StandardWriteExperienceThrottledPermintaan StandardWrite telah dibatasi oleh batas pengalaman.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardWrite.
StandardListExperienceThrottledPermintaan StandardList telah dibatasi oleh batas pengalaman.Sebuah permintaan ke ListKeysAsync(), ListVersionsAsync(), atau ListDataStoresAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardList.
StandardRemoveExperienceThrottledPermintaan StandardRemove telah dibatasi oleh batas pengalaman.Sebuah permintaan ke RemoveAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardRemove.
OrderedReadExperienceThrottledPermintaan OrderedRead telah dibatasi oleh batas pengalaman.Sebuah permintaan ke GetAsync() atau pembacaan UpdateAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedRead.
OrderedWriteExperienceThrottledPermintaan OrderedWrite telah dibatasi oleh batas pengalaman.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedWrite.
OrderedListExperienceThrottledPermintaan OrderedList telah dibatasi oleh batas pengalaman.Sebuah permintaan ke GetSortedAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedList.
OrderedRemoveExperienceThrottledPermintaan OrderedRemove telah dibatasi oleh batas pengalaman.Sebuah permintaan ke RemoveAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedRemove.
StandardReadGameServerThrottledPermintaan StandardRead telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), atau pembacaan UpdateAsync() pada penyimpanan data standar melebihi batas laju server game StandardRead.
StandardWriteGameServerThrottledPermintaan StandardWrite telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data standar melebihi batas laju server game StandardWrite.
StandardListGameServerThrottledPermintaan StandardList telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke ListKeysAsync(), ListVersionsAsync(), atau ListDataStoresAsync() pada penyimpanan data standar melebihi batas laju server game StandardList.
StandardRemoveGameServerThrottledPermintaan StandardRemove telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke RemoveAsync() pada penyimpanan data standar melebihi batas laju server game StandardRemove.
OrderedReadGameServerThrottledPermintaan OrderedRead telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke GetAsync() atau pembacaan UpdateAsync() pada penyimpanan data terurut melebihi batas laju server game OrderedRead.
OrderedWriteGameServerThrottledPermintaan OrderedWrite telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data terurut melebihi batas laju server game OrderedWrite.
OrderedListGameServerThrottledPermintaan OrderedList telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke GetSortedAsync() pada penyimpanan data terurut melebihi batas laju server game OrderedList.
OrderedRemoveGameServerThrottledPermintaan OrderedRemove telah dibatasi oleh batas server game atau antrean permintaan penuh.Sebuah permintaan ke RemoveAsync() pada penyimpanan data terurut melebihi batas laju server game OrderedRemove.

Kode kesalahan server

Nama kesalahanPesan kesalahanCatatan
DatastoreDeletedPenyimpanan data telah dihapus.Operasi pada penyimpanan data tidak dapat terjadi karena penyimpanan data sebelumnya telah dihapus.
DatastoreThrottledKecepatan permintaan melebihi maksimum yang diizinkan untuk datastore.Terlalu banyak permintaan yang dikirim ke satu penyimpanan data.
InternalServerErrorTerjadi kesalahan server internal.Kesalahan sesekali pada server Roblox. Cobalah lagi, idealnya dengan penundaan eksponensial.
InvalidExclusiveStartKeyKunci start eksklusif yang diberikan tidak valid.Kunci start eksklusif (cursor) yang diberikan untuk operasi daftar seperti ListKeysAsync() tidak valid.
InvalidPlaceTempat yang diberikan tidak valid.Tidak ada ID Universe yang cocok untuk tempat tersebut. Cobalah lagi nanti.
InvalidTargetTarget yang diberikan tidak valid.Nama kunci penyimpanan data terurut melebihi batas 50 karakter.
InvalidUniverseUniverse yang diberikan tidak valid.Tidak ada ID Tempat yang cocok untuk universe tersebut. Cobalah lagi nanti.
InvalidUserIdsID pengguna yang diberikan memiliki format yang tidak valid.Gagal mengurai ID pengguna.
KeyThrottledKecepatan permintaan melebihi maksimum yang diizinkan untuk kunci tersebut.Kecepatan permintaan melebihi batas maksimum yang diizinkan untuk satu kunci.
KeyNotFoundKunci yang diminta tidak ada.Kunci tidak ada.
N/ATidak ada halaman untuk dilanjutkan.Kesalahan ini terjadi ketika Anda memanggil Pages:AdvanceToNextPageAsync() di halaman terakhir.
StandardReadExperienceThrottledKecepatan permintaan baca standar melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke GetAsync(), GetVersionAsync(), GetVersionAtTimeAsync(), atau pembacaan UpdateAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardRead.
StandardWriteExperienceThrottledKecepatan permintaan tulis standar melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardWrite.
StandardListExperienceThrottledKecepatan permintaan daftar standar melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke ListKeysAsync(), ListVersionsAsync(), atau ListDataStoresAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardList.
StandardRemoveExperienceThrottledKecepatan permintaan penghapusan standar melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke RemoveAsync() pada penyimpanan data standar melebihi batas laju pengalaman StandardRemove.
OrderedReadExperienceThrottledKecepatan permintaan baca terurut melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke GetAsync() atau pembacaan UpdateAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedRead.
OrderedWriteExperienceThrottledKecepatan permintaan tulis terurut melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke SetAsync(), IncrementAsync(), atau penulisan UpdateAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedWrite.
OrderedListExperienceThrottledKecepatan permintaan daftar terurut melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke GetSortedAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedList.
OrderedRemoveExperienceThrottledKecepatan permintaan penghapusan terurut melebihi maksimum yang diizinkan untuk pengalaman.Sebuah permintaan ke RemoveAsync() pada penyimpanan data terurut melebihi batas laju pengalaman OrderedRemove.

Batas

Model data memiliki batas. Jika sebuah pengalaman melebihi batas ini, layanan secara otomatis membatasi penggunaan penyimpanan data pengalaman tersebut dan menyebabkan permintaan selanjutnya dimasukkan dalam salah satu antrean berikut:

  • Set
  • Set terurut
  • Ambil
  • Ambil terurut

Permintaan dalam antrean diproses dalam urutan mereka diterima. Fungsi yang dipanggil terus memblokir selama permintaannya masih dalam antrean. Jika kunci penyimpanan data itu sendiri dibatasi, permintaan ditempatkan dalam antrean tetapi sementara diabaikan.

Setiap antrean memiliki batas 30 permintaan. Ketika batas antrean tercapai, permintaan gagal dengan kode error dalam kisaran 301-306, menunjukkan bahwa permintaan telah sepenuhnya dibatalkan.

Batas akses

Penyimpanan data tunduk pada baik batas tingkat pengalaman dan server. Batas tingkat pengalaman meningkat seiring dengan jumlah pengguna yang bersamaan di seluruh pengalaman, sementara batas tingkat server dapat dikonfigurasi dan dimaksudkan untuk digunakan sebagai alat oleh pencipta.

Batas Pengalaman

Setiap pengalaman diizinkan sejumlah tertentu permintaan penyimpanan data berdasarkan jenis penyimpanan data, jenis permintaan, dan jumlah pengguna bersamaan. Untuk setiap jenis penyimpanan data dan jenis permintaan, batas tersebut dibagi di antara semua fungsi yang terdaftar.

  • UpdateAsync() mengkonsumsi dari anggaran permintaan baca dan tulis. Satu panggilan akan mengurangi kedua batas tersebut.
  • Server game dan Open Cloud berbagi anggaran; lalu lintas Open Cloud dapat dibatasi oleh penggunaan dalam pengalaman (dan sebaliknya). Lihat Kontrol batas laju untuk panduan lebih lanjut.
Penyimpanan data standar
Jenis permintaanAPI server gameAPI Open CloudBatas bersama (permintaan per menit)
BacaGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
Dapatkan Entri Data Store300 + concurrentUsers × 40
TulisSetAsync()
IncrementAsync()
UpdateAsync()
Buat, Perbarui, Tambah Entri Data Store300 + concurrentUsers × 20
DaftarListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
Daftar Data Store, Daftar Entri Data Store, Daftar Revisi Entri Data Store300 + concurrentUsers × 2
HapusRemoveAsync()Hapus Entri Data Store, Hapus Data Store, Kembalikan Data Store300 + concurrentUsers × 40
Penyimpanan data terurut
Jenis permintaanAPI server gameAPI Open CloudBatas bersama (permintaan per menit)
BacaGetAsync()
UpdateAsync()
Dapatkan Entri Penyimpanan Data Terurut300 + concurrentUsers × 40
TulisSetAsync()
IncrementAsync()
UpdateAsync()
Buat, Perbarui, Tambah Entri Penyimpanan Data Terurut300 + concurrentUsers × 20
DaftarGetSortedAsync()Daftar Entri Penyimpanan Data Terurut300 + concurrentUsers × 2
HapusRemoveAsync()Hapus Entri Penyimpanan Data Terurut300 + concurrentUsers × 40
Kontrol batas laju

Karena permintaan Open Cloud dan server game dibagikan, penting untuk secara independen mengontrol seberapa banyak masing-masing dapat mengkonsumsi dari anggaran.

Server game

Server individu memiliki batas internal, seperti yang dijelaskan di atas. Gunakan kombinasi SetRateLimitForRequestType() dan GetRequestBudgetForRequestType() untuk menjaga kontrol yang lebih tepat atas kontribusi server individu terhadap anggaran total.

Open Cloud

Permintaan Open Cloud memerlukan solusi pembatasan laju eksternal. Kami merekomendasikan salah satu pendekatan berikut:

  • (Sederhana) Tambahkan waktu tunggu singkat setelah setiap permintaan, terutama jika memanggil API yang sama dalam loop terus menerus. Atur waktu tunggu ini sama dengan 60 / (penggunaan anggaran yang diinginkan per menit) detik, sebagai batas atas. Perhatikan bahwa pendekatan ini tidak memungkinkan permintaan untuk dikirim dalam lonjakan.
  • (Kuat) Implementasikan pembatas laju lokal menggunakan strategi ember bocor.

Kode contoh Node.js berikut mencakup implementasi referensi.

const apiKey = process.env.API_KEY;
if (!apiKey) {
throw new Error('Variabel lingkungan API_KEY tidak diatur.');
}
const apiHeaderKey = 'x-api-key';
const universeId = '';
const dataStoreId = 'Inventory';
const baseUrl = 'https://apis.roblox.com/cloud/v2/';
// --- Konfigurasi pembatasan laju per operasi (permintaan per menit) ---
const LIST_RATE_PER_MIN = 60;
const GET_RATE_PER_MIN = 120;
const UPDATE_RATE_PER_MIN = 60;
// Spacing batas atas per operasi: 60 / (permintaan per menit) detik.
const LIST_INTERVAL_MS = (60 / LIST_RATE_PER_MIN) * 1000;
const GET_INTERVAL_MS = (60 / GET_RATE_PER_MIN) * 1000;
const UPDATE_INTERVAL_MS = (60 / UPDATE_RATE_PER_MIN) * 1000;
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
// Melakukan permintaan, lalu menunggu interval operasi ini sendiri sebelum mengembalikan.
async function throttledFetch(url, options, intervalMs) {
const response = await fetch(url, options);
await sleep(intervalMs);
return response;
}
async function listEntries(universe, dataStore) {
const listPath = `universes/${universe}/data-stores/${dataStore}/entries`;
const url = baseUrl + listPath;
const response = await throttledFetch(url, {
headers: { [apiHeaderKey]: apiKey }
}, LIST_INTERVAL_MS);
return response.json();
}
async function getEntry(path) {
const url = baseUrl + path;
const response = await throttledFetch(url, {
headers: { [apiHeaderKey]: apiKey }
}, GET_INTERVAL_MS);
return response.json();
}
async function updateEntry(path, payload) {
const url = baseUrl + path;
const response = await throttledFetch(url, {
method: 'PATCH',
headers: {
[apiHeaderKey]: apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload) // Badan harus berisi string
}, UPDATE_INTERVAL_MS);
return response;
}
(async () => {
try {
const entries = await listEntries(universeId, dataStoreId);
for (const entry of entries.dataStoreEntries) {
const path = entry.path;
console.log(`\nMemproses entri: ${path}`);
const currentData = await getEntry(path);
currentData.value.currency += 10;
const payload = { value: currentData.value };
const updateResponse = await updateEntry(path, payload);
console.log(`Status: ${updateResponse.status}`);
console.log(`Respons: ${await updateResponse.text()}`);
}
} catch (error) {
console.error('Terjadi kesalahan selama eksekusi:', error);
}
})();

Batas server

Setiap server memiliki batas laju yang dapat dikonfigurasi untuk setiap jenis permintaan, berdasarkan jumlah pemain di server tersebut. Server menerima lonjakan tambahan anggaran permintaan sekali saat pertama kali dibuat. Gunakan GetRequestBudgetForRequestType() untuk mengonfirmasi jumlah permintaan penyimpanan data yang dapat dilakukan server saat ini pada waktu tertentu.

Batas ini dapat dikonfigurasi oleh pencipta menggunakan API SetRateLimitForRequestType(). Menggunakan API ini, seorang pencipta dapat mengonfigurasi batas tarif penyimpanannya sendiri untuk setiap jenis permintaan.

Batas laju default berikut diterapkan jika API tidak dipanggil:

Penyimpanan data standar
Jenis permintaanDataStoreRequestType EnumAPI server gamePermintaan per menit
BacaStandardReadGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
UpdateAsync()
60 + numPlayers × 40
TulisStandardWriteSetAsync()
IncrementAsync()
UpdateAsync()
60 + numPlayers × 40
DaftarStandardListListDataStoresAsync()
ListKeysAsync()
ListVersionsAsync()
5 + numPlayers × 2
HapusStandardRemoveRemoveAsync()60 + numPlayers × 40
RemoveVersion (Dihapus)RemoveVersionAsyncRemoveVersionAsync()5 + numPlayers × 2
Penyimpanan data terurut
Jenis permintaanDataStoreRequestType EnumAPI server gamePermintaan per menit
BacaOrderedReadGetAsync()
UpdateAsync()
60 + numPlayers × 40
TulisOrderedWriteSetAsync()
IncrementAsync()
UpdateAsync()
30 + numPlayers × 5
DaftarOrderedListGetSortedAsync()5 + numPlayers × 2
HapusOrderedRemoveRemoveAsync()30 + numPlayers × 5

Batas data

Penyimpanan data membatasi berapa banyak data yang dapat digunakan per entri.

Nama penyimpanan data, nama kunci, dan ruang lingkup harus semuanya dalam panjang karakter tertentu. Gunakan string.len() untuk memeriksa panjangnya.

Data (nilai kunci) juga disimpan sebagai string, terlepas dari jenis aslinya. Anda dapat memeriksa ukuran data dengan fungsi JSONEncode(), yang mengubah data Luau menjadi tabel JSON yang diserialisasi.

KomponenJumlah karakter maksimum
Nama penyimpanan data50
Nama kunci50
Ruang lingkup50
Data (nilai kunci)4,194,304 per kunci

Batas metadata

Batas untuk jumlah karakter dalam metadata yang ditentukan pengguna.

KomponenJumlah karakter maksimum
Nama kunci50
Nilai250
Pasangan kunci-nilai300

Batas throughput

Batas throughput per kunci memastikan bahwa kinerja optimal di server Roblox. Setiap batas berlaku untuk setiap kunci di semua server dalam sebuah pengalaman dan menyegarkan seiring waktu.

Roblox memeriksa penggunaan kuota yang terkait dengan kunci selama 60 detik terakhir. Jika penggunaannya, termasuk permintaan saat ini, berada dalam batas throughput, permintaan disetujui. Jika penggunaannya melebihi batas, permintaan ditolak.

Jenis permintaanAPI server gameAPI Open CloudBatas
BacaGetAsync()
GetVersionAsync()
GetVersionAtTimeAsync()
ListVersionsAsync()
UpdateAsync()
Dapatkan Entri Data Store25 MB per menit
TulisSetAsync()
IncrementAsync()
UpdateAsync()
RemoveAsync()
Buat, Perbarui, Tambah, Hapus Entri Data Store4 MB per menit

Selain batas throughput di atas, Roblox mengatur data ke dalam partisi berdasarkan skema internal. Akibatnya, ketika server backend menerima volume permintaan tinggi ke penyimpanan data yang sama, dapat mengakibatkan pembatasan lebih lanjut. Terlepas dari penyebabnya, pembatasan terwujud sebagai kesalahan DatastoreThrottled atau KeyThrottled, tergantung pada apakah batas throughput dilanggar untuk penyimpanan data tunggal atau untuk kunci. Pesan kesalahan ini berlaku untuk baik penyimpanan data terurut maupun standar.

Batas penyimpanan

Untuk menjaga penyimpanan tetap stabil dan dapat diskalakan, penyimpanan data menggunakan batas tingkat permainan pada penggunaan penyimpanan Anda.

Batas ini terdiri dari alokasi dasar untuk setiap game ditambah alokasi tambahan berdasarkan jumlah pengguna seumur hidup. Pengguna seumur hidup adalah setiap pengguna yang telah bergabung dengan permainan Anda setidaknya sekali.

Batas penyimpanan dihitung menggunakan rumus berikut Total batas penyimpanan versi terbaru = 500 MB + 1 MB × jumlah pengguna seumur hidup.

Penggunaan penyimpanan diukur menggunakan ukuran terkompresi dari versi terbaru setiap kunci. Penyimpanan data secara otomatis mengompres data Anda sebelum penyimpanan, jadi hindari mengompresnya sebelumnya. Prabanding menambah overhead CPU yang tidak perlu dan dapat mengurangi efektivitas kompresi yang terbangun di dalam penyimpanan data. Dengan menyimpan data yang tidak terkompresi, Anda secara otomatis mendapatkan manfaat dari peningkatan algoritma kompresi Roblox dan optimasi berbasis skema di masa depan.

Hanya versi terbaru dari setiap kunci yang dihitung terhadap penggunaan penyimpanan Anda. Kunci yang dihapus dan versi yang digantikan, meskipun masih dapat diakses melalui API versi selama periode retensi mereka, tidak dihitung terhadap penggunaan penyimpanan Anda. Namun, penyimpanan data yang dihapus melalui metode Open Cloud DeleteDataStore terus dihitung terhadap penggunaan penyimpanan selama periode pemrosesan penghapusan 30 hari mereka, sampai mereka dihapus secara permanen.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.