Penafian: pengalaman pemrograman gim saya didasarkan pada gim pemain tunggal sisi-klien, tetapi saya memiliki latar belakang dalam aplikasi web (khususnya pada tumpukan Microsoft), jadi dari sanalah saya berasal dengan jawaban ini, saya merasa bahwa banyak yang akan berlaku, tetapi tanpa pengujian server game sebenarnya sulit untuk mengatakan bagaimana itu akan berlaku, tapi begini. Ketahuilah ini: Saya belum menggunakan server game, hanya webapps.
Saya akan menyarankan pendekatan dua (server). Tingkat basis data dan tingkat "aplikasi"; dengan tingkat ketiga (presentasi) menjadi klien gim Anda.
Database relasional, hebat dalam query data, dan layak dalam menulis data. Kuncinya adalah untuk membuat serialisasi penulisan database Anda menjadi potongan ukuran yang dapat dikelola yang dapat ditangani oleh kluster Anda. Edisi yang lebih canggih (Pusat data / Perusahaan) dari SQL Server mendukung pengelompokan dan replikasi. Saya akan mulai dengan membangun sebuah cluster kecil dan menjalankan beberapa pertanyaan untuk mengetahui cara kerjanya.
Di tier aplikasi, jika Anda melakukan "zonasi" atau sesuatu yang serupa, Anda mungkin bisa pergi tanpa mengatur cluster apa pun, dan cukup menyiapkan server per zona. Jika zona Anda menjadi besar, Anda bisa menyiapkan cluster untuk setiap zona.
Anda akan ingin membangun proses serialisasi untuk mengirim data dari tingkat aplikasi -> tingkat basis data. Kuncinya adalah memiliki beberapa tingkat serialisasi yang terjadi. Sesuatu seperti ini:
- Level 1: Simpan ke DB setiap X detik, termasuk data penting:
- Kesehatan Pemain
- Item Pemain / Pickup
- Level 2: Simpan ke DB setiap 2X detik, termasuk data sedang:
- Level 3: Segala sesuatu yang lain, sesering mungkin
Ini akan membuat tulisan Anda konsisten dan dapat diprediksi, tergantung pada sifat permainan Anda, Anda bisa menulis database yang jarang. Kuncinya adalah menyadari bahwa jika server aplikasi Anda macet, Anda harus kembali online dari status di basis data Anda, sehingga membuat serialisasi inventaris pemain setiap 90 menit mungkin membuat pemain kesal.
Untuk membaca data, Anda harus memuat sebanyak mungkin ke dalam memori di tingkat aplikasi sebanyak mungkin, lalu pastikan bahwa semua kode Anda menggunakan kumpulan memori ini, di latar belakang Anda dapat menyinkronkan kumpulan memori dengan database. Seperti yang ditunjukkan oleh Joe, akan ada saatnya Anda membutuhkan transaksi "real-time". Dengan membuat serial sebagian besar tulisan Anda, Anda masih harus memiliki IO yang cukup pada database Anda untuk melakukan transaksi real-time bila perlu, dengan anggapan hardware yang memadai pada server database / cluster.