Haruskah saya menggunakan database untuk menyimpan konten game? [Tutup]

16

Saya memiliki Game 2D yang ditulis dalam C ++ menggunakan SFML. Saya ingin membuat game diperluas sehingga konten seperti barang atau entitas dapat dengan mudah ditambahkan dengan menambahkan baris / entri / baris ke file atau database.

Saya mencari sesuatu yang tidak perlu dikompilasi ke dalam program, tetapi sebaliknya dapat dibaca dan ditulis pada saat runtime. Kapan tepat menggunakan basis data?

Sinister Sloth
sumber
1
Harap jelaskan kebutuhan Anda lebih lanjut. Database cukup cepat, tetapi sangat kompleks. Apakah Anda benar-benar membutuhkan kecepatan? Mengapa tidak menggunakan file teks saja? Sudahkah Anda menjalankan tolok ukur?
Anko
Berapa banyak barang yang akan Anda miliki? Apakah lebih dari satu juta? Itu tentang ambang batas di mana saya akan mempertimbangkan menggunakan database di atas file teks.
Philipp
Saya akan mengatakan database berlebihan untuk ini, cukup gunakan beberapa jenis daftar definisi. Mungkin hanya teks biasa. Pertimbangkan XML atau JSON.
Hugo Zink
1
Saya merekomendasikan XML atau JSON juga. Saya lebih suka XML karena lebih mudah dibaca oleh saya, sebagai manusia, tetapi JSON juga merupakan pilihan yang baik.
Draco18s tidak lagi mempercayai SE
Saya tidak akan mengklaim memiliki banyak pengetahuan tentang sistem data, atau bagaimana mereka diimplementasikan dalam game, tetapi saya akan mengatakan bahwa Microsoft cenderung menggunakan implementasi database mikro untuk banyak aplikasi sederhana mereka (yang tidak memiliki banyak data, atau kebutuhan di luar basis data, tetapi cenderung memiliki "hubungan" dll). Asalkan Anda tetap mudah menggunakannya, mungkin masuk akal. (Gagasan buruk: Menggunakan namespace XML super-formal yang mewajibkan kebenaran data)
Katana314

Jawaban:

26

Hanya gunakan basis data jika Anda membutuhkan basis data. Itu adalah:

  • Jika Anda perlu sering melakukan query yang kompleks.
  • Jika Anda memiliki hubungan data yang kompleks.
  • Jika data Anda besar dan kemungkinan tidak muat di memori.

Jika data permainan Anda memenuhi salah satu dari kondisi ini, Anda mungkin mendapat manfaat dari menggunakan database. Perhatikan bahwa ini tidak terlalu umum, dan Anda mungkin tidak memenuhinya. Jika Anda melakukannya, saya akan menggunakan SQLite atau sesuatu dengan ide yang sama untuk tidak memerlukan server yang sedang berjalan dan menjadi hanya sebuah perpustakaan.

Jika tidak, gunakan file dan muat data dalam memori saat startup. Jika Anda ingin game dapat dimodifikasi, muat data ini dari direktori game Anda dan dari direktori mods dan tentukan bagaimana informasi yang bertentangan dapat digabungkan.

Juga mencatat bahwa, jika Anda melakukan menggunakan database, mungkin menguntungkan Anda dan pengembang mods' masih menggunakan file untuk membaca data awal dan membangun database hanya ketika beban game. Kecuali ukuran potensial dari basis data ini sangat besar (yaitu, lebih dari beberapa lusin MiB), Anda mungkin ingin menggunakan basis data dalam memori, yang dimungkinkan dalam SQLite dengan menetapkan :memory:sebagai jalur basis data .

Darkhogg
sumber
3
Saya akan sangat mempertimbangkan kedua SQLite, bahkan jika kebutuhan Anda TIDAK "kompleks" atau "besar". Sebenarnya ada banyak alasan mengapa dengan sesuatu yang kecil dan tertanam seperti itu, Anda bisa mendapatkan manfaat besar dari memiliki database di ujung jari Anda.
wjl
Selain itu, plataform seluler menggunakan basis data untuk menyimpan beberapa informasi. Android menggunakan SQLite. Ini berarti bahwa sebagian besar pekerjaan Anda untuk plataform seluler sudah dilakukan (dalam hal penanganan data). Juga, sangat mudah untuk mengatur SQLite dan mengedit data SQLite (dengan program seperti SQLite Studio atau yang serupa). Jika menggunakan SQLite, taruhan terbaik adalah menggunakan V3. Tapi selain itu, tepat!
Ismael Miguel
@wjl: Setuju, manfaat normalisasi dan batasan integritas referensial sangat berharga bahkan untuk set data game yang lebih kecil. (Sekarang jika hanya itu tidak sakit tersebut untuk mendapatkan SQLite untuk melakukan batasan integritas referensial yang tepat ...)
Mason Wheeler
Ini adalah argumen melawan menggunakan relasional database yang. Penyimpanan nilai kunci sederhana yang diindeks mungkin masih bermanfaat.
Markus
1
@ Mark Jika Anda akan menggunakan penyimpanan nilai kunci dalam sebuah game, Anda mungkin juga memiliki hashmap atau yang serupa dalam memori.
Darkhogg
5

Saya sangat suka MongoDB untuk game develpoment, ia memiliki kinerja yang sangat bagus dan sangat fleksibel, mudah digunakan dan berbasis json.

Anda bisa menambahkan bidang apa saja yang Anda butuhkan dalam koleksi apa pun karena itu NoSQL Arch, sehingga sangat cocok di lingkungan "dinamis" seperti game.

Coba intip .

Jika Anda sedang mengembangkan beberapa jenis game strategi berbasis MMO Turn, mungkin Anda harus membaca tentang CouchDB , ini adalah Database NoSQL yang memiliki sistem versi yang sangat bagus.

PRDeving
sumber
Bukan jawaban yang bagus. Pertanyaannya bukan "database mana yang harus saya gunakan" melainkan "haruskah saya menggunakan database sama sekali".
uliwitness
1

CastleDB adalah pilihan yang baik karena itu hanya editor yang mengubah database menjadi file JSON sesudahnya. Saya telah melihat banyak jawaban yang mengatakan file plaintext adalah yang terbaik, jadi CastleDB mungkin yang terbaik dari kedua dunia.

hjk231
sumber
Bukan jawaban yang buruk, tetapi melewatkan pertanyaan. Pertanyaannya bukan "database mana yang harus saya gunakan" melainkan "haruskah saya menggunakan database sama sekali".
uliwitness