Apakah orang menulis DB sendiri karena suatu alasan?
Kami lakukan, semoga Ben Z akan memberikan penjelasan yang lebih baik tentang alasan daripada yang saya bisa karena dia sebenarnya penulis asli dari database kami. Versi singkatnya adalah bahwa DB relasional tidak terlalu berguna untuk game karena mereka tidak dapat secara efisien menyimpan data hierarkis terstruktur, yang membentuk sebagian besar data yang dibutuhkan MMO untuk operasi normal. Kami memilih untuk membangun basis data objek khusus dan bagian dari sistem pemrosesan transaksi terdistribusi, yang sekarang dalam produksi dan menjalankan dua game langsung kami.
Adapun jika Anda harus melakukan hal yang sama? Mungkin tidak, setidaknya tidak pada awalnya. Saya masih akan menganjurkan menghindari SQL, tetapi sekarang ada banyak pilihan di dunia "NoSQL" yang tidak ada beberapa tahun yang lalu.
Yang mengatakan, sebagian besar MMO berjalan pada database SQL (relasional). Saya tahu Eve berjalan pada instalasi SQL Server yang duduk di atas beberapa RAMSAN multi-TB (saya mungkin tidak akan pernah memiliki banyak uang dalam hidup saya dalam hal ini).
EDIT: Mudah-mudahan dia tidak keberatan saya memposting ini di sini, tapi ini adalah entri blog dengan beberapa tautan dan komentar tentang presentasi yang kami berikan di GDC'08 tentang database kami.
Oke jawaban ini lebih dari sekedar pengamatan.
Pengungkapan penuh Saya belum pernah bekerja di MMORPG. Saya telah bekerja di salah satu dari 10 situs paling banyak dikunjungi pada tahun 2009, dan saya telah bekerja di perusahaan mesin permainan yang berpikir mereka membuat teknologi MMORPG (saya tidak tahu apakah dikirim).
Jika Anda melihat perusahaan yang telah mencapai skala besar (Google, Facebook, Twitter, dll., Saya tahu mereka bukan perusahaan game, tetapi mereka pantas untuk dilihat di ruang ini) ada dua hal yang saya pikir penting.
Kesalahan besar adalah mengambil barang turnkey mahal dan mengharapkannya secara ajaib untuk Anda. Tidak berfungsi seperti itu. Kunci untuk meningkatkan adalah menangani setiap tantangan baru dengan tepat. Anda membutuhkan solusi fleksibel yang mudah digunakan sehingga Anda dapat bergerak masuk dan keluar dengan mudah.
Jadi saran saya untuk Anda adalah jika Anda memulai, hanya mendapatkan apa yang tampaknya paling sulit untuk dihadapi.
sumber
Pada dasarnya, ada berbagai macam pendekatan, dan saya pikir mereka lebih dipilih berdasarkan pengalaman pengembang mereka serta sifat-sifat database. Di satu sisi, banyak MMO menggunakan database relasional standar - misalnya. Abad Gelap Camelot digunakan / digunakan (apakah masih berjalan?) MySQL , FreeRealms menggunakan Postgresql yang dimodifikasi , dll.
Bergerak sepanjang skala, Anda memiliki Perang Guild: mereka menggunakan SQL Server , tetapi mereka menempel data mereka di sana sebagai satu Gumpalan. Ini berarti mereka mendapatkan manfaat dari format biner mereka yang biasa dengan beberapa manfaat yang disediakan oleh basis data. Tidak perlu dikatakan, Anda mungkin dapat melihat beberapa kelemahan dari pendekatan ini juga, tetapi untuk perusahaan yang terbiasa bekerja dengan file flat, itu mungkin masih merupakan langkah maju.
Kemudian mungkin ada beberapa tempat menggunakan berbagai pendekatan NoSQL yang diformalkan, meskipun masih awal. Farmville menggunakan membase , yang mereka buat untuk tujuan itu, berdasarkan memcached rupanya. Ini berbagi banyak fitur dengan orang-orang seperti MongoDB, CouchDB, dll. Sekali lagi dengan pendekatan ini Anda biasanya menggulung format penyimpanan Anda sendiri tetapi mendapatkan manfaat dari distribusi, caching, redundansi, dll.
Beberapa menggulirkan NoSQL mereka sendiri sepenuhnya: Cryptic mengatakan mereka melakukan sesuatu yang serupa tetapi juga mengatakan mereka tidak menggunakannya dalam produksi. ( EDIT : tetapi lihat komentar di bawah.)
Dan kemudian Anda datang ke orang-orang yang menggunakan teks datar atau file biner - seperti yang saya pahami, game yang lebih tua seperti Ultima Online, Everquest, dll. Semuanya berjalan di jalur ini, dan untuk perusahaan dengan pengalaman pengembangan game tetapi sedikit pengalaman database ini bekerja dengan baik terlalu.
Perhatikan juga bahwa Anda hampir tidak pernah menulis database Anda sendiri dalam pengertian istilah yang longgar - dalam gim Anda akan selalu memiliki data yang dipesan lebih dahulu yang perlu Anda kelola baik di memori atau di-disk dengan cara yang tidak meminjamkan diri mereka sendiri ke perangkat lunak generik. Anda tidak dapat melakukan kueri SQL setiap kali Anda menginginkan beberapa data sehingga Anda harus mem-mirroring banyak informasi Anda dalam kode tidak peduli apa pun back end yang Anda gunakan.
sumber
Pada Pirates of the Burning Sea, kami menatap dengan MySQL (meskipun jujur saya lebih suka Postgres) dan ketika mulai jatuh di bawah beban, kami beralih ke Microsoft SQL Server. Sejujurnya, saya mungkin tidak akan pergi ke rute itu lagi di masa depan. Sebagian besar data PotBS adalah pra-serialisasi sebelum itu tetap ada, jadi sebagian besar dari apa yang ada di DB tidak lebih dari penyimpanan kunci / nilai yang ditumbuhi. Selain itu, untuk mendapatkan kinerja yang lebih baik dari lapisan ketekunan kami, dan kontrol yang lebih baik tentang bagaimana data di-cache dalam memori, kami akhirnya menulis server caching yang duduk di depan database.
Jadi Kylotan sangat benar, Anda tidak akan berkeliling untuk menggulirkan Anda sendiri pada tingkat tertentu. Server database relasional SQL tidak dirancang untuk cara game menggunakan data. Alih-alih mengasumsikan server DB relasional adalah akhir dari semua database, kita benar-benar harus lebih memikirkan manfaat apa yang kita cari sebelum memilih alat.
Lain kali, saya akan melihat lebih dalam hal-hal seperti BerkleyDB atau beberapa DB gaya NoSQL lainnya.
sumber
Satu hal lagi yang perlu diperhatikan adalah bahwa jika Anda memiliki kumpulan data statis (relatif), jangan menyimpannya dalam basis data! Tidak ada alasan yang sangat baik untuk menyimpan definisi ejaan Anda, definisi item, peta, dll. Dalam database. Anda jarang menanyakannya kecuali dengan nama. Saya melihat banyak orang terjun ke dalam pengembangan game menyimpan hal-hal ini tepat di samping data pemain yang bertahan, dan itu adalah kelas yang sangat berbeda.
Anda memerlukan penyimpanan data, seperti sistem file, untuk ini. Di luar pengembangan, Anda tidak perlu ACID, Anda tidak perlu CRUD, Anda tidak perlu database untuk data semacam itu. Di dalam pengembangan, Anda memerlukan database, tetapi Anda juga tetap membutuhkan VCS, dan VCS pilihan Anda akan membuat pilihan database untuk Anda.
(Jika Anda bekerja pada gim di mana pemain dapat membuat mantra atau item atau quest khusus, yah, maka data itu sama dengan data pemain, dan Anda memang membutuhkan database lagi.)
sumber
MMORPG adalah aplikasi intensif dan merupakan tugas besar. Jika Anda memulai dengan pengembangan game, saya sangat menyarankan Anda melakukan sesuatu yang lebih kecil.
Yang mengatakan Anda akan perlu dua memeras kinerja teratas dari pengaturan Anda. Anda jelas akan membutuhkan server farm / hive. Karena komunikasi jaringan relatif mahal (dan sebagian besar MMORPG bersifat realtime), Anda mungkin ingin mereplikasi basis data pusat Anda ke setiap server gim Anda (setara dengan replikasi latensi rendah real-time dalam basis data pilihan Anda).
Jika masing-masing server Anda melayani segmen tertentu dari dunia game (seperti WoW berfungsi); sesuatu seperti Tampilan Dipartisi Terdistribusi . DPV memungkinkan Anda untuk mengelompokkan baris-baris database Anda di berbagai server; sesuai dengan kendala pada kolom di setiap server. MSSQL dan Oracle cukup pintar untuk hanya berbicara dengan server yang berisi data yang termasuk dalam klausa WHERE atau ON Anda. Saya tidak yakin apakah ada tawaran open source yang memiliki DPV.
Hasil bersih dari semua ini adalah tidak masalah DB apa yang Anda gunakan , cukup gunakan satu dengan nama baik: MSSQL, Oracle, MySQL, PostgreSQL. Tulis basis data Anda dalam ANSI SQL dan lihat sistem mana yang bekerja paling baik - itulah satu-satunya cara untuk mengetahuinya.
Rute NoSQL mungkin juga ide yang bagus karena dirancang untuk konkurensi tinggi. Saran Pranny mungkin berhasil.
sumber
Saya telah menggunakan MongoDB (NoSQL), ini adalah toko dokumen yang sangat cepat yang dapat diakses melalui TCP. Cobalah! Itu mengagumkan!
Menulis DB Anda sendiri adalah tugas yang menakutkan. Saya sarankan Anda terlebih dahulu mengeksplorasi apa yang sudah ada di luar sana dan jika Anda tidak dapat menemukan hal yang cocok dengan kriteria spesifik Anda, buat sendiri. Oh, dan jangan lupa untuk membukanya. :)
sumber
Saya kira itu sangat tergantung pada jenis data apa yang perlu Anda simpan, dan dalam bentuk apa.
Saya pikir sebagian besar orang di luar sana menggunakan database SQL "standar" untuk data "dinamis" seperti informasi pemain, baik itu SQL Server, MySQL, PostgreSQL.
Namun, data "internal" (keadaan dunia, konten, ....) dapat disimpan dalam bentuk apa pun, dan tebakan saya adalah bahwa sebagian besar perusahaan menulis setidaknya sebagian sistem database kustom untuk bagian itu, cocok untuk kebutuhan spesifik mereka. .
sumber
Yah, itu sebenarnya tergantung pada aplikasi Anda - itulah intinya. Saya bekerja, tempat kami mengembangkan RPG sosial dan kami menggunakan Google App Engine sebagai backend
sumber
Pertanyaan ini agak lama tetapi Ide saya tentang bagaimana menanganinya sama validnya seperti yang ditanyakan hari ini.
Jika Anda menggunakan basis data relasional, Anda perlu mengurangi bebannya sehingga ide ini akan membantu.
Simpan semua info publik pada DB lokal di setiap sistem klien dan juga di server DB.
Simpan semua tabel dengan item pada basis data klien. Alih-alih klien mencari ke server ketika Anda mengarahkan senjata ke statistik, klien hanya memeriksa statistik lokal untuk statistik. Server memiliki database sendiri untuk menarik statistik saat menghitung dan hanya meneruskan kerusakan dan kesehatan yang tersisa kepada klien.
Kasus terburuk dengan ide ini adalah bahwa setiap orang dapat melihat statistik semua senjata jika mereka berhasil masuk ke basis data klien. tidak masalah meskipun menyebabkan bahkan jika mereka mengubah nilai-nilai, nilai-nilai database di server adalah apa yang menghitung dalam permainan.
sumber