Kho lưu trữ

*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.

MemoryStoreService là một dịch vụ dữ liệu qua mạng nhanh và thấp với khả năng lưu trữ dữ liệu nhanh chóng trong bộ nhớ để truy cập từ tất cả các máy chủ trong một phiên hồi hương trực tiếp. <

Cấu trúc dữ liệu

Thay vì truy cập trực tiếp vào dữ liệu thô, các lưu trữ bộ nhớ có ba cấu trúc dữ liệu thông thường được chia sẻ giữa các máy chủ để xử lý nhanh: lưu trữ map sort, lưu trữ hàng đợi và lưu trữ map. Mỗi cấu trúc dữ liệu đều tốt cho một số tr

  • Kết nối các trận đấu dựa trên kỹ năng - Lưu thông tin người dùng, chẳng hạn như cấp độ kỹ năng, trong một hàng đợi chung giữa các máy chủ, và sử dụng máy chủ lobby để thực hiện kết nối các trận đấu theo thời gian thực.
  • Trao đổi và đấu giá trên các máy chủ - Bật trao đổi toàn cầu giữa các máy chủ khác nhau, nơi người dùng có thể đăng nhập vật phẩm với giá thay đổi thời gian thực, với một bảng địa lý of các cặp giá trị chìa khóa.
  • Bảng xếp hạng toàn cầu - Lưu và cập nhật xếp hạng người dùng trên một bảng xếp hạng chung trong một bản đồ sắp xếp .
  • Túi đồ chia sẻ - Lưu các mục túi đồ và thống kê trong một túi đồ chia sẻ, nơi người dùng có thể sử dụng các mục túi đồ cùng nhau.
  • Cache cho Dữ liệu vững chắc - Sao chép và sao chép dữ liệu vững chắc của bạn trong một cơ sở dữ liệu lên một cử nhớ lưu map để có thể làm như một cấu hình và cải thiện hiệu lựccủa trải nghiệm của bạn.

Nói phổ quát, nếu bạn cần phải truy cập dữ liệu dựa trên một chìa khóa cụ thể, hãy sử dụng bảng hasher. Nếu bạn cần đó dữ liệu để được sắp xếp, hãy sử dụng bảng sắp xếp. Nếu bạn cần xử lý dữ liệu của mình theo một trật tự nhất định, hãy sử dụng một hàng đợi.

Giới hạn và Tỷ lệ

Để duy trì sự mở rộng và hiệu hiệu lựchệ thống, bộ nhớ có các tỷ lệ sử dụng dữ liệu cho kích thước bộ nhớ, yêu cầu API và kích thước cấu hình dữ liệu.

Các kho lưu trữ dữ liệu có chính sách chấm dứt dựa trên thời gian hết hạn, cũng được gọi là thời gian sống (TTL). Các mục được chấm dứt sau khi hết hạn, và quota bộ nhớ được tự động tăng lên cho các mục mới. Khi bạn đánh trúng giới hạn lưu trữ, tất cả các

Tỷ lệ kích thước bộ nhớ

Quota bộ nhớ giới hạn số lượng tổng thể bộ nhớ mà một trải nghiệm có thể tiêu thụ. Nó không phải là giá trị cố định. Thay vào đó, nó thay đổi theo thời gian tùy thuộc vào số lượng người dùng trong trải nghiệm theo công thức sau: 64K

Khi người dùng tham gia trải nghiệm, quota bộ nhớ bổ sung ngay lập tức có sẵn. Khi người dùng rời khỏi trải nghiệm, quota không giảm ngay lập tức. Có một thời gian truyền dữ liệu bảy ngày trước khi quota được đánh giá lại đến giá trị thấp hơn.

Sau khi trải nghiệm của bạn đạt quy mô lưu trữ, bất kỳ yêu cầu API nào tăng kích thước lưu trữ luôn luôn thất bại. Các yêu cầu giảm kích thước lưu trữ vẫn thành công.

Với bảng đồ thống kê quan sát, bạn có thể xem quy mô lưu trữ của trải nghiệm của mình trong thời gian thực bằng cách sử dụng bảng Sử dụng bộ nhớ .

Giới hạn yêu cầu API

Đối với giới hạn yêu cầu API, có một yêu cầu đơn vị quota áp dụng cho tất cả các cuộc gọi API của MemoryStoreService . Quota là 1000 + 100 * [number of concurrent users] yêu cầu đơn vị mỗi phút.

Hầu hết các cuộc gọi API chỉ tiêu thụ một đơn vị yêu cầu, với một vài ngoại lệ:

  • MemoryStoreSortedMap:GetRangeAsync()

    Tiêu thụ các đơn vị dựa trên số lượng các mục đã được trả lại. Ví dụ, nếu phương thức này trả lại 10 mục, thì lượt gọi được đếm như 10 đơn vị yêu cầu. Nếu nó trả lại một lời không trả lại, nó được đếm như một đơn vị yêu cầu.

  • MemoryStoreQueue:ReadAsync()

    Tiêu thụ các đơn vị dựa trên số lượng các mục đã trả lại, giống như MemoryStoreSortedMap:GetRangeAsync() , nhưng tiêu thụ thêm một đơn vị mỗi hai giây trong khi đọc. Đặc biệt waittimeout để xác định thời gian đọc tối đa với 1> wait1>

  • MemoryStoreHashMap:UpdateAsync()

    Tiêu thụ ít nhất hai đơn vị.

  • MemoryStoreHashMap:ListItemsAsync()

    Sử dụng [number of partitions scanned] + [items returned] các tập tin.

Yêu cầu quota cũng được áp dụng ở cấp trải nghiệm thay vì cấp máy chủ. Điều này cung cấp sự linh hoạt để phân bổ các yêu cầu ở các máy chủ miễn là tỷ lệ yêu cầu tổng không vượt quá quota. Nếu bạn vượt quá quota, bạn nhận được một câu trả lời lỗi khi dị

Với tính năng quan sát hiện có, bạn có thể xem quy tắc yêu cầu của trải nghiệm của bạn trong thời gian thực.

Giới hạn quy mô结構 dữ liệu

Đối với một bản đồ hoặc hàng đợi được sắp xếp, các giới hạn kích thước và số lượng mục dưới đây được áp dụng:

  • Số lượng tối đa của mặt hàng: 1,000,000
  • Kích thước tổng thể tối đa (bao gồm cả các chìa khóa cho bản đồ sắp xếp): 100 MB

Giới hạn per- partition

Xem Giới hạn per- partition .

Tốt nhất

Để giữ cho mẫu sử dụng bộ nhớ của bạn tối ưu và tránh đánh vào giới hạn , hãy thực hiện những lưu ý tốt nhất này:

  • Loại bỏ các mục đã xử lý. Cách làm sạch liên tục các mục đọc bằng cách sử dụng phương thức MemoryStoreQueue:RemoveAsync() cho hàng đợi và MemoryStoreSortedMap:RemoveAsync() cho hàng đợi hàng đợi để giải phóng bộ nhớ và giữ cấu hình dữ

  • Thiết lập thời gian hết hạn đến thời gian giao dịch nhỏ nhất có thể khi thêm dữ liệu. Mặc dù thời gian hết hạn mặc định là 45 ngày cho cả Class.MemoryStoreQueue:AddAsync() và Class.MemoryStoreSortedMap:SetAsync() , thiết lập th

    • Đừng lưu một lượng lớn dữ liệu với hết hạn quá lâu, vì nó có thể vượt quá quota bộ nhớ của bạn và gây ra các vấn đề có thể làm hỏng toàn bộ trải nghiệm của bạn.
    • Luôn luôn xóa các mục không cần thiết hoặc đặt hạn chế thời gian cho các mục ngắn.
    • Nói chung, bạn nên sử dụng xóa rõ ràng để phát hành bộ nhớ và hết hạn mục tài khoản như một cơ chế an toàn để ngăn chặn các mục không được sử dụng khỏi bộ nhớ trong một thời gian dài.
  • Chỉ giữ các giá trị cần thiết trong bộ nhớ.

    Ví dụ, cho một trải nghiệm nhà đấu giá, bạn chỉ cần duy trì lời đề nhiều nhất. Bạn có thể sử dụng MemoryStoreQueue:UpdateAsync() trên một chìa khóa để giữ lời đề cao nhất thay vì giữ tất cả các lời đề trong cấu hình dữ liệu của bạn.

  • Sử dụng exponential backoff để giúp đảm bảo ở dưới giới hạn yêu cầu API.

    Ví dụ, nếu bạn nhận được một DataUpdateConflict, bạn có thể thử lại sau hai giây, sau đó bốn, tám, v.v. thay vì gửi lời mời liên tục đến MemoryStoreService để nhận được câu trả lời đúng.

  • Chia các cấu trúc dữ liệu lớn thành nhiều cấu trúc nhỏ hơn bằng cách chia ra .

    Thường dễ dàng hơn để quản lý dữ liệu trong các cấu trúc nhỏ hơn là lưu trữ tất cả trong một cấu trúc dữ liệu lớn. Phương pháp này cũng có thể giúp loại bỏ giới hạn sử dụng và tỷ lệ. Ví dụ, nếu bạn có một bản đồ sắp x

  • Nén giá trị lưu.

    Ví dụ, hãy xem xét sử dụng thuật toán LZW để giảm kích thước giá trị lưu trữ.

Quan sát

Bảng đồ Phản ánh dữ liệu hữu hạn cung cấp thông tin và phân tích cho quá trình theo dõi và xử lý của bộ nhớ của bạn. Với các bảng thống kê thời gian thực trên các khía cạnh của bộ nhớ của bạn và các yêu cầu API, bạn có thể theo dõi mô hì

Bảng sau đây liệt kích và mô tả tất cả các mã trạng thái của API được cung cấp trên bảng Yêu cầu bằng trạng thái và bảng Yêu cầu bằng API của API x Status. Để biết thêm thông tin về cách giả

Mã tình trạngMô tả
Thành côngThành công.
Giới hạn bộ nhớ dữ liệuVượt quá giới hạn kích thước bộ nhớ cấp độ cấu hình dữ liệu (100MB).
Cập nhật dữ liệu xung độtXung đột do cập nhật cùng một lúc.
Bị từ chối quyền truy cậpKhông được phép truy cập dữ liệu trải nghiệm. Yêu cầu này không tiêu thụ đơn vị yêu cầu hoặc sử dụng quota.
Lỗi nội bộLỗi nội bộ.
Yêu cầu không hợp lệYêu cầu không có thông tin cần thiết hoặc có thông tin sai định dạng.
Các giới hạn dữ liệuVượt quá giới hạn số lượng mặt hàng trong cấp dữ liệu (1M).
Không tìm thấyKhông có mục được tìm thấy ở MemoryStoreQueue:ReadAsync() hoặc MemoryStoreSortedMap:UpdateAsync() . ReadAsync() polls mỗi 2 giây và trả lại mã này cho đến khi nó tìm thấy các mục trong hàng đợi và trả lại mã này cho 1> Class.MemoryStore1> .
Các giới hạn dữ liệuVượt quá giới hạn cấp độ yêu cầu hệ thống dữ liệu (100.000 yêu cầu mỗi phút).
Yêu cầu phân quyền quá giới hạnVượt quá giới hạn yêu cầu phân quyền.
Tổng số lần yêu cầu vượt quá giới hạnVượt quá giới hạn yêu cầu cấp thiết bị.
Giới hạn tổng bộ nhớVượt quá quyền lưu trữ lên cấp thiết lập.
Kích thước giá trị mục quá lớnKích thước giá trị vượt quá giới hạn (32KB).

Bảng sau đây liệt kê các mã từ phe khách hàng, hiện không có sẵn trên Bảng điều khiển quan sát.

Mã tình trạngMô tả
Lỗi nội bộLỗi nội bộ.
Nơi chưa được xuất bảnBạn phải xuất bản nơi này để sử dụng MemoryStoreService.
Không hợp lệClientAccessMemoryStoreService phải được gọi từ máy chủ.
Thời gian không hợp lệThời gian 'expiration' trong trường phải là giữa 0 và 3,888,000.
Yêu cầu không hợp lệKhông thể chuyển giá trị thành JSON.
Yêu cầu không hợp lệKhông thể chuyển đổi sortKey thành một số hoặc chuỗi hợp lệ.
TransformCBallất bạiKhông thể gọi hành động kích hoạt biến hình.
Yêu cầu bị giảmCác yêu cầu gần đây của bộ nhớ đã đạt đến một hoặc nhiều giới hạn.
Cập nhật xung độtĐã vượt qua số lần thử lại tối đa.

Đã xử lý

Bảng sau đề cập và mô tả giải pháp được đề xuất cho mỗi mã trạng thái phản hồi:

LỗiCác tùy chọn Troubleshoot
DataStructureCommands / PartitionCommands

    Thêm một lớp cache địa phương bằng cách lưu thông tin vào một biến khác và kiểm tra lại sau một khoảng thời gian nhấ

    • Phân cách cấu trúc dữ liệu của bạn nếu bạn nhận được một lượng lớn các câu trả lời DataStructureCommandsOverLimit / PartitionCommandsOverLimit .
    • Tích hợp một backoff exponential để tìm một tỷ lệ hợp lý của các yêu cầu để gửi.

Tổng số lần yêu cầu vượt quá giới hạn
Các giới hạn dữ liệu
Giới hạn bộ nhớ dữ liệu
Giới hạn tổng bộ nhớ
Cập nhật dữ liệu xung đột

    Thực hiện một độ trễ ngắn giữa các yêu cầu để đảm bảo rằng nhiều yêu cầu không cập nhật cùng một lúc. Đối với các hàm đã sắp xếp, bạn không n

Lỗi nội bộ

  • Kiểm tra trang thống kê Roblox .
  • .

  • File a 0> báo cáo lỗi 0> đề cập vấn đề với kinh nghiệm của bạn's Universe ID.
  • .

Yêu cầu không hợp lệ
  • Đảm bạo rằng bạn bao gồm các tham số đúng và hợp lệ trong yêu cầu của bạn. Ví dụ về các tham số không hợp lệ bao gồm:
    • Một dòng chuỗi trống
    • Một dòng chuỗi vượt quá giới hạn dài度
Kích thước giá trị mục quá lớn
  • Phân tách hoặc chia giá trị đối tượng thành nhiều chìa khóa.
    • Để tổ chức các chìa khóa đã nhóm, sắp xếp chúng theo thứ tự bằng cách thêm một prefix vào chìa khóa.
  • Mã hóa hoặc nén giá trị lưu trữ.

Làm thử và trình diệt trong Studio

Dữ liệu ở MemoryStoreService được giải cách giữa Studio và sản xuất, vì vậy thay đổi dữ liệu ở Studio không ảnh hưởng đến hành vi sản xuất. Điều này có nghĩa là các gọi API của bạn từ Studio không truy cập vào dữ liệu sản xuất, cho phép bạn kiểm tra an toàn cá

Làm những bài kiểm tra trong Studio có cùng giới hạn và tỷ lệ cưỡng dụng như trong sản xuất. Đối với tỷ lệ cưỡng dụng được tính dựa trên số lượng người dùng, tỷ lệ cưỡng dụng có thể rất nhỏ khi bạn là ng

Đối với thông tin về cách debug một lưu trữ nhớ trong các trải nghiệm trực tiếp hoặc khi kiểm tra trong studio, hãy sử dụng Developer Console .