Kho dữ liệu

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Class.DataStoreService cho phép bạn lưu trữ dữ liệu mà cần phải tồn tại giữa các phiên, chẳng hạn như vật phẩm trong kho đồ của một người chơi hoặc điểm kỹ năng. Các lưu trữ dữ liệu đồng nhất theo trải nghiệm, vì vậy bất kỳ nơi nào trong một trải n

Nếu bạn muốn thêm kiểm soát quyền granular cho dữ liệu của bạn và truy cập vào chúng ngoài các máy chủ Studio hoặc Roblox, bạn có thể sử dụng Open Cloud APIs for data stores .

Đối với dữ liệu tạm thời mà bạn cần phải cập nhật hoặc truy cập thường xuyên, hãy sử dụng lưu trữ bộ nhớ.

Mở Studio Access

Bởi mặc định, các trải nghiệm được thử nghiệm trong Studio không thể truy cập các cửa hàng dữ liệu, vì vậy bạn phải đầu tiên bật chúng. Truy cập các cửa hàng dữ liệu trong Studio có thể là nguy hiểm cho các trải nghiệm trực tiếp, vì Studio truy cập các cửa h

Để bật Studio access in a published experience:

  1. Đi đến Trang chủ > Cài đặt trò chơi > Bảo mật .
  2. Kích hoạt nút Kích hoạt Studio Access to API Services .
  3. Nhấp vào Lưu .

Tiếp cận Data Stores

Để truy cập vào một cửa hàng dữ liệu bên trong một trải nghiệm:

  1. Thêm DataStoreService vào một máy chủ-side Script .
  2. Sử dụng chức năng GetDataStore() và chỉ định tên của cửa hàng dữ liệu bạn muốn sử dụng. Nếu cửa hàng dữ liệu không tồn tại, Studio tạo một khi bạn lưu dữ liệu trải nghiệm của bạn lần đầu tiên.

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

Tạo dữ liệu

Một cơ sở dữ liệu là thực sự một bách khoa toàn thư, tương tự như một bảng Lua. Một chỉ mục độc nhất key trong cơ sở dữ cửa hàng, giống như một Player.UserId độc nhất của người dùng hoặc một chuỗi tên cho một quảng cáo trả tiền.

Khoá chìa dữ liệu người dùng Giá trị
3125060850
35167597920
50530609278000
Khóa dữ liệu quà tặng Giá trị
Sự kiện đặc biệt chủ độngNhóm Hè 2
Mã quà tặng đang hoạt độngThưởng123
Có thể truy cập PartyPlaceđúng

Để tạo một mục mới, gọi SetAsync() với tên chìa khóa và giá trị.


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

Cập nhật dữ liệu

Để thay đổi giá trị lưu trong một cấu hữu dữ cửa hàng, gọi UpdateAsync() với tên giá trị và một hàm chức năng định cách bạn muốn cập nhật cấu hữu dữ liệu. Hàm chức năng này được lư


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

Cài đặt vs Cập nhật

Sử dụng set để cập nhật nhanh một chìa khóa cụ thể. Hàm SetAsync() :

  • Có thể gây ra sự không cohững dữ liệu nếu hai máy chủ cố gắng đặt cùng một chìa khóa vào cùng một thời điểm
  • Chỉ đếm đối với giới hạn viết

Sử dụng cập nhật để xử lý những mối quan tâm nhiều máy chủ. Hành động UpdateAsync() được:

  • Đọc giá trị chìa khóa hiện tại từ máy chủ mà nó đã cập nhật lần cuối trước khi thực hiện bất kỳ thay đổi nào
  • Chậm hơn vì nó đọc trước khi viết
  • Đếm cả hai giới hạn đọc và viết

Đọc dữ liệu

Để đọc giá trị của một hàng GetAsync() với tên chìa khóa của hàng đó.


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

Tăng dữ liệu

Để tăng một số nguyên tại một cửa hàng dữ liệu, hãy gọi IncrementAsync() với tên chìa khóa của hàng và một số để thay đổi giá trị. Class.GlobalDataStore:IncrementAsync()


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

Loại bỏ dữ liệu

Để xóa một hàng và trả lại giá trị được liên kết với chìa khóa, hãy gọi 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

Dữ liệu Mô tả

Có hai loại dữ liệu liên quan đến chìa khóa:

  • Dịch vụ định nghĩa : Mệnh danh dữ liệu mặc định, như thời gian cập nhật mới nhất và thời gian tạo. Mọi thống kê đều có dịch vụ định nghĩa.
  • Tùy chỉnh người dùng : Mô tả tùy chỉnh cho tag và thể loại. Được định nghĩa bằng cách sử dụng DataStoreSetOptions đối tượng và hàm SetMetadata().

Để quản lý mét dữ liệu, hãy mở rộng SetAsync() , UpdateAsync() , GetAsync() và 1> Class.GlobalDataStore:IncrementAsync()|In

  • SetAsync() đã chấp nhận các引数 bên thứ ba và thứ tư:

    • Một bảng của UserIds . Điều này có thể giúp với công bố bản quyền nội dung và theo dõi và xóa tài sản trí tuệ.

    • Một DataStoreSetOptions 对象, nơi bạn có thể định nghĩa các thuộc tính tùy chỉnh bằng cách sử dụng chức năng 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() trả lại một giá trị thứ hai trong đối tượng 0> Class.DataStoreKeyInfo0> này. Giá trị thứ h

    • Hàm GetUserIds() lấy bảng của UserIds mà bạn đã gửi đến SetAsync() .
    • Hàm GetMetadata() lấy dữ liệu người dùng mà bạn đã gửi cho SetAsync() qua SetMetadata() .
    • Cấu hình Version lấy thông tin phiên bản của chìa khóa.
    • Thuộc tính CreatedTime lấy thời gian mà chìa khóa đã được tạo, biểu thị dưới dạng số mili giây kể từ khi bắt đầu.
    • Thuộc tính UpdatedTime lấy thời gian cuối cùng mà nó đã được cập nhật, biểu tượng như số mili giây kể từ khi bắt đầu.

    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
  • Hàm gọi UpdateAsync() của DataStoreKeyInfo được thêm một tham số bổ sung trong đối tượng UserIds mô tả trạng thái chính của chìa khóa. Nó trả lại giá trị đã điều chỉnh, các chìa k


    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

Đối với giới hạn khi định nghĩa dữ liệu, xem Giới hạn dữ liệu .

Các Cửa Hàng Dữ Liệu Đã Đặt Hàng

Bởi mặc định, các cửa hàng dữ liệu không sắp xếp nội dung của họ. Nếu bạn cần lấy dữ liệu theo cách đã đặt, chẳng hạn như trong bảng xếp hạng xếp hạng, gọi GetOrderedDataStore() thay vì Class.DataStoreService:GetDataStore


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

Các cửa hàng dữ liệu đã đặt hàng hỗ trợ các chức năng cơ bản tương tự như các cửa hàng dữ liệu mặc định, plus độc đáo GetSortedAsync() function. This retrieves nhiều chìa khóa sort based on a specific sorting order, page size, and minimum/maximum values.

Ví dụ sau đây sắp xếp dữ liệu nhân vật thành các trang với ba hàng, mỗi hàng theo thứ tự giảm dần, sau đó lặp qua các trang và hiển thị tên và tuổi của mỗi nhân vật.


local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- Lưu trữ dữ liệu đã được lựa cửa hàng
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
-- Sắp xếp dữ liệu theo thứ tự giảm dần thành các trang ba và mỗi trang ba dữ liệu
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- Lấy trang hiện tại (đầu tiên)
local entries = pages:GetCurrentPage()
-- Lặp lại tất cả các cặp giá trị chìa khóa trên trang
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Kiểm tra xem trang cuối cùng đã đạt được
if pages.IsFinished then
break
else
print("--------")
-- Tiến đến trang tiếp theo
pages:AdvanceToNextPageAsync()
end
end
end