Quản lý các 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.

Quản lý dữ liệu của bạn bằng cách sử dụng phiên bản, danh sách và bộ nhớ.

Phiên bản

Các phiên bản xảy ra khi bạn đặt, cập nhật và tăng dữ liệu. Các hàm 2> Class.GlobalDataStore:SetAsync()

Các bản dự phòng đã phiên bản sẽ hết hạn sau 30 ngày kể từ khi một bản viết mới đã phiên bản chúng.Phiên bản mới nhất không bao giờ hết hạn.

Các chức năng sau đây thực hiện các hoạt động phiên bản hóa:

HàmMô tả

ListVersionsAsync()

Danh sách tất cả các phiên bản cho một chìa khóa bằng cách trả lại một DataStoreVersionPages instanti mà bạn có thể sử dụng để đếm tất cả các số phiên bản. Bạn có thể lọc các phiên bản bằng một phạm vi thời gian.

GetVersionAsync()

Lấy một phiên bản cụ thể của một chìa khóa bằng cách sử dụng số phiên bản của nó.

RemoveVersionAsync()

Xóa một phiên bản cụ thể của một chìa khóa.

Hào này cũng tạo ra một phiên bản mộ khi giữ lại phiên bản trước. Ví dụ, nếu bạn gọi RemoveAsync("User_1234") và sau đó th

Bạn có thể sử dụng phiên bản để xử lý yêu cầu của người dùng. Nếu một người báo cáo rằng một vấn đề đã xảy ra vào ngày 2020-10-09T01:42, bạn có thể khôi phục dữ liệu đến một phiên bản trước đó bằng cách sử dụng ví dụ sau:


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)
-- Nhận ra phiên bản gần giờ đã được đặt
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
-- Đọc bản phiên bản gần nhất
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- Khôi phục giá trị hiện tại bằng cách viết lại nó bằng phiên bản gần nhất
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- Không có kết quả tìm thấy
end
end

Những khoảnh khắc

Cuộn phim dữ liệu lưu trữ dữ liệu nhiều nơi trên một đám mây API cho phép bạn lưu một bản sao tất cả các nơi lưu trữ dữ liệu trong một trải nghiệm một lần một ngày. Trước khi bạn xuất bất kỳ cập nhật dữ liệu nào thay đổi công nghệ l

Ví dụ, mà không có một bản chụp màn hình, nếu bạn xuất bản một cập nhật lúc 3:30 UTC, gây ra sự hư hỏng dữ liệu, dữ liệu bị xuất bản sẽ viết đè lên tất cả dữ liệu đã viết giữa 3:0

Danh sách và hàm từ

Các cửa hàng dữ liệu cho phép bạn lưu trên các thuộc tính bằng cách sử dụng các biểu tượng đầu tiên n của một tên, chẳng hạn như "d" , "do" hoặc "dog" cho bất kỳ key hoặc cửa hàng dữ liệu có một biểu tượng của "dog".

Bạn có thể đặt một tiền tố khi list tất cả các cửa hàng dữ liệu hoặc chìa khóa, và chỉ nhận lại những đối tượng tương ứng với tiền tố đó. Cả hai Class.DataStoreService:ListDataStoresAsync()|ListDataS

HàmMô tả
ListDataStoresAsync()Danh sách tất cả các cửa hàng dữ liệu.
ListKeysAsync()Danh sách tất cả các chìa khóa trong một cơ sở cửa hàngliệu.

Tầm nhìn

Mọi chìa khóa trong một cơ sở dữ liệu có một bảng nội quy hoạt động. Bạn có thể tổ chức các chìa khóa tiếp theo bằng cách đặt một chuỗi độc nhất làm một bảng nội quy cho thứ hạng thứ hai của GetDataStore() . Điều này tự động gắ

Chìa khóaTầm nhìn
houses/User_1234ngôi nhà
pets/User_1234thú cưng
inventory/User_1234kho

Sự kết hợp của tên cửa hàng dữ liệu, phạm vi và chìa khóa độc nhất vô nhị xác định một chìa khóa. Tất cả ba giá trị này đều yêu cầu để xác định một chìa khóa với một phạm vi. Ví dụ, bạn có thể đọc một chìa khóa tên là User_1234 như:


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

Nhưng nếu chìa khóa User_1234 có một phạm vi vàng, bạn chỉ có thể đọc nó như:


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

Tất cả các bộ lọc

DataStoreOptions chứa một AllScopes 속性 cho phép bạn quay

Khi bạn sử dụng thuộc tính AllScopes, tham số thứ hai của GetDataStore() phải là một chuỗi trống ( "" ).


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

Nếu bạn kích hoạt thuộc tính AllScopes và tạo một chiếc chìa khóa mới trong cơ sở dữ liệu, bạn luôn phải xác định một chiếc chìa khóa cho thuộ

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

Đang tạm dừng

Sử dụng caching để lưu trữ dữ liệu tạm thời từ các nhà lưu trữ dữ liệu để cải thiện hiệu suất và giảm số lần gọi đến máy chủ. Ví dụ, một trải nghiệm có thể lưu một bản sao của dữ liệu của mình để có thể truy cập vào nó một cách nhanh chóng mà không cần phải thực hiện một

Caching áp dụng cho những thay đổi bạn thực hiện trên chìa khóa dữ liệu bằng cách sử dụng:

GetVersionAsync() , ListVersionsAsync() , ListKeysAsync() và 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> không thực hiệ

Bởi mặc định, máy chủ sử dụng GetAsync() để lưu giá trị bạn lấy từ máy chủ trong một cache để lưu trong một giây

Tất cả GetAsync() gọi được tại nơi cập nhật sau cùng lập tức khởi động lại thời gian ngắn thứ tư và khởi động lại máy chủ sau cùng.

Vô hiệu hóa Bộ nhớ

Để vô hiệu hóa caching và từ chối sử dụng cache để lấy giá trị mới nhất từ các máy chủ, thêm DataStoreGetOptions tham số vào cuộc gọi Class.GlobalDataStore:GetAsync()|GetAsync() của bạn và đặt <

Vô hiệu hóa caching là hữu ích nếu bạn có nhiều máy chủ viết vào một chìa khóa với tần số cao và cần phải nhận giá trị mới nhất từ các máy chủ. Tuy nhiên, nó có thể gây ra việc bạn tiêu thụ nhiều hơn giới hạn lưu tr

Hóa

Class.DataStoreService lưu dữ liệu bằng hình dạng JSON. Khi bạn lưu dữ liệu Lua vào Studio, Roblox sử dụng một quá trình gọi là hợp nhất để chuyển đổi dữ liệu đó thành JSON để lưu vào các kho dữ liệu. Sau đó, Roblox chuyển dữ liệu của bạn trở lại Lua v

Hỗ trợ serialize và deserialize dữ liệu Lua theo các loại sau:

  • Số lượng
    • Bạn không nên lưu các giá trị số đặc biệt inf , -infnan, vì các giá trị này không tuân theo các tiêu chuẩn của JSON. Bạn không thể truy cập các khóa mà chứa các giá trị này với Open Cloud.
  • Bảng)
    • Các bảng chỉ được chứa các loại dữ liệu được hỗ trợ khác
    • Các chìa khóa số được dịch thành chuỗi nếu chiều dài của bảng là 0

Nếu bạn cố gắng lưu một loại dữ liệu mà serialization không hỗ trợ, bạn sẽ:

  • Không thể lưu hữu loại dữ liệu đó và nhận được thông tin nhắnlỗi.
  • Thành công trong việc lưu nhận dạng dữ liệu đó như nil .

Để debug tại sao dữ liệu của bạn được lưu như nil, bạn có thể sử dụng chức năng JSONEncode. Khi bạn gửi dữ liệu Lua của bạn vào chức năng này, bạn nhận nó trở lại trong dạng Roblox sẽ lưu với các dữ