คำถามของคุณเป็นจริงในวงกว้างเพราะจำนวนที่แท้จริงของประเภทออกมี แต่นี่เป็นมุมมองของนักพัฒนาซอฟต์แวร์มืออาชีพ
คุณระบุรายการของเกณฑ์ที่คุณต้องการใช้เพื่อกำหนดกลไกการคงอยู่ของข้อมูลที่คุณใช้ นั่นคือ:
- ขนาดของโครงการ
- แพลตฟอร์มที่กำหนดเป้าหมายโดยเกม
- ความซับซ้อนของโครงสร้างข้อมูล
- การพกพาข้อมูลในหลาย ๆ โครงการ
- ควรเข้าถึงข้อมูลได้บ่อยแค่ไหน
- ข้อมูลหลายประเภทสำหรับแอปพลิเคชันเดียวกัน
- จุดอื่นที่คุณคิดว่าน่าสนใจเมื่อตัดสินใจว่าจะใช้
ก่อนอื่นเราต้องสร้างตัวเลือกที่มีให้ เนื่องจากคุณไม่ได้ระบุภาษาหรือเทคโนโลยีจึงเป็นเรื่องยากที่จะพูด แต่คุณอาจพยายามตัดสินใจระหว่างXMLและที่เก็บฐานข้อมูลเชิงสัมพันธ์
ความแตกต่างที่สำคัญที่ต้องทำคือXMLนั้นไม่ใช่กลไกการจัดเก็บจริงๆเท่า ๆ กับเทคนิคการทำให้เป็นอนุกรม เป็นวิธีการแสดงโครงสร้างหน่วยความจำในเกมของคุณ ระบุว่าคุณจริงๆพูดคุยเกี่ยวกับไฟล์แบนเทียบกับฐานข้อมูลเชิงสัมพันธ์การจัดเก็บข้อมูล ตัวเลือกเหล่านี้ไม่ใช่ตัวเลือกเท่านั้น แต่เป็นตัวที่ใช้บ่อยที่สุดดังนั้นฉันจะใช้มัน
สำหรับไฟล์แบน:
- XML
- JSON
- YAML
- XAML
- ข้อความธรรมดา
สำหรับฐานข้อมูล:
- เซิร์ฟเวอร์ SQL
- MySQL
- DB2
- คำพยากรณ์
- อื่น ๆ อีกมากมาย
แก้ไข:คุณถามเกี่ยวกับกลไกประเภทอื่นนอกเหนือจากไฟล์และฐานข้อมูลเชิงสัมพันธ์ ฐานข้อมูลประเภทเด่นอื่น ๆ ที่ฉันได้เห็นใช้เป็นประจำคือฐานข้อมูล "Berkeley-style" ซึ่งเป็นค่าคีย์ตาม สิ่งเหล่านี้มักจะใช้ B-trees เพื่อจัดโครงสร้างข้อมูลเพื่อการค้นหาที่รวดเร็ว สิ่งเหล่านี้ยอดเยี่ยมสำหรับการค้นหาการกำหนดค่า / การตั้งค่าที่คุณรู้ว่าสิ่งที่คุณต้องการ (เช่นให้ข้อมูล telemetry ทั้งหมดสำหรับ "ระดับ 1")
ตอนนี้เรามีข้อมูลพื้นฐานทั้งหมดแล้วลองมาดูเกณฑ์ของคุณกันบ้าง
ขนาดของโครงการ
บางคนอาจไม่เห็นด้วย แต่ขนาดของโครงการของคุณจะไม่ส่งผลกระทบอย่างมากต่อกลไกการคงอยู่ของข้อมูลของคุณ คุณจะต้องสร้างไลบรารีที่ใช้ซ้ำได้ของฟังก์ชันที่จัดเก็บ / โหลดข้อมูลจากกลไกที่คุณต้องการ ฉันยังขอแนะนำให้ใช้เลเยอร์นามธรรม (ตรวจสอบรูปแบบอะแดปเตอร์ ) เพื่อให้คุณสามารถเปลี่ยนกลไกการคงอยู่ได้อย่างง่ายดายหากคุณต้องการ
ต้องบอกว่าสำหรับโครงการขนาดเล็กการใช้ XML บนระบบไฟล์อาจทำงานได้ดี แต่คุณจะต้องจัดการกับปัญหาด้านความปลอดภัยของคุณ (เช่นการเข้ารหัส) เพื่อให้ผู้เล่นไม่สามารถเปลี่ยนข้อมูลได้ตามต้องการ
แพลตฟอร์มที่กำหนดเป้าหมายโดยเกม
แพลตฟอร์มจะไม่เป็นปัญหาใหญ่เช่นกัน คุณควรกังวลเกี่ยวกับแพลตฟอร์มการพัฒนาของคุณมากกว่าแพลตฟอร์มเป้าหมาย เหตุผลนี้คือบางภาษาจัดการมาร์กอัปหรือฐานข้อมูลบางประเภทได้ดีกว่าภาษาอื่น ๆ ไม่ใช่เพื่อบอกว่าคุณไม่สามารถใช้สิ่งใด ๆ ข้างต้นในเกือบทุกภาษา แต่บางครั้งก็เป็นการดีที่สุดที่จะใช้เครื่องมือที่สนับสนุนซึ่งมีให้สำหรับคุณ แพลตฟอร์มใด ๆ จะสนับสนุนไฟล์แบบแฟลตและแยกวิเคราะห์ XML แต่บนแพลตฟอร์มมือถือคุณอาจต้องการพิจารณาการทำให้เป็นเลขฐานสองแบบไบนารี่ถ้าเป็นไปได้หรืออย่างน้อยก็ปรับ XML ของคุณสำหรับการจัดเก็บ
ความซับซ้อนของโครงสร้างข้อมูล
นี่เป็นสิ่งที่ยุ่งยาก ฐานข้อมูลเชิงสัมพันธ์นั้นยอดเยี่ยมสำหรับ ... การจัดเก็บเอนทิตีและความสัมพันธ์ของพวกเขา คุณมีความสามารถที่ดีกว่าในการบังคับใช้โครงสร้างโดยใช้ที่เก็บข้อมูลเชิงสัมพันธ์มากกว่าที่คุณทำกับไฟล์ในระบบไฟล์ พิจารณาประเภทของความสัมพันธ์ระหว่างเอนทิตี้ของคุณรวมถึงความถี่ที่คุณเปลี่ยนหรือค้นหาเอนทิตีที่เกี่ยวข้อง สำหรับโครงสร้างที่ซับซ้อนมากฉันขอแนะนำให้ไปที่เส้นทางของฐานข้อมูล
การพกพาข้อมูลในหลาย ๆ โครงการ
เมื่อพูดถึงการพกพาคุณควรพิจารณาข้อเท็จจริงว่าฐานข้อมูลหนักกว่าไฟล์ มีค่าใช้จ่ายในการติดตั้งและกำหนดค่าฐานข้อมูลที่แตกต่างกันจะมีให้สำหรับแพลตฟอร์มที่แตกต่างกันเป็นต้น SQLite เป็นวิธีที่ดีในเรื่องนี้ อย่างไรก็ตามเมื่อพูดถึงเรื่องการพกพาคุณอาจจะมีเวลามากขึ้นในการแก้ปัญหาไฟล์เช่น XML
แก้ไข:มีข้อกังวลอื่น ๆ ที่คุณพูดถึงเกี่ยวกับการพกพาในความคิดเห็นของคุณ ท้ายที่สุดคุณไม่ต้องการให้ข้อมูลของคุณเชื่อมโยงอย่างแน่นหนากับผลิตภัณฑ์หรือประเภทไฟล์ใด ๆ วิธีที่ดีที่สุดคือถ้าคุณสามารถเก็บข้อมูลสต็อค (ระดับศัตรู ฯลฯ ) ในรูปแบบนามธรรมบางประเภท (ไฟล์ที่คั่นด้วยแท็บ XML ฯลฯ ) ซึ่งคุณสามารถแยกวิเคราะห์และจัดเก็บในฐานข้อมูล / ระบบไฟล์ได้อย่างง่ายดาย เวลา. ซึ่งหมายความว่าคุณสามารถสลับกลไกการจัดเก็บข้อมูลของคุณในราชประสงค์และเพียงเขียนชิ้นส่วนแยก
ควรเข้าถึงข้อมูลได้บ่อยแค่ไหน
การเข้าถึงข้อมูลจำนวนมากหมายถึง I / O จำนวนมากเว้นแต่คุณจะมีกลไกการแคชบางประเภท ฐานข้อมูลเก็บโครงสร้างไว้ในหน่วยความจำและเหมาะสำหรับการจัดการและดึงข้อมูล หากคุณเก็บข้อมูลอย่างต่อเนื่องจริงๆคุณอาจต้องการติดกับฐานข้อมูล
ข้อมูลหลายประเภทสำหรับแอปพลิเคชันเดียวกัน
ไดรฟ์ข้อมูลเป็นข้อพิจารณาอย่างแน่นอน แต่หากคุณไม่ได้พูดถึงการคงอยู่ของวัตถุเป็นพันหรือล้านระบบไฟล์จะยังคงได้รับการยอมรับว่าเป็นโซลูชัน
ประเภทเกม
ประเภทของเกมที่คุณกำลังสร้างอาจมีอิทธิพลอย่างมากต่อแพลตฟอร์มที่คุณเลือก ใช่สำหรับเกมที่เล่นคนเดียวโดยเฉพาะลูกค้าส่วนใหญ่คุณจะสบายดีโดยใช้ระบบไฟล์ที่ถูกบีบอัดหรือเข้ารหัส หากคุณกำลังพูดถึงเกมที่มีองค์ประกอบออนไลน์นั่นอาจจะบ้า ไปเส้นทางฐานข้อมูลและช่วยตัวเองปวดหัว ปล่อยให้เซิร์ฟเวอร์จัดการข้อมูลทั้งหมดของคุณโดยใช้คลัสเตอร์ด้านหลัง
หวังว่าข้อเสนอแนะนี้จะช่วยได้บ้าง มันไม่ได้ครอบคลุมอย่างสมบูรณ์และการตัดสินใจขึ้นอยู่กับคุณในท้ายที่สุด แต่ความเห็นของฉันควรให้สิ่งที่คุณคิด
แก้ไข:มีบางครั้งที่ใช้วิธี hybdrid ทำให้รู้สึกมาก ตัวอย่างเช่นสมมติว่าคุณกำลังพัฒนา MMORPG ในด้านไคลเอนต์คุณอาจเก็บข้อมูลที่แคชไว้เกี่ยวกับผู้เล่นอื่นในฐานข้อมูลที่ไม่เกี่ยวข้อง ที่ฝั่งเซิร์ฟเวอร์คุณกำลังเก็บข้อมูลเกมทั้งหมดในฐานข้อมูลเชิงสัมพันธ์เพื่อคงอยู่ จากนั้นอีกครั้งที่ฝั่งไคลเอ็นต์คุณอาจเก็บข้อมูลบันทึกข้อมูลการกำหนดค่า ฯลฯ ในไฟล์ XML / flat เพื่อให้เข้าถึงได้ง่าย
โปสเตอร์อื่นยังกล่าวอีกว่าบางครั้งมันก็ดีแม้ว่าคุณจะเก็บข้อมูลเพื่อการผลิตในฐานข้อมูลเพื่อให้มีวิธีที่คุณสามารถใช้ไฟล์แฟลตเพื่อการพัฒนาแทน ... มันอาจจะง่ายกว่าที่จะลบผลิตภัณฑ์อื่นออกจากส่วนผสม .