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àm | Mô tả |
---|---|
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. | |
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ó. | |
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àm | Mô 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óa | Tầm nhìn |
---|---|
houses/User_1234 | ngôi nhà |
pets/User_1234 | thú cưng |
inventory/User_1234 | kho |
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 = truelocal 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/K1 | house/K1 |
global/L2 | house/L2 |
global/M3 | house/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:
- GetAsync() đến đọc dữ liệu .
- SetAsync() đến tạo dữ liệu .
- UpdateAsync() đến update data .
- IncrementAsync() đến tăng dữ liệu .
- RemoveAsync() để xóa dữ liệu .
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 , -inf và nan, 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ữ