จัดการข้อมูลของคุณโดยใช้การจัดเก็บรุ่น รายการ และการแคช
การเวอร์ชัน
การเวอร์ชั่นเกิดขึ้นเมื่อคุณ ตั้ง และ ปรับปรุง และ เพิ่ม ข้อมูล ฟั
การแก้ไขคืนฉุกเฉินที่มีอยู่สามารถหมดอายุได้หลังจาก 30 วันหลังจากการเขียนข้อมูลใหม่เขียนข้อมูลเก่า
ต่อไปนี้คือการประมวลผลการเวอร์ชัน
ฟังก์ชัน | คำอธิบาย |
---|---|
รายการเวอร์ชันทั้งหมดสำหรับกุญแจโดยการนำเค้าโครงของ DataStoreVersionPages ที่คุณสามารถใช้เพื่อนับจำนวนเวอร์ชันทั้งหมด คุณสามารถกรองเวอร์ชันโดยใช้ช่วงเวลา | |
คีย์ | |
ลบรุ่นที่เฉพาะของกุญแจ ฟังก์ชันนี้ยังสร้างรุ่นหินมีบุญในขณะที่ยังคงเก็บรุ่นก่อนหน้า เช่น หากคุณโทร 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 = truelocal ds = DataStoreService:GetDataStore("DS1", "", options)
หากคุณเปิดใช้งานสมบัติข้อมูล AllScopes และสร้างรหัสใหม่ในสมบัติข้อมูลด้วยรูปแบบของสมบัติข้อมูล/ชื่
global/K1 | house/K1 |
global/L2 | house/L2 |
global/M3 | house/M3 |
การแคช
ใช้การแชร์จัดเก็บข้อมูลเพื่อเก็บข้อมูลชั่วคราวจากห้องเก็บข้อมูลเพื่อปรับปรุงประสิทธิภาพและลดจำนวนคำขอที่ส่งไปยังเซิร์ฟเวอร์ ตัวอย่างเช่นประสบการณ์สามารถแชร์คัด
การแคชจะใช้กับการเปลี่ยนแปลงที่คุณทำให้กับตัวเก็บข้อมูลด้วย:
- GetAsync() ไปยัง อ่านข้อมูล
- SetAsync() สู่ สร้างข้อมูล .
- UpdateAsync() ไปยัง อัปเดตข้อมูล
- RemoveAsync() ไปยัง ลบข้อมูล .
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 ของคุณเข้าในคุ