ฉันควรใช้ฐานข้อมูลเพื่อจัดเก็บเนื้อหาของเกมหรือไม่ [ปิด]


16

ฉันมีเกม 2D เขียนใน C ++ โดยใช้ SFML ฉันต้องการทำให้เกมขยายได้ในลักษณะที่สามารถเพิ่มเนื้อหาเช่นรายการหรือเอนทิตีได้อย่างง่ายดายโดยการเพิ่มบรรทัด / รายการ / แถวลงในไฟล์หรือฐานข้อมูล

ฉันกำลังมองหาบางอย่างที่ไม่จำเป็นต้องรวบรวมเข้าไปในโปรแกรม แต่สามารถอ่านและเขียนไปที่รันไทม์แทน เมื่อใดที่เหมาะสมที่จะใช้ฐานข้อมูล


1
โปรดอธิบายความต้องการของคุณให้มากขึ้น ฐานข้อมูลค่อนข้างเร็ว แต่ซับซ้อนมาก คุณต้องการความเร็วหรือไม่ ทำไมไม่เพียงแค่ใช้ไฟล์ข้อความ? คุณใช้มาตรฐานหรือไม่?
Anko

คุณจะมีสิ่งของกี่ชิ้น? มันมากกว่าหนึ่งล้านเหรอ? นั่นเป็นเรื่องของเกณฑ์ที่ฉันจะพิจารณาใช้ฐานข้อมูลผ่านไฟล์ข้อความ
ฟิลิปป์

ฉันจะบอกว่าฐานข้อมูลมากเกินไปสำหรับสิ่งนี้เพียงใช้รายการคำจำกัดความบางประเภท บางทีแค่ข้อความธรรมดา พิจารณา XML หรือ JSON
Hugo Zink

1
ฉันแนะนำ XML หรือ JSON ด้วย ฉันชอบ XML เพราะอ่านได้ง่ายกว่าในฐานะมนุษย์ แต่ JSON เป็นตัวเลือกที่ดีเช่นกัน
Draco18 ไม่ไว้วางใจ SE

ฉันจะไม่อ้างว่ามีความรู้เกี่ยวกับระบบข้อมูลหรือวิธีการนำไปใช้ในเกม แต่ฉันจะบอกว่า Microsoft มีแนวโน้มที่จะใช้การใช้ฐานข้อมูลขนาดเล็กสำหรับแอพที่ใช้งานง่ายของพวกเขา ข้อมูลหรือความต้องการฐานข้อมูลภายนอก แต่มักจะมี "ความสัมพันธ์" ฯลฯ ) ตราบใดที่คุณคำนึงถึงความสะดวกในการใช้งานมันอาจสมเหตุสมผล (ความคิดที่ไม่ดี: การใช้ XML เนมสเปซที่เป็นทางการอย่างยิ่งทำให้การแก้ไขความถูกต้องของข้อมูล)
Katana314

คำตอบ:


26

ใช้ฐานข้อมูลเฉพาะในกรณีที่คุณต้องการฐานข้อมูล นั่นคือ:

  • หากคุณจำเป็นต้องดำเนินการค้นหาที่ซับซ้อนบ่อยครั้ง
  • หากคุณมีความสัมพันธ์ของข้อมูลที่ซับซ้อน
  • หากข้อมูลของคุณมีขนาดใหญ่และไม่น่าจะพอดีกับหน่วยความจำ

หากข้อมูลเกมของคุณตรงตามเงื่อนไขเหล่านี้คุณอาจได้รับประโยชน์จากการใช้ฐานข้อมูล โปรดทราบว่าสิ่งเหล่านี้ไม่ธรรมดามากและคุณอาจไม่พอใจเลย ถ้าคุณทำฉันจะไปกับSQLiteหรือสิ่งที่มีความคิดคล้ายกันว่าไม่ต้องใช้เซิร์ฟเวอร์และเป็นแค่ห้องสมุด

มิฉะนั้นให้ใช้ไฟล์และโหลดข้อมูลในหน่วยความจำเมื่อเริ่มต้น หากคุณต้องการให้เกมสามารถแก้ไขได้ให้โหลดข้อมูลนี้จากไดเรกทอรีของเกมและจากไดเรกทอรีของ mods และกำหนดว่าข้อมูลที่ขัดแย้งกันอาจถูกผสานได้อย่างไร

นอกจากนี้ยังทราบว่าถ้าคุณทำใช้ฐานข้อมูลก็อาจจะได้รับประโยชน์ทั้งคุณและนักพัฒนา mods' ยังคงใช้ไฟล์ที่จะอ่านข้อมูลเบื้องต้นและการสร้างฐานข้อมูลเฉพาะเมื่อโหลดเกม เว้นแต่จะได้ขนาดที่อาจเกิดขึ้นจากฐานข้อมูลนี้มีขนาดใหญ่มาก (เช่นกว่าไม่กี่โหลเอ็มไอ), คุณอาจต้องการที่จะใช้ฐานข้อมูลในหน่วยความจำที่เป็นไปได้ใน SQLite โดยระบุ:memory:เป็นเส้นทางฐานข้อมูล


3
ฉันจะพิจารณาอย่างที่สองSQLiteแม้ว่าความต้องการของคุณจะไม่ "ซับซ้อน" หรือ "ใหญ่" จริงๆแล้วมีหลายเหตุผลว่าทำไมสิ่งเล็ก ๆ และฝังอยู่ในนั้นคุณจะได้รับประโยชน์อย่างมากจากการมีฐานข้อมูลที่ปลายนิ้วของคุณ
wjl

นอกจากนี้เพลโตฟอร์มมือถือใช้ฐานข้อมูลเพื่อเก็บข้อมูลบางอย่าง Android ใช้ SQLite ซึ่งหมายความว่างานส่วนใหญ่ของคุณสำหรับ plataform มือถือเสร็จเรียบร้อยแล้ว (ในแง่ของการจัดการข้อมูล) นอกจากนี้ยังเป็นเรื่องง่ายในการตั้งค่า SQLite และแก้ไขข้อมูล SQLite (ด้วยโปรแกรมเช่นSQLite Studioหรือคล้ายกัน) ถ้าเป็นการใช้ SQLite ทางออกที่ดีที่สุดคือใช้ V3 แต่นอกเหนือจากนั้นจุดบน!
Ismael Miguel

@wjl: เห็นด้วยประโยชน์ของการทำให้เป็นมาตรฐานและข้อ จำกัด ของความสมบูรณ์ในการอ้างอิงมีความคุ้มค่าแม้สำหรับชุดข้อมูลเกมที่เล็กลง (ตอนนี้ถ้าเพียง แต่มันไม่ใช่เรื่องเจ็บปวดที่จะทำให้ SQLite ทำข้อ จำกัด ด้าน Referential Integrity ที่เหมาะสม ... )
Mason Wheeler

นี่คืออาร์กิวเมนต์ที่ใช้ฐานข้อมูลเชิงสัมพันธ์ ที่จัดเก็บคีย์ - ค่าดัชนีที่เรียบง่ายอาจยังคงคุ้มค่า
ทำเครื่องหมาย

1
@ Mark ถ้าคุณจะใช้ที่เก็บคีย์ - ค่าในเกมคุณก็อาจมี hashmap หรือหน่วยความจำที่คล้ายกัน
Darkhogg

5

ฉันชอบ MongoDB สำหรับผู้พัฒนาเกมมันมีประสิทธิภาพที่ดีมากและมีความยืดหยุ่นใช้งานง่ายและใช้ json

คุณสามารถเพิ่มเขตข้อมูลใด ๆ ที่คุณต้องการในคอลเลกชันใด ๆ เนื่องจากเป็น NoSQL Arch ดังนั้นมันจึงเหมาะกับสภาพแวดล้อมแบบไดนามิกเช่นเกม

ลองดูสิสิ

หากคุณกำลังพัฒนาเกมกลยุทธ์แบบ MMO Turn บางทีคุณควรอ่านเกี่ยวกับCouchDBมันเป็นฐานข้อมูล NoSQL ที่มีระบบเวอร์ชันที่ดีจริงๆ


ไม่ใช่คำตอบที่ดี คำถามไม่ใช่ "ฉันควรใช้ฐานข้อมูลใด" แต่ควร "ฉันควรใช้ฐานข้อมูลเลย"
uliwitness

1

CastleDB เป็นตัวเลือกที่ดีเพราะเป็นเพียงเครื่องมือแก้ไขที่แปลงฐานข้อมูลเป็นไฟล์ JSON หลังจากนั้น ฉันได้เห็นคำตอบมากมายว่าไฟล์ข้อความธรรมดาดีที่สุดดังนั้น CastleDB น่าจะดีที่สุดในโลกทั้งสอง


ไม่ใช่คำตอบที่ไม่ดี แต่พลาดคำถาม คำถามไม่ใช่ "ฉันควรใช้ฐานข้อมูลใด" แต่ควร "ฉันควรใช้ฐานข้อมูลเลย"
uliwitness
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.