MemoryStoreService เป็นบริการข้อมูลที่มีประสิทธิภาพและเชื่อถือได้สูงสำหรับการเก็บข้อมูลในหน่วยความจำที่เร็วขึ้น หน่วยความ
โครงสร้างข้อมูล
แทนที่จะเข้าถึงข้อมูลดิบโดยตรง หน่วยจำเก็ตของหน่วยความจำมีสามโครงสร้างข้อมูลพื้นฐานที่แบ่งปันไปทั่วเซิร์ฟเวอร์เพื่อการประมวลผลที่รวดเร็ว: แผนที่ที่เรียงลำดับ , ค
- จับคู่ขึ้นอยู่กับทักษะ - บันทึกข้อมูลผู้ใช้เช่นระดับทักษะในคิวรวมของเซิร์ฟเวอร์และใช้เซิร์ฟเวอร์ล็อบบี้เพื่อดำเนินการจับคู่โดยรวมในระยะเวลา
- การแลกเปลี่ยนและประมูลเซิร์ฟเวอร์ข้ามเซิร์ฟเวอร์ - เปิดใช้งานการแลกเปลี่ยนระหว่างเซิร์ฟเวอร์ที่หลากหลาย โดยผู้ใช้สามารถเดิมพันไอเทมที่มีราคาเปลี่ยนแปลงในเวลาจริงด้วยการจัดเ
- ลีดเดอร์บอร์ดระดับโลก - เก็บและปรับปรุงอันดับผู้ใช้ในลีดเดอร์บอร์ดระดับแมพรวมภายใน แผนที่ที่เรียงลำดับ * ห้องเก็บของร่วมกัน - บันทึกรายการสินค้าและสถิติในห้องเก็บของร่วมกันที่ผู้ใช้สามารถใช้รายการสินค้าและสถิติในห้องเก็บของร่วมกันได้พร้อมกัน
- เครื่องมือสําหรับข้อมูลที่คงที่ - จัดเก็บและคัดลอกข้อมูลคงที่ของคุณในห้องเก็บข้อมูลเพื่อเก็บในห้องเก็บข้อมูลที่สามารถใช้เป็นเครื่องมือและปรับปรุงประสิทธิภาพของประสบการณ์ขอ
ท่ัวไปหากคุณต้องการเข้าถึงข้อมูลที่ขึ้นอยู่บนกุญแจที่กำหนดเฉพาะใช้แผนที่แฮช หากคุณต้องการให้ข้อมูลนั้นถูกสั่ง ใช้แผนที่ที่เรียงลำดับ หากคุณต้องการประมวลผลข้อมูลในลำดับที่เฉพาะ
ข้อจํากัดและข้อกําหนด
การดำเนินการหน่วยจำเขนข้อมูลมีส่วนในการใช้ข้อมูลสำหรับขนาดหน่วยจำเขนข้อมูล คำขอ API และขนาดของโครงสร้างข้อมูล
หน่วยความจำมีนโยบายการเร่งออกตามเวลาที่หมดอายุ, โดยทั่วไปเรียกว่าเวลาที่อาศัยอยู่ (TTL) อาหรับรายการที่ถูกเร่งออกจะถูกลบออกหลังจากที่พวกเขาหมดอายุ, และ quota หน่วยความจำจะ
ขนาดหน่วยความจำ
ขีดจำกัดหน่วยความจำ จำกัดจำนวนหน่วยความจำที่ประสบการณ์สามารถใช้ได้ มันไม่ใช่มูลค่าตามที่พบในตาราง 64KB + 1KB * [จำนวนผู้ใช้ในประสบการณ์ตามสูตรต่อไปน
เมื่อผู้ใช้เข้าร่วมประสบการณ์ ข้อจํากัดการหุ่นเมมอร์เพิ่มเติมจะทันทีมีอยู่ เมื่อผู้ใช้ออกจากประสบการณ์ ข้อจํากัดนี้จะไม่ลดลงโดยทันที มีระยะเวลาการติดตามเวลาเจ็ดวันก่อนที่ข้อจ�
หลังจากที่ประสบการณ์ของคุณตรงไปยังขนาดหน่วยความจำ การร้องขอ API ใด ๆ ที่เพิ่มขนาดหน่วยความจำเสมอจะล้มเหลว การร้องขอที่ลดหรือไม่เปลี่ยนขนาดหน่วยความจำยังคงประสบความสำเร็จ
ด้วยหน้าจอ ความสามารถในการมองเห็นได้ คุณสามารถดูขนาดหน่วยความจำของประสบการณ์ของคุณในเวลาจริงโดยใช้ชาร์ท การใช้หน่วยความจำ
ข้อจํากัดการร้องขอ API
สำหรับข้อจํากัดการร้องขอ API มี รายการห้องขอ ที่ใช้สําหรับการโทร API ทั้งหมด ของ MemoryStoreService รายการคําขออยู่ที่ 1000 + 100 * [จํานวนผู้ใช้] ต่อ
การโทร API ส่วนใหญ่ใช้เวลาเพียงหนึ่งหน่วยคำขอเท่านั้น โดยมีข้อยกเว้นสองสามข้อ:
MemoryStoreSortedMap:GetRangeAsync()
ใช้หน่วยตามจำนวนรายการที่กลับมา เช่น หากวิธีนี้กลับมา 10 รายการ การเรียกจะนับเป็นหน่วยคำขอ 10 หน่วย หากกลับมาเป็นตอบกลับที่ว่างเปล่า จะนับเป็นหน่วยคำขอเดียว
ใช้หน่วยตามจำนวนรายการที่กลับมา เช่นเดียวกับ MemoryStoreSortedMap:GetRangeAsync() แต่ใช้หน่วยเพิ่มเติมทุกสองวินาทีขณะอ่าน กำหนดเวลาอ่านสูงสุดด้วย waitTimeout ตัวแปร
MemoryStoreHashMap:UpdateAsync()
การใช้งานอย่างน้อยสองหน่วย
MemoryStoreHashMap:ListItemsAsync()
การใช้ [จำนวนผลการสแกน] + [ไอเทมที่กลับมา] หน่วย
ตัวอนุญาตคำขอยังถูกประยุกต์ในระดับประสบการณ์แทนที่จะเป็นระดับเซิร์ฟเวอร์ นี่จะให้ความยืดหยุ่นในการสร้างคำขอระหว่างเซิร์ฟเวอร์ตามที่อัตราคำขอรวมไม่เกินขีดจำกัด หากคุณเกินข
ด้วยคุณสมบัติ ความสามารถในการดู ที่มีอยู่ คุณสามารถดูจำนวนของห้องขอของประสบการณ์ของคุณในเวลาจริงได้
ขนาดของโครงสร้างข้อมูล
สำหรับแผนที่หรือคิวที่เรียบเรียงเดียว ขนาดและจำนวนรายการต่อไปนี้เป็นข้อจํากัด:
- จำนวนรายการสูงสุด: 1,000,000
- ขนาดรวมสูงสุด (รวมทั้งกุญแจสำหรับแผนที่ที่เรียงลำดับ): 100 MB
ข้อจํากัดระหว่างผาน
ดีที่สุด การฝึกอบรม
เพื่อให้แนวโน้มการใช้หน่วยความจำของคุณเป็นปกติและหลีกเลี่ยงการโจมตี ขีดจำกัด ให้ปฏิบัติตามนี้ดีที่สุด:
ลบรายการที่ประมวลผลแล้ว ทำความสะอาดรายการที่อ่านโดยใช้วิธี MemoryStoreQueue:RemoveAsync() สำหรับคิวและ MemoryStoreSortedMap:RemoveAsync() สำหรับคิวส์ สามารถปลดปล่อยหน่วยความจำได
ตั้งเวลาหมดอายุให้เล็กที่สุดเมื่อเพิ่มข้อมูล แม้ว่าเวลาหมดอายุเริ่มต้นจะเป็นเวลา 45 วันสำหรับทั้ง MemoryStoreQueue:AddAsync() และ Class.MemorySortedMap
- อย่าเก็บขนาดของข้อมูลมากเกินไปด้วยเวลาหมดอายุที่ยาวนานเกินไปเนื่องจากมันอาจเสี่ยงต่อการเกินขีดจำกัดของคุณและอาจทำให้เกิดปัญหาที่ทำให้ประสบการณ์ของคุณทั้งหมดของคุณพัง
- ลบรายการที่ไม่จำเป็นหรือตั้งค่าการหมดอายุรายการสั้น ๆ
- โดยทั่วไปคุณควรใช้การลบแสดงอย่างชัดเจนเพื่อปลดปล่อยหน้าหากและระยะเวลาที่หมดอายุของหน่วยความจำและรายการที่ไม่ได้ใช้งานเป็นเครื่องมือป้องกันไม่ให้ไอเท็มที่ไม่ได้ใช้งานเป็นเวลานาน
เก็บรักษาค่าที่จำเป็นเท่านั้นในหน่วยความจำ
เช่นสำหรับประสบการณ์บ้านประมูล, คุณสามารถใช้ MemoryStoreQueue:UpdateAsync() บนหนึ่งกุญแจเพื่อให้คุณสามารถเก็บราคาสูงสุดได้แทนที่จะเก็บราคาทั้งหมดในโครงสร้างข้อมูลของคุณ
ใช้ การลดการเร่งของเชิงเส้น เพื่อช่วยให้อยู่ภายใต้ขีดจำกัดการร้องขอ API
เช่นเดียวกับกรณีที่คุณได้รับ DataUpdateConflict คุณอาจลองอีกครั้งหลังจากสองวินาที, แล้วสี่, แปด, เป็นต้น แทนที่จะส่งคำขออย่างต่อเนื่องไปยัง MemoryStoreService เพื่อรับคำตอบที่ถูกต้อง
แบ่งโครงสร้างข้อมูลขนาดยักษ์ใหญ่เป็นหลายส่วนโดย หัวข้อย่อย
มักจะเป็นเรื่องง่ายกว่าที่จะจัดการข้อมูลในโครงสร้างขนาดเล็กมากกว่าการเก็บข้อมูลทั้งหมดในโครงสร้างขนาดใหญ่ การใช้ประโยชน์นี้สามารถช่วยให้คุณหลีกเ
แรงดันค่าที่เก็บไว้
ตัวอย่างเช่น คุณควรพิจารณาใช้ LZW อัลกอริทึมเพื่อลดขนาดของค่าที่เก็บไว้
การมองเห็น
ดาชาน์การมองเห็นได้ของการจัดการหน่วยความจำของคุณ ให้ข้อมูลและการวิเคราะห์เพื่อการตรวจสอบและแก้ไขปัญหาการใช้งานหน่วยความจำของคุณ ด้วยกราฟิกเรียลไทม์
ตารางต่อไปนี้รายชื่อและอธิบายรหัสสถานะทั้งหมดของโค้ดตอบสนอง API ที่มีอยู่ในแผงควบคุม รับคำขอโดยสถานะ และ รับคำขอโดย API ช
รหัสสถานะ | คำอธิบาย |
---|---|
ความสำเร็จ | ความสำเร็จ. |
ขีดจำกัดความจำข้อมูล | เกินขีดจำกัดขนาดหน่วยความจำระดับโครงสร้างข้อมูล (100MB) |
ข้อมูลปรับปรุงความขัดแย้ง | อัปเดต |
ปฏิเสธการอนุญาต | ไม่ได้รับอนุญาตให้เข้าถึงข้อมูลประสบการณ์ คำขอนี้ไม่ใช้หน่วยความต้องการหรือใช้ความจำกัด |
ข้อผิดพลาดภายใน | ข้อผิดพลาดภายใน |
คำขอไม่ถูกต้อง | คำขอไม่มีข้อมูลที่ต้องการหรือมีข้อมูลที่ไม่ถูกต้อง |
รายการข้อมูลเกินขีดจำกัด | เกินระดับรายการระดับโครงสร้างข้อมูล (1M) |
ไม่พบรายการ | ไม่พบรายการใน MemoryStoreQueue:ReadAsync() หรือ MemoryStoreSortedMap:UpdateAsync() นอกจากนี้ยังมีการโพลตทุก 2 วินาทีและการรีนอัสสถานะนี้จนกว่าจะพบรายการในคิว |
ข้อจํากัดการเรียกขอข้อมูล | เกินขีดจำกัดระดับความต้องการของข้อมูล (100,000 หน่วยคำขอต่อนาที) |
ขีดจำกัดการแบ่งย่อย | เกินขีดจำกัดของคำขอแบ่งผนัง |
ค่าใช้จ่ายทั้งหมดเกี่ยวกับขีดจำกัดการร้องขอ | เกินขีดจำกัดของหน่วยคำขอระดับจักรวาล |
ขีดจำกัดการใช้หน่วยความจำทั้งหมด | เกินขีดจำกัดการจำหน่ายหน่วยความจำระดับจักรวาล |
ขนาดของรายการเกินขีดจำกัด | ขนาดมูลค่าเกินขีดจำกัด (32KB) |
ตารางต่อไปนี้รายชื่อรหัสจากด้านล่างของลูกค้าซึ่งขณะนี้ไม่สามารถใช้งานได้ใน Dashboard การวัดผล
รหัสสถานะ | คำอธิบาย |
---|---|
ข้อผิดพลาดภายใน | ข้อผิดพลาดภายใน |
สถานที่ที่ไม่เผยแพร่ | คุณต้องเผยแผนนี้เพื่อใช้ MemoryStoreService |
การเข้าถึงลูกค้าไม่ถูกต้อง | ต้องเรียกบริการหน่วยความจำจากเซิร์ฟเวอร์ |
เวลาหมดอายุไม่ถูกต้อง | เวลา "หมดอายุ" ต้องอยู่ระหว่าง 0 และ 3,888,000 |
คำขอไม่ถูกต้อง | ไม่สามารถแปลงค่าเป็น JSON ได้ |
คำขอไม่ถูกต้อง | ไม่สามารถแปลง sortKey เป็นตัวเลขหรือสตริงที่ถูกต้องได้ |
TransformCallFailed | ไม่สามารถเรียกใช้งานได้ Failed to invite คุณสมบัติเชิญ |
คําขอควบคุม | คำขอเก็บหน่วยความจำล่าสุดพบปัญหาหนึ่งหรือมากกว่า |
อัปเดตความขัดแย้ง | เกินจำนวนครั้งที่เรียกร้องได้สูงสุด |
การแก้ปัญหา
ตารางต่อไปนี้รายการและอธิบายวิธีการแก้ปัญหาที่แนะนำสำหรับแต่ละรหัสสถานะตอบกลับ:
ผิดพลาด | ตั้งค่าแก้ปัญหา |
---|---|
DataStructureCommands / PartitionCommands |
เพิ่มความจำท้องถิ่นโดยการบันทึกข้อมูลไปยังแป้นอื่นและตรวจสอบอีกครั้งห |
ค่าใช้จ่ายทั้งหมดเกี่ยวกับขีดจำกัดการร้องขอ | |
รายการข้อมูลเกินขีดจำกัด |
|
ขีดจำกัดความจำข้อมูล | |
ขีดจำกัดการใช้หน่วยความจำทั้งหมด | |
ข้อมูลปรับปรุงความขัดแย้ง | เรียกคืนสิ่งที่อยู่ในหน้าเว็บก่อนที่จะเรียกคืนสิ่งที่อยู่ในหน |
ข้อผิดพลาดภายใน | ตรวจสอบหน้าสถานะ Roblox ของคุณ . เขียนรายงานข้อผิดพลาด 0> ที่คุณพบปัญหาด้วย 2>รหัสจักรวาล 2> ของประสบการณ์ของคุณ2> . |
คำขอไม่ถูกต้อง |
|
ขนาดของรายการเกินขีดจำกัด |
|
การทดสอบและการดีบั๊กใน Studio
ข้อมูลใน MemoryStoreService ถูกกั้นออกระหว่าง Studio และการผลิตดังนั้นการเปลี่ยนแปลงข้อมูลใน Studio จึงไม่ส่งผลต่อการทำงานในการผลิต ซึ่งหมายความว่าการโทร API ของคุณจาก Studio จะไม่เข้าถึงข้อ
การทดสอบ Studio มีขีดจำกัดและความเครื่องเทียมเดียวกับการผลิต สำหรับขีดจำกัดที่คำนวณจากจำนวนผู้ใช้จะสามารถเล็กลงได้เนื่องจากคุณเป็นผู้ใช้เดียวสำหรับการท
สำหรับข้อมูลเกี่ยวกับวิธีการดีบั๊กหน่วยความจำในเกมที่มีการแสดงผลในเวลาจริงหรือในการทดสอบในสตูดิโอให้ใช้ คอนโซลผู้พัฒนา