ร้านข้อมูล

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

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

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

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

สำหรับข้อมูลชั่วคราวที่คุณต้องอัปเดตหรือเข้าถึงบ่อยๆ ให้ใช้ คลังหน่วยความจำ

เปิดใช้งานการเข้าถึงสตูดิโอ

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

เพื่อเปิดใช้งานการเข้าถึง Studio ในประสบการณ์ที่เผยแพร่ แล้ว:

  1. นำทางไปที่ ความปลอดภัย .
  2. เปิดใช้งานสวิตช์ เปิดใช้งานการเข้าถึงสตูดิโอไปยังบริการ API 4. คลิก บันทึก .

เก็บข้อมูลการเข้าถึง

เพื่อเข้าถึงคลังข้อมูลภายในประสบการณ์:

  1. เพิ่ม DataStoreService ให้กับด้านเซิร์ฟเวอร์ Script
  2. ใช้ฟังก์ชัน GetDataStore() และระบุชื่อของคลังข้อมูลที่คุณต้องการใช้หากไม่มีคลังข้อมูล สตูดิโอจะสร้างขึ้นเมื่อคุณบันทึกข้อมูลประสบการณ์เป็นครั้งแรก

local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")

สร้างข้อมูล

คลังข้อมูลเป็นเกือบสารานุกรมที่คล้ายกับโต๊ะ Luauดัชนีกุญแจที่ไม่ซ้ำกัน แต่ละค่า ร้านค้าPlayer.UserId หรือสตริงที่มีชื่อสำหรับโปรโมชันประสบการณ์

คีย์ มูลค่า
3125060850
35167597920
50530609278000
คีย์ มูลค่า
ActiveSpecialEventปาร์ตี้ฤดูร้อน 2
ActivePromoCodeโบนัส123
CanAccessPartyPlaceจริง

เพื่อสร้างบันทึกใหม่ โทร SetAsync() ด้วยชื่อกุญแจและค่า


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end

อัปเดตข้อมูล

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


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end

ตั้งค่า vs อัปเดต

ใช้ชุดเพื่ออัปเดตคีย์เฉพาะอย่างรวดเร็ว ฟังก์ชัน SetAsync():

  • อาจทำให้เกิดความไม่สอดคล้องของข้อมูลหากสองเซิร์ฟเวอร์พยายามตั้งคีย์เดียวกันในเวลาเดียวกัน
  • นับเฉพาะกับขีดจํากัดการเขียนเท่านั้น

ใช้การอัปเดตเพื่อจัดการกับความพยายามหลายเซิร์ฟเวอร์ ฟังก์ชัน UpdateAsync() :

  • อ่านค่ากุญแจปัจจุบันจากเซิร์ฟเวอร์ที่อัปเดตล่าสุดก่อนที่จะทำการเปลี่ยนแปลงใดๆ
  • ช้าลงเพราะอ่านก่อนที่จะเขียน
  • นับกับทั้งขีดจํากัดการอ่านและการเขียน

อ่านข้อมูล

เพื่ออ่านค่าของรายการคลังข้อมูลให้โทร GetAsync() ด้วยชื่อกุญแจของรายการ


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end

เพิ่มข้อมูล

เพื่อเพิ่มจํานวนเต็มในคลังข้อมูล โทร IncrementAsync() ด้วยชื่อกุญแจของเอนทิตีและจํานวนสําหรับจํานวนที่จะเปลี่ยนค่าIncrementAsync() เป็นฟังก์ชันสะดวกที่ช่วยให้คุณหลีกเลี่ยงการเรียก UpdateAsync() และเพิ่มตัวเลขอย่าง手動


local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end

ลบข้อมูล

เพื่อลบรายการและคืนค่าที่เกี่ยวข้องกับกุญแจ โทร RemoveAsync()


local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end

เมทาดาต้า

มีสองประเภทของเมตาดาต้าที่เกี่ยวข้องกับกุญแจ:

  • กำหนดโดยบริการ : เมทาดาต้าอ่านได้เริ่มต้น เช่น เวลาอัปเดตล่าสุดและเวลาสร้าง ทุกวัตถุมีเมทาดาต้าอ่านได้โดยบริการ
  • กำหนดเองโดยผู้ใช้ : เมทาดาต้าที่กําหนดเองสําหรับการแท็กและจัดหมวดหมู่ กําหนดโดยใช้วัตถุ DataStoreSetOptions และฟังก์ชัน SetMetadata()

เพื่อจัดการเมตาดาต้า ขยายฟังก์ชัน SetAsync() , UpdateAsync() , GetAsync() , IncrementAsync() และ RemoveAsync()

  • SetAsync() ยอมรับอาร์กิวเมนต์ที่สามและที่สี่ที่เลือกได้:

    • ตารางของ UserIds . สิ่งนี้สามารถช่วยในการติดตามและลบลิขสิทธิ์เนื้อหาและทรัพย์สินทางปัญญา

    • วัตถุ DataStoreSetOptions ที่คุณสามารถกำหนดเมตาดาตาที่กำหนดเองได้โดยใช้ฟังก์ชัน SetMetadata()


      local DataStoreService = game:GetService("DataStoreService")
      local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
      local setOptions = Instance.new("DataStoreSetOptions")
      setOptions:SetMetadata({["ExperienceElement"] = "Fire"})
      local success, errorMessage = pcall(function()
      experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)
      end)
      if not success then
      print(errorMessage)
      end
  • GetAsync() , IncrementAsync() และ RemoveAsync() คืนค่าที่สองในวัตถุ DataStoreKeyInfoค่าที่สองนี้มีทั้งคุณสมบัติและฟังก์ชันที่กำหนดโดยบริการเพื่อดึงข้อมูลอ้างอิงที่กำหนดโดยผู้ใช้

    • ฟังก์ชัน GetUserIds() รับตารางของ UserIds ที่คุณส่งไปยัง SetAsync()
    • ฟังก์ชัน GetMetadata() รับเมตาดาตาที่กำหนดเองโดยผู้ใช้ที่คุณส่งไปยัง SetAsync() ผ่าน SetMetadata()
    • คุณสมบัติ Version รับเวอร์ชันของกุญแจ
    • คุณสมบัติ CreatedTime รับเวลาที่กุญแจถูกสร้างโดยจัดรูปเป็นจํานวนมิลลิวินาตั้งแต่ยุค
    • คุณสมบัติ UpdatedTime รับค่าเวลาล่าสุดที่กุญแจถูกอัปเดตโดยจัดรูปเป็นจํานวนมิลลิวินาตั้งแต่ยุค

    local DataStoreService = game:GetService("DataStoreService")
    local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
    local success, currentExperience, keyInfo = pcall(function()
    return experienceStore:GetAsync("User_1234")
    end)
    if success then
    print(currentExperience)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end
  • ฟังก์ชันการโทรกลับของ UpdateAsync() ใช้พารามิเตอร์เพิ่มเติมในวัตถุ DataStoreKeyInfo ที่อธิบายสถานะกุญแจปัจจุบันมันส่งค่าที่แก้ไขกลับ, กุญแจที่เกี่ยวข้องกับ UserIds คีย์


    local DataStoreService = game:GetService("DataStoreService")
    local nicknameStore = DataStoreService:GetDataStore("Nicknames")
    local function makeNameUpper(currentName, keyInfo)
    local nameUpper = string.upper(currentName)
    local userIDs = keyInfo:GetUserIds()
    local metadata = keyInfo:GetMetadata()
    return nameUpper, userIDs, metadata
    end
    local success, updatedName, keyInfo = pcall(function()
    return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
    end)
    if success then
    print(updatedName)
    print(keyInfo.Version)
    print(keyInfo.CreatedTime)
    print(keyInfo.UpdatedTime)
    print(keyInfo:GetUserIds())
    print(keyInfo:GetMetadata())
    end

สำหรับข้อจํากัดเมื่อกําหนดเมตาดาต้าดูข้อจํากัดเมตาดาต้า

จัดเก็บข้อมูลตามลําดับ

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


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")

ร้านข้อมูลที่สั่งซื้อสนับสนุนฟังก์ชันพื้นฐานเดียวกับร้านข้อมูลเริ่มต้น บวกกับฟังก์ชันพิเศษ GetSortedAsync() ฟังก์ชันนี้คือการดึงข้อมูล หลายคีย์เรียงลําดับ ตามลําดับการจัดเรียงที่เฉพาะเจาะจง ขนาดหน้า และมูลค่าขั้นต่ํา/สูงสุด

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


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- ร้านค้า
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- จัดเรียงข้อมูลตามลำดับลงไปในหน้าของสามรายการแต่ละรายการ
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- รับหน้าปัจจุบัน (หน้าแรก)
local entries = pages:GetCurrentPage()
-- ทำซ้ำผ่านคู่คีย์-ค่าทั้งหมดบนหน้า
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- ตรวจสอบว่าหน้าสุดท้ายถูกเข้าถึงแล้วหรือไม่
if pages.IsFinished then
break
else
print("----------")
-- ก้าวไปสู่หน้าต่อไป
pages:AdvanceToNextPageAsync()
end
end
end