Thực hành tốt nhất cho 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.

Sử dụng những thực hành này để tổ chức và quản lý dữ liệu đáng tin cậy, có thể mở rộng và có thể quan sát trong suốt vòng đời của nó.

Tổ chức dữ liệu của bạn

Tạo ít kho dữ liệu hơn

Các kho dữ liệu hoạt động tương tự như các bảng trong cơ sở dữ liệu. Sử dụng một tập hợp nhỏ, cố định các kho dữ liệu và tổ chức các bản ghi bên trong chúng theo khóa. Ví dụ, lưu trữ hồ sơ của mỗi người chơi trong một kho dữ liệu PlayerData thay vì tạo một kho dữ liệu cho mỗi người chơi.

Sử dụng một hoặc vài khóa cho mỗi người chơi

Lưu trữ dữ liệu bền vững cho mỗi người chơi dưới một khóa khi dữ liệu phù hợp với giới hạn kích thước đối tượng 4 MB. Ví dụ, sử dụng một khóa như User_123456 trong kho dữ liệu PlayerData. Mô hình này giảm số lượng yêu cầu, cho phép bạn cập nhật các giá trị liên quan một cách nguyên tử và làm cho việc hoàn tác dễ dàng hơn để lý giải.

Nếu các phần khác nhau của dữ liệu người chơi có các mẫu truy cập khác nhau hoặc tiếp cận giới hạn kích thước hoặc thông lượng theo khóa, hãy chia bản ghi thành một số khóa xác định. Giữ dữ liệu cần thay đổi nguyên tử trong cùng một khóa.

Sử dụng các mẫu và tiền tố khóa tĩnh

Xây dựng tên khóa từ các định danh ổn định và các mẫu tĩnh, chẳng hạn như User_{UserId}. Đừng sử dụng tên hiển thị hoặc các giá trị khác có thể thay đổi. Các mẫu tĩnh làm cho các khóa trở nên dự đoán được trên các máy chủ và công cụ. Đối với các kho dữ liệu, chúng cũng cho phép xử lý tự động quyền được quên xác định dữ liệu người chơi.

Sử dụng tiền tố để nhóm các khóa liên quan. Ví dụ, một trải nghiệm hỗ trợ nhiều hồ sơ nhân vật có thể sử dụng User_123456/Profile/Warrior và User_123456/Profile/Mage. Bạn có thể sau đó truyền User_123456/Profile cho ListKeysAsync() để liệt kê các hồ sơ của người chơi đó.

Các phạm vi là một cách khác để phân chia một kho dữ liệu. Một phạm vi thêm một chuỗi vào mỗi khóa trong phiên bản kho dữ liệu đó, và mặc định là global.

Đánh giá các mô-đun kho dữ liệu

Các mô-đun kho dữ liệu của bên thứ ba luôn là một lựa chọn, và trong nhiều trường hợp có thể được ưa chuộng hơn việc xây dựng hệ thống từ đầu. Trước khi áp dụng một cái, hãy xem xét quyền sở hữu, trạng thái bảo trì và bộ tính năng của nó. Hiểu cách truy cập và di chuyển dữ liệu của bạn mà không cần mô-đun.

Giảm và phân phối yêu cầu

Đệm dữ liệu người chơi trong bộ nhớ

Tải dữ liệu của một người chơi vào đầu phiên và giữ một bản sao cục bộ trên máy chủ cho gameplay. Cập nhật bản sao cục bộ thay vì gửi yêu cầu kho dữ liệu cho mỗi thay đổi. Lưu nó định kỳ, khi người chơi rời đi, khi máy chủ tắt, và tại các điểm kiểm tra quan trọng như xử lý mua hàng. Chọn một khoảng thời gian lưu định kỳ nằm trong giới hạn yêu cầu của bạn và ngắn hơn bất kỳ thời gian khóa phiên nào; mẫu dữ liệu người chơi và mua hàng sử dụng 180 giây.

Giãn cách các yêu cầu lặp lại

Đừng bắt đầu các yêu cầu lặp lại từ mọi máy chủ theo cùng một lịch trình. Trước khi bắt đầu một vòng lặp tần suất cố định, gán mỗi máy chủ hoặc người chơi một độ lệch ngẫu nhiên ban đầu. Đối với các vòng lặp kiểm tra hoặc phối hợp không yêu cầu một nhịp điệu chính xác, thêm độ rung ngẫu nhiên có giới hạn vào mỗi khoảng thời gian. Những mẫu này phân phối các yêu cầu theo thời gian và giảm thiểu các đỉnh lưu lượng đồng bộ.

Thử lại các lỗi tạm thời

Bọc các yêu cầu trong pcall() và thử lại các lỗi tạm thời với độ trễ tăng dần. Thêm độ rung ngẫu nhiên vào mỗi độ trễ để các máy chủ không thử lại đồng thời. Giới hạn độ trễ và số lần thử, và đừng thử lại các lỗi do yêu cầu không hợp lệ hoặc các hoạt động không còn có thể cung cấp kết quả hữu ích.

Xử lý các lần thử lại kho dữ liệu theo thứ tự cho mỗi khóa. Một yêu cầu cũ hơn thử lại sau khi một yêu cầu mới hơn thành công có thể ghi đè dữ liệu mới hơn. Cũng cần tính đến các ghi với kết quả không xác định: một cuộc gọi thất bại có nghĩa là máy chủ không nhận được phản hồi thành công, nhưng backend có thể đã hoàn thành việc ghi. Để biết thêm thông tin, xem Mã lỗi và giới hạn kho dữ liệu và Thử lại.

Ưu tiên UpdateAsync hơn SetAsync

Ưu tiên UpdateAsync() khi một ghi phụ thuộc vào giá trị hiện tại hoặc khi nhiều máy chủ có thể ghi cùng một khóa. UpdateAsync() đọc giá trị mới nhất vào callback của bạn trước khi ghi, điều này giảm thiểu việc mất cập nhật. SetAsync() ghi đè khóa mà không đọc trước và có thể gây ra sự không nhất quán nếu hai máy chủ ghi cùng một lúc.

Sử dụng SetAsync() khi bạn tạo một khóa mới hoặc thay thế một giá trị không phụ thuộc vào giá trị trước đó. Để so sánh giữa hai phương pháp, xem Set vs update.

Chia nhỏ các khóa nóng

Mỗi khóa có giới hạn thông lượng đọc và ghi. Nếu một bản ghi logic nhất quán đạt đến những giới hạn này sau khi bạn giảm bớt các yêu cầu không cần thiết, hãy chia nó thành các khóa xác định. Chọn một phần ổn định từ một định danh, chẳng hạn như User_{UserId}_Inventory_{ShardId}, để mọi máy chủ định tuyến cùng một dữ liệu đến cùng một phần.

Việc chia nhỏ làm cho việc duy trì tính nhất quán và thực hiện các di chuyển trong tương lai trở nên phức tạp hơn. Đừng chia nhỏ dữ liệu phù hợp với một khóa và vẫn nằm dưới giới hạn thông lượng của nó.

Xây dựng quy trình hoạt động

Sử dụng các công cụ có sẵn cùng nhau:

  1. Quan sát. Sử dụng Bảng điều khiển Quan sát Kho Dữ liệu để theo dõi các yêu cầu, trạng thái phản hồi, thông lượng và lưu trữ. Cấu hình cảnh báo tùy chỉnh cho các chỉ số kho dữ liệu quan trọng để nhóm của bạn có thể phản ứng với các lỗi kéo dài hoặc sự tăng trưởng bất ngờ. Thông báo từ Creator Hub cũng cho bạn biết khi lưu trữ gần hoặc vượt quá giới hạn và bao gồm hướng dẫn và liên kết đến các bảng điều khiển.
  2. Kiểm tra. Sử dụng Quản lý Kho Dữ liệu để kiểm tra các kho dữ liệu, khóa, mức sử dụng lưu trữ và chi phí ước tính. Nếu trải nghiệm có hơn 100 kho dữ liệu, danh sách Kho Dữ liệu sẽ không hiển thị kích thước và số lượng khóa. Sử dụng Open Cloud hoặc Bộ xử lý Kho Dữ liệu Batch cho các chỉ số đó.
  3. Khắc phục. Sử dụng Quản lý Kho Dữ liệu cho các bản ghi cá nhân. Sử dụng API kho dữ liệu Open Cloud hoặc Bộ xử lý Kho Dữ liệu Batch cho các quy trình lặp lại hoặc quy mô lớn.
  4. Mở rộng có chủ đích. Đầu tiên giảm bớt lưu trữ và yêu cầu không cần thiết. Nếu việc sử dụng hợp lệ vượt quá các hạn ngạch mặc định, hãy đánh giá Dịch vụ Mở rộng.

Open Cloud và máy chủ trò chơi chia sẻ ngân sách yêu cầu cấp độ trải nghiệm. Giới hạn tỷ lệ các kịch bản Open Cloud hoạt động để chúng không can thiệp vào lưu lượng trực tiếp.

Quản lý vòng đời dữ liệu

Sử dụng các phiên bản kho dữ liệu thay vì tạo một khóa mới cho mỗi phiên bản. Chỉ phiên bản mới nhất của một khóa tính vào mức sử dụng lưu trữ, và các phiên bản cho phép bạn kiểm tra hoặc khôi phục các giá trị trước đó.

Sử dụng kho nhớ cho dữ liệu tạm thời và thay đổi nhanh chóng. Dữ liệu trong kho nhớ tự động hết hạn và không làm tăng mức sử dụng lưu trữ của kho dữ liệu bền vững.

Xóa dữ liệu thử nghiệm khi việc thử nghiệm kết thúc và loại bỏ dữ liệu cho các sự kiện đã hết hạn hoặc các tính năng đã ngừng hoạt động. Sau khi bạn đánh dấu một kho dữ liệu để xóa, sẽ có một khoảng thời gian 30 ngày trong đó bạn có thể khôi phục nó. Sau 30 ngày đó, Roblox sẽ xóa vĩnh viễn kho dữ liệu. Để biết thêm thông tin, xem Quản lý Kho Dữ liệu.

Thiết lập quy trình quyền được quên

Cấu hình xử lý quyền được quên tự động (RTBF) cho dữ liệu người chơi theo các mẫu kho dữ liệu và khóa tĩnh. RTBF tự động là quy trình làm việc được ưa chuộng vì Roblox áp dụng các mẫu xóa của bạn khi xử lý một yêu cầu đủ điều kiện.

Nếu RTBF tự động không hỗ trợ sơ đồ dữ liệu của bạn, hãy sử dụng webhook quyền xóa để chạy một quy trình xóa tùy chỉnh. Xác minh rằng quy trình nào cũng xóa tất cả dữ liệu người chơi phù hợp.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.