ฉันทำงานกับเกมแบบเรียลไทม์ที่จะต้องใช้ฐานข้อมูล (สำหรับคุณสมบัติเช่นโปรไฟล์ผู้เล่นเพื่อนปลดล็อคข่าว ฯลฯ ) เกมนี้เป็นเกมพีซีมาตรฐาน (ไม่ใช่เบราว์เซอร์) และจะใช้ไคลเอนต์เซิร์ฟเวอร์ สถาปัตยกรรม. ฉันยังใหม่กับการใช้ฐานข้อมูลและได้ทำการวิจัยบางอย่างในช่วงไม่กี่วันที่ผ่านมาเมื่อฉันได้พบกับการอภิปรายที่ร้อนแรง: RDBMS vs NoSQL ขณะนี้ฉันกำลังโน้มเอียงไปทาง NoSQL แต่หลังจากอ่านเกี่ยวกับการใช้งานสำหรับแต่ละ (RDBMS และ NoSQL) ฉันก็อยากจะใช้ทั้งสองอย่าง ฉันรู้ว่ามันอาจดูแปลก แต่ขอให้ฉันอธิบายสถานการณ์ของฉัน:
ทีมของฉันมีแพ็คเกจเว็บโฮสติ้งที่ใช้ร่วมกันซึ่งมีพื้นที่เก็บข้อมูลและแบนด์วิดธ์ mySQL ไม่ จำกัด ซึ่งเป็นข้อแม้เดียวที่เราสามารถเปิดได้ 25 การเชื่อมต่อในครั้งเดียว (กฎการโฮสต์ที่ใช้ร่วมกัน) ฉันตั้งใจจะใช้สิ่งนี้กับเว็บไซต์ของฉัน (เป็นการใช้งานทั่วไปอย่างไม่ต้องสงสัย) เพื่อโพสต์การอัปเดตข่าวสนับสนุนคุณลักษณะของชุมชน (เช่นความคิดเห็นการอัปโหลดภาพหน้าปกของแฟน ๆ ฯลฯ ) และอื่น ๆ นั่นคือทั้งหมดที่ดีและดี - แต่! นี่คือสิ่งที่น่าสนใจ ... ฉันต้องการแสดงข้อมูลเดียวกันนี้ที่โพสต์บนเว็บไซต์ของฉันในเกม นี่หมายถึงการใช้ mySQL สำหรับทั้งเว็บไซต์และเกมของฉัน นอกจากโพสต์ข่าวและสิ่งที่ชอบฉันวางแผนที่จะใช้มันในเกมสำหรับสิ่งต่าง ๆ เช่นการแชทและรายชื่อเซิร์ฟเวอร์ ฉันกังวลว่ากฎการเชื่อมต่อ 25 นั้นส่วนใหญ่
ซึ่งทำให้ฉันถามคำถาม # 1: งานนี้และจะมีทางเลือกที่ดีกว่า
ตอนนี้นอกจากนี้ฉันได้อ่านแล้วว่า NoSQL ทำงานได้ดีเพียงใดและเหมาะกับเกมเรียลไทม์ (ฉันอาจผิดฉันได้เดินผ่านสงครามเปลวไฟขนาดใหญ่กับ RDBMS vs NoSQL เพื่อมาที่นี่และอาจถูกไฟไหม้) โดยทั่วไปฉันต้องการใช้ MongoDB สำหรับข้อมูลวัตถุเกมทั้งหมดของฉัน
และอีกครั้งจะเป็นประโยชน์ถ้าฉันให้บริบท: ฉันได้พบโฮสต์ (MongoLab) ซึ่งมีแพ็คเกจ MongoDB 240MB ฟรีซึ่งฉันตั้งใจจะใช้จนกว่าจะจำเป็นต้องอัปเกรด ด้วยขนาด 240MB ฉันได้คำนวณว่าฉันจะสามารถเก็บผู้เล่นได้ประมาณ 60,000 คน (หากผู้เล่นแต่ละคนมีระดับ 4KB โดยประมาณและเราไม่สนใจสิ่งอื่น ๆ ที่อาจถูกจัดเก็บไว้) พื้นที่เก็บข้อมูลและการจ่ายเงินเพิ่มเติมในอนาคต (เกมของเราควรประสบความสำเร็จ) ไม่เป็นปัญหา เหตุผลเดียวที่ฉันตั้งใจจะใช้ MongoDB สำหรับข้อมูลวัตถุในเกมทั้งหมดของฉันคือเพราะความถี่ในการเข้าถึงข้อมูลวัตถุเกมนี้ (เช่นเมื่อใดก็ตามที่ผู้เล่นถูกฆ่าตายหยิบรายการยิงปืน ฯลฯ ) ฉัน เช่นเดียวกับเอกสารที่ปราศจากสกีมาตรงไปข้างหน้า (ซึ่งทำให้ง่ายต่อการจับคู่ข้อมูลวัตถุในเกม) ฉันควรทราบว่าในครั้งเดียว
ฉันตั้งใจจะใช้ MongoDB เดียวกันในเว็บไซต์ของฉันเพื่อแสดงข้อมูลโปรไฟล์ของผู้เล่น (ฉันไม่ได้กังวลกับความสอดคล้องที่สมบูรณ์การล่าช้าในการอัปเดตในเกมนั้นใช้ได้) ข้อใดทำให้ฉันถึงคำถามที่สองคำถาม # 2: นี่เป็นความคิดที่ดีหรือมีบางสิ่งที่ดีกว่าที่ฉันควรทำ
เกมดังกล่าวจะมีประสบการณ์เริ่มต้นในลักษณะนี้:
- ลูกค้าเข้าสู่ระบบ (MongoDB)
- ลูกค้าอยู่ที่หน้าแรกของเกมพร้อมห้องสนทนา (MySQL)
- ลูกค้าไปที่รายชื่อเซิร์ฟเวอร์ (MySQL)
ลูกค้าเชื่อมต่อกับเซิร์ฟเวอร์และเล่นกับมัน
เซิร์ฟเวอร์สื่อสารการอัพเดทสำหรับผู้เล่นทุกคน (MongoDB)
นี่เป็นเพียงวิธีที่ฉันจินตนาการว่ามันจะได้ผล สิ่งนี้ดูดีสำหรับคุณหรือคุณมีคำแนะนำเกี่ยวกับวิธีการปรับปรุงแผนนี้หรือไม่?