การจัดการข้อมูล

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

จัดการข้อมูลของคุณโดยใช้การจัดเก็บรุ่น รายการ และการแคช

การเวอร์ชัน

การเวอร์ชั่นเกิดขึ้นเมื่อคุณ ตั้ง และ ปรับปรุง และ เพิ่ม ข้อมูล ฟั

การแก้ไขคืนฉุกเฉินที่มีอยู่สามารถหมดอายุได้หลังจาก 30 วันหลังจากการเขียนข้อมูลใหม่เขียนข้อมูลเก่า

ต่อไปนี้คือการประมวลผลการเวอร์ชัน

ฟังก์ชันคำอธิบาย

ListVersionsAsync()

รายการเวอร์ชันทั้งหมดสำหรับกุญแจโดยการนำเค้าโครงของ DataStoreVersionPages ที่คุณสามารถใช้เพื่อนับจำนวนเวอร์ชันทั้งหมด คุณสามารถกรองเวอร์ชันโดยใช้ช่วงเวลา

GetVersionAsync()

คีย์

RemoveVersionAsync()

ลบรุ่นที่เฉพาะของกุญแจ

ฟังก์ชันนี้ยังสร้างรุ่นหินมีบุญในขณะที่ยังคงเก็บรุ่นก่อนหน้า เช่น หากคุณโทร RemoveAsync("User

คุณสามารถใช้การเวอร์ชันเพื่อจัดการคำขอของผู้ใช้ หากผู้ใช้รายงานว่าเกิดปัญหาขึ้นที่ 2020-10-09T01:42 คุณสามารถย้อนกลับข้อมูลไปยังเวอร์ชันก่อนหน้าโดยใช้ตัวอย่างต่อไปนี้:


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)
-- ได้รับเวอร์ชันที่ใกล้ที่สุดกับเวลาที่ให้
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
-- อ่านรุ่นที่ใกล้ที่สุด
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- คืนค่าค่าปัจจุบันโดยเขียนข้ามกับเวอร์ชันที่ใกล้ที่สุด
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- ไม่พบรายการ
end
end

สแน็ปช็อต

สโน็ปช็อตข้อมูลเก็บเข้า API เมฆเปิดของเรา ช่วยให้คุณสามารถถ่ายสโน็ปข้อมูลทั้งหมดในร้านค้าในประสบการณ์เป็นครั้งเดียวต่อวัน ก่อนที่คุณจะเผยแพร่การปรับปรุงค

เช่นโดยไม่มีสแน็ปช็อต, หากคุณเผยแพร่การปรับปรุงในเวลา 3:30 UTC ที่ทำให้เกิดความเสียหายข้อมูล, ข้อมูลที่เสียหายจะเขียนเขียนข้อมูลที

รายการและคํานําหน้า

ร้านค้าข้อมูลช่วยให้คุณรายการโดยคำนวณ. เช่น, รายการโดยตัวอักษรแรก n ของชื่อ, เช่น "d" หรือ "do" สำหรับทุกรหัสหรือร้านค้าข้อมูลด้วยคำนวณ "dog"

คุณสามารถระบุคํานําหน้าเมื่อรายการข้อมูลทั้งหมดหรือกุญแจ และรับกลับเฉพาะวัตถุที่ตรงกับคํานําหน้านั้น ทั้ง Class.DataStoreService

ฟังก์ชันคำอธิบาย
ListDataStoresAsync()รายการทุกคลังข้อมูล
ListKeysAsync()ร้านค้า

สก็อป

ทุกรหัสในห้องเก็บข้อมูลมีสเกลเฉพาะที่ คุณสามารถจัดเรียงรหัสต่อไปโดยการตั้งสตริงเป็นสเกลสำหรับปารามิเตอร์ที่สองของ GetDataStore() นี้ สิ่งนี้จะอนุญาตให้สเ

กุญแจสเก็ต
houses/User_1234บ้าน
pets/User_1234สัตว์เลี้ยง
inventory/User_1234คลังไอเท็ม

การผสานชื่อเก็บข้อมูล ขอบเขต และกุญแจเฉพาะกับกุญแจเฉพาะกับสเก็บข้อมูล ทั้งสามค่าจำเป็นต้องระบุกุญแจด้วยสเก็ก เช่น คุณสามารถอ่านกุญแจที่มีชื่อว่า User_1234 ได้เป็น:


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

หากกุญแจ User_1234 มีขนาดเครื่องกำเนิดทองคำคุณสามารถอ่านได้เฉพาะว่า:


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

สมบัติทั้งหมดของโครงการ

DataStoreOptions มีสมบัติข้อมูล AllScopes ที่ช่ว

เมื่อคุณใช้คุณสมบัติ AllScopes คุณสมบัติตัวที่สองของ GetDataStore() จะต้องเป็นสตริงว่าง ( "" )


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

หากคุณเปิดใช้งานสมบัติข้อมูล AllScopes และสร้างรหัสใหม่ในสมบัติข้อมูลด้วยรูปแบบของสมบัติข้อมูล/ชื่

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

การแคช

ใช้การแชร์จัดเก็บข้อมูลเพื่อเก็บข้อมูลชั่วคราวจากห้องเก็บข้อมูลเพื่อปรับปรุงประสิทธิภาพและลดจำนวนคำขอที่ส่งไปยังเซิร์ฟเวอร์ ตัวอย่างเช่นประสบการณ์สามารถแชร์คัด

การแคชจะใช้กับการเปลี่ยนแปลงที่คุณทำให้กับตัวเก็บข้อมูลด้วย:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() และ 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> ไม่ใช้การ

โดยปกติเครื่องยนต์ใช้ GetAsync() เพื่อเก็บค่าที่คุณดึงจากแบ็กเก็นด้านหลังในค

ทุก GetAsync() คำเรียกที่ดึงค่าที่ไม่ได้ถูกเก็บไว้จากการอัปเดตในเวลาแรงงานของเว็บไซต์ที่ไม่มีเครื่องมือนี้จะทำให้เครื่องมือนี้เริ่มต้นอีกครั้งโดยทันทีและรีสตาร์ทนาฬิกาสี่วินา

การปิดการแปลงรวม

เพื่อปิดการแคชและเลือกที่จะไม่ใช้แคชเพื่อดึงข้อมูลล่าสุดจากเซิร์ฟเวอร์ให้เพิ่ม พารามิเตอร์ DataStoreGetOptions ใน Class

การปิดการแชมเปญเป็นประโยชน์หากคุณมีหลายเซิร์ฟเวอร์เขียนโค้ดไปยังกุญแจที่มีความถี่สูงและต้องการรับค่าล่าสุดจากเซิร์ฟเวอร์ อย่างไรก็ตาม มันสา

การเรียงลำดับ

Class.DataStoreService เก็บข้อมูลในรูปแบบ JSON เมื่อคุณบันทึกข้อมูล Lua ใน Studio โรบ็อกสามารถใช้กระบวนการที่เรียกว่า serialization เพื่อแปลงข้อมูลนั้นเป็น JSON เพื่อบันทึกในคลังข้อมูล โรบ็อก

การเรียงดายและการถอดรหัสสนับสนุน Lua ข้อมูลดาต้าที่ต่อไปนี้:

  • ตัวเลข
    • คุณไม่ควรเก็บสุญญากาศตัวเลขพิเศษ inf ، -inf และ nan เพราะค่าเหล่านี้ไม่เหมาะกับมาตรฐาน JSON คุณไม่สามารถเข้าถึงกุญแจที่มีค่าเหล่านี้ด้วย Open Cloud
  • ตาราง
    • ตารางต้องมีเฉพาะประเภทข้อมูลที่สนับสนุนเท่านั้น
    • ตัวเลขจะถูกแปลงเป็นสตริงหากความยาวของตารางคือ 0

หากคุณพยายามเก็บข้อมูลประเภทที่ไม่รองรับการเรียกซ้ำ คุณจะ:

  • ล้มเหลวในการเก็บข้อมูลประเภทนั้นและรับข้อความผิดพลาด
  • สำเร็จในการเก็บไว้ในรูปแบบข้อมูลนี้ในฐานะ nil

เพื่อดีบั๊กว่าทำไมประเภทข้อมูลของคุณถูกเก็บไว้ในรูปแบบ nil คุณสามารถใช้คุณสมบัติ JSONEncode เมื่อคุณส่งข้อมูลประเภท Lua ของคุณเข้าในคุ