Dulu ada game berbasis web bernama Utopia (dan saya yakin masih ada), ternyata per jam. Anda hanya mendapatkan emas / kayu baru atau apa-tidak setiap jam.
Beberapa game berbasis web yang lebih baru memiliki sumber daya yang bertambah dalam resolusi yang lebih halus, seperti per menit. Jadi katakanlah seorang pemain memiliki tingkat produksi makanan 5 per menit - pemain akan menambah jumlah makanannya setiap menit. Saya tidak yakin apakah bijaksana untuk secara konstan mengatur pekerjaan CRON untuk memperbarui database SQL, yang saya asumsikan apa yang mereka gunakan, karena ini berbasis web. Mungkin saya salah, setiap menit.
Teknik apa yang digunakan game berbasis web itu? Ditambahkan pada Edit: Dan bisakah database benar-benar dapat menangani beban?
Database SQL modern yang biasa digunakan (MySQL, Postgres, Oracle, MSSQL, dll) memungkinkan Anda untuk menjadwalkan prosedur tersimpan untuk dijalankan dengan interval waktu sewenang-wenang. Ini adalah metode yang sangat ringan untuk menjalankan pembaruan seperti ini dan menghilangkan kebutuhan untuk memanggil skrip atau program eksternal untuk melakukannya untuk Anda.
Ini juga memungkinkan basis data untuk mengoptimalkan kueri yang Anda jalankan hanya sekali, alih-alih melakukannya setiap kali skrip eksternal memanggilnya, sehingga sangat berguna dari sudut pandang kinerja. Tentu saja ini hanya berlaku jika pembaruan Anda cukup sepele untuk diprogram dalam bahasa scripting database Anda sendiri. Pembaruan sumber daya, logout interval waktu otomatis, pembersihan catatan dan sejenisnya adalah kandidat yang sangat baik untuk prosedur tersimpan yang dijadwalkan ini.
Kemungkinan besar beban yang dialami basis data Anda berasal 99,9% dari beban halaman, pembaruan mesin game, dan sejenisnya, karena game populer dapat dengan mudah memiliki ratusan ribu kueri per detik. Dibandingkan dengan beban yang muncul dari menjalankan beberapa kueri (meskipun yang menyentuh sebagian besar tabel) satu atau dua menit sekali, beban seharusnya tidak menjadi masalah. Yaitu, kecuali jika Anda memperbarui nilai yang diindeks oleh database. Anda harus menghindari memperbarui kolom yang diindeks di semua biaya jika Anda khawatir tentang kinerja.
sumber
Mengenai pembaruan:
Beberapa menggunakan pekerjaan CRON yang sering mengenai halaman PHP tertentu.
Beberapa menggunakan pekerjaan CRON, kali ini menjalankan proses tertentu.
Pendekatan lain adalah dengan melakukan pembaruan 'tepat waktu' - kapan pun halaman dimuat, jalankan melalui pembaruan yang tertunda dan lakukan pada saat itu. Ini umumnya yang harus Anda lakukan jika Anda tidak dapat menjalankan pekerjaan CRON atau proses yang berjalan lama.
Akhirnya, yang lain menjalankan seluruh aplikasi web sebagai satu proses, sehingga mereka dapat memperbarui kapan pun mereka melihatnya.
Sistem terakhir adalah yang terbaik jika Anda memiliki opsi yang tersedia karena Anda dapat menyimpan data dalam memori. Memperbarui beberapa ribu pemain sekali per menit adalah sepele jika Anda hanya mengubah data dalam RAM daripada harus menulis ke database SQL tradisional.
Tetapi jika Anda tidak memiliki kemewahan itu, Anda dapat menggunakan semacam caching. Sesuatu seperti memcached mungkin menjadi salah satu opsi (tergantung pada hosting Anda) yang merupakan titik setengah jalan antara memori dan database. Anda dapat menyimpan nilai sementara di memcache dan hanya menyimpannya ke DB jika benar-benar diperlukan.
Antara memcache dan database SQL tradisional ada opsi lain, misalnya. berbagai kunci / nilai toko atau toko dokumen: hal-hal seperti MongoDB , CouchDB , Amazon atau Google persembahan, dll ... yaitu. semua sistem di bawah payung istilah NoSQL . Ini biasanya tidak memberi Anda kekuatan query umum atau selalu semua jaminan keamanan yang sama dari database tradisional tetapi seringkali jauh lebih cepat dalam operasi. (Yang tidak begitu mengejutkan, karena mereka melakukan lebih sedikit untukmu.)
Tapi ini semua dengan asumsi database normal tidak dapat menangani beban. Bahkan, dalam banyak kasus mungkin bisa. Jika saya harus mengeluarkan 10.000 panggilan UPDATE per menit untuk meningkatkan level sumber daya, itu tidak terlalu scalable setelah Anda mulai menambahkan segalanya di atas. Tetapi jika Anda mengubahnya untuk memperbarui sumber daya untuk semua orang dengan 1 panggilan SQL, tiba-tiba segalanya terlihat jauh lebih positif. Jadi jangan melebih-lebihkan seberapa mahal fitur tertentu, karena sering dapat diimplementasikan dalam bentuk yang lebih efisien.
sumber
Saya mendukung KISS : "Keep It Simple, Stupid!"
Saya tidak melihat alasan mengapa pekerjaan cron tidak bekerja, dan kelebihannya adalah bahwa opsi web hosting murah seringkali tidak membiarkan Anda langsung menjalankan perintah, tetapi mereka mengizinkan Anda untuk menjalankan perintah cron. Jadi tidak perlu server khusus yang mahal.
Anda juga dapat melakukan kode pembaruan Anda dalam PHP atau bahasa preferensi Anda, dengan memiliki perintah cron atau menggunakan browser teks. Instruksi di Mengkonfigurasi pekerjaan cron memiliki beberapa contoh perintah yang dapat Anda gunakan untuk melakukan ping halaman Anda sendiri pada suatu interval.
wget --spider http://yoursite.com/secretphppage.php
lynx
sumber
Saya ingat pernah melihat kode beberapa klon Planetarion. Semua PHP, tetapi kode ticker dalam C mentah - dengan C MySQL binding. Karena model data sangat sederhana, pembaruan terjadi sangat cepat.
sumber