Mengembangkan Mesin Game
Saya merencanakan permainan komputer dan mesinnya. Akan ada dunia 3 dimensi dengan tampilan orang pertama dan itu akan menjadi pemain tunggal untuk saat ini. Bahasa pemrogramannya adalah C ++ dan menggunakan OpenGL.
Keputusan Desain Pusat Data
Keputusan desain saya adalah menggunakan arsitektur berpusat data di mana ada manajer acara global dan manajer data global . Ada banyak komponen seperti fisika, input, suara, renderer, ai, ... Setiap komponen dapat memicu dan mendengarkan acara . Selain itu, setiap komponen dapat membaca, mengedit, membuat, dan menghapus data .
Pertanyaannya adalah tentang pengelola data.
Apakah akan menggunakan Database Relasional
Haruskah saya menggunakan Database SQL, misalnya SQLite atau MySQL, untuk menyimpan data game? Ini berisi hampir semua konten game seperti item, karakter, inventaris, ... Kecuali jerat dan tekstur yang bahkan lebih terkait dengan kinerja, jadi saya akan menyimpannya dalam memori.
Apakah database SQL cukup cepat untuk menggunakannya untuk membaca realtime dan menulis informasi game, seperti posisi karakter yang bergerak? Saya juga perlu peduli tentang kompatibilitas lintas platform. Selain menyimpan semua dalam ingatan, alternatif apa yang saya miliki?
Keuntungan Akan Menjadi
Keuntungan menggunakan database relasional seperti MySQL adalah struktur berorientasi data yang memungkinkan komputasi cepat. Saya tidak perlu objek untuk mewakili entitas. Saya dapat dengan mudah meminta data objek di dekat pemain yang diperlukan untuk rendering. Dan saya tidak perlu berhati-hati dengan data objek yang jauh. Selain itu tidak perlu savegames karena status hole game disimpan dalam database. Last but not least, memperluas game ke game online akan relatif mudah karena sudah ada tempat di mana status hole game disimpan.
sumber
Jawaban:
Basis data SQL hampir tidak cukup cepat untuk digunakan untuk membaca dan menulis informasi permainan secara waktu nyata. Data tersebut hampir selalu disimpan dalam memori, dalam struktur data tradisional.
Mungkin ada beberapa manfaat menggunakan database tertanam seperti SQLite untuk tipe data tertentu, misalnya. data statis yang tidak berubah selama bermain game tetapi berubah selama pengembangan. Ini kemudian dapat digunakan sebagai bagian dari game terakhir di mana SQLite hanya benar-benar digunakan saat memuat game untuk pertama kalinya, atau ketika memulai level baru, dll.
Namun ada juga banyak kerugiannya - sulit untuk menambal bagian-bagian individual dari data ketika mereka disimpan dalam file database tunggal, itu tidak ideal untuk banyak jenis data kompleks yang dibutuhkan game (dan yang Anda katakan akan menyimpan di luar - tetapi akan memiliki referensi ke dan dari hal-hal di dalam), itu tidak sangat fleksibel ketika Anda perlu mengubah skema, itu tidak selalu kompatibel ke belakang setelah Anda mengubah skema, dll.
Untuk alasan ini, sebagian besar pengembang game hanya akan menggunakan format mereka sendiri. Pengembang profesional yang sadar kinerja kadang-kadang melangkah lebih jauh dan menyimpan struktur data dalam memori langsung ke disk sehingga dapat dimuat dengan pemrosesan minimum.
Dan jika Anda benar-benar membutuhkan data tabular berbasis teks yang mudah diedit, Anda bisa menggunakan format berbasis teks sederhana, seperti CSV, XML, JSON, YAML, dll.
sumber
Basis data tidak cepat, menggunakan basis data jauh lebih lambat daripada akses memori tradisional. Alasannya sederhana, database dinamis, ada banyak overhead yang melekat padanya, pertanyaan harus diuraikan, hash perlu dihitung dan hal-hal lain.
Hanya ada satu keuntungan dari menggunakan database dan itu kegigihan. Anda dapat menjalankan satu atau beberapa aplikasi dengan satu basis data dalam jangka waktu yang lama tanpa harus takut data. Tetapi klien game sama sekali tidak perlu untuk itu.
Jadi, Anda ingin mendapatkan setiap objek yang berjarak kurang dari 1000px?
Itu akan menjadi:
Sekarang apa yang akan Anda pikirkan tentang database jika Anda memintanya untuk mengambil setiap objek yang jauhnya kurang dari 1000px?
Itu akan melakukan hal yang persis sama! Hanya dengan banyak biaya overhead yang akan membuat operasi yang sangat sederhana ini menghabiskan biaya sekitar 100 kali waktu prosesor (tergantung pada berapa banyak entitas yang Anda miliki). Basis data bukan sihir.
Jangan gunakan database untuk hal lain selain aplikasi server.
sumber