Saat ini saya sedang membuat game MMORPG, yang bisa memiliki beberapa ribu pemain online pada saat yang sama (mungkin tidak; hanya angan-angan). Pertama kami ingin menggunakan MySQL, tetapi saya telah mendengarnya tidak cukup cepat untuk skala ini.
DBMS mana yang cukup cepat? Seberapa mirip SQL Server itu (seperti yang saya pelajari di SQL Server di sekolah)?
sql-server
mysql
database-design
rdbms
scalability
Simon Verbeke
sumber
sumber
Jawaban:
Ini adalah pertanyaan yang sangat sulit untuk dijawab. Anda dapat mengambil platform basis data tercepat di dunia, merancang skema yang mengerikan, menulis aplikasi jelek di sekitarnya, dan kemudian tergoda untuk menyalahkan platform basis data. Pada saat yang sama, Anda bisa mengambil SQL Server Express gratis dan, dengan desain yang tepat, logika aplikasi, dan pendekatan pada skalabilitas yang masuk akal (mis. Menskalakan pembacaan dengan caching data, dll), Anda dapat menulis aplikasi yang menangani 1000-an dari pengguna tidak ada masalah.
Apakah saya percaya SQL Server dapat menangani ribuan pengguna? Benar. Apakah saya percaya Oracle dan DB2 dapat melakukannya juga? Pasti. MySQL? Tidak yakin, tidak cukup pengalaman di sana. Mengakses? Mungkin bukan pilihan yang bijaksana sama sekali. Jika Anda terbiasa dengan SQL Server, maka saya sarankan itu adalah rute yang Anda pertimbangkan, perlu diingat bahwa pilihan RDBMS Anda tidak akan dengan sendirinya menentukan keberhasilan atau kegagalan.
sumber
Biarkan saya begini, ingat GameSpy Arcade dari awal / pertengahan 2000-an? Itu menjalankan ribuan game, dan semuanya berjalan pada SQL Server dan mendukung puluhan ribu pengguna sekaligus (ya kami punya beberapa SQL Server di sana melakukan berbagai hal). Ini semua tentang desain database dan bagaimana Anda menggunakan sistem. Lakukan dengan benar dan proyek Anda akan berhasil, lakukan salah dan proyek Anda akan gagal.
sumber
Jawaban yang tepat sangat tergantung pada platform Anda pemrograman untuk.
Kebetulan seseorang menanyakan pertanyaan ini untuk platform khusus di StackOverflow sekitar 1,5 tahun yang lalu.
Baik itu MySQL, SQL Server, Oracle, PostgreSQL atau RDBMS lainnya, Anda harus sangat kreatif dengan infrastruktur basis data. Jika Anda memiliki buku cek terbuka untuk perangkat keras dan DBMS kekuatan industri, Oracle cocok untuk Anda (jika faktanya, Oracle RAC akan lebih diinginkan). Jika Anda mengembangkan menggunakan IIS dan lingkungan Microsoft, maka itu adalah SQL Server sepanjang jalan. Jika Anda memiliki masalah anggaran dan menginginkan tampilan dan nuansa Oracle, PostgreSQL akan diselamatkan. Jika Anda memiliki masalah anggaran, imajinasi yang jelas, dan ingin mengelola mikro Mesin Penyimpanan sesuai keinginan Anda untuk mengakomodasi kepatuhan ACID, bacaan berkecepatan tinggi, dan berbagai arsitektur replikasi, saya akan secara prejudis mengatakan MySQL.
DBMS seharusnya menjadi kekhawatiran Anda yang paling sedikit dengan MMORPG. Masalah pemrograman selalu menghadirkan ikan yang lebih besar untuk digoreng. Jadi, buat keputusan dengan bijaksana dan bijak, karena apa pun DBMS yang Anda pilih, Anda harus hidup dengannya (seperti halnya FaceBook harus hidup dengan MySQL ).
sumber
Ini bukan pertanyaan yang tepat. Kinerja gim Anda akan bergantung pada arsitektur lengkap dan tumpukan teknologi yang Anda pilih dan cara penerapannya. DBMS hanyalah salah satu komponen stack. Saya akan menebak bahwa DBMS tidak mungkin menjadi faktor pembatas pada kinerja kecuali jika Anda merancang semuanya dengan sangat buruk. Lapisan domain Anda, cacheing dan bagaimana Anda mendistribusikan dan memperbesar situs tampaknya menjadi masalah yang jauh lebih penting.
sumber
Setiap RDBMS akan jatuh dengan skala tergantung bagaimana itu dikonfigurasi, diskalakan dan bagaimana aplikasi menggunakannya.
Saya pikir, Anda punya dua pertanyaan dalam satu. Yang pertama, "DBMS apa yang mampu bertahan dari data game dengan cara yang efisien." (subyektif, imho) Yang kedua, "bagaimana saya skala DBMS untuk melakukan dengan 1000s pengguna?"
Banyak layanan online telah menemukan kombinasi MySQL dan Memcached untuk memberikan kinerja dan skala yang sangat baik. Namun, ada titik di mana solusi itu jatuh juga. Namun, mungkin itulah yang Anda butuhkan.
Semakin banyak layanan online yang memasukkan solusi NoSQL ke dalam arsitektur mereka. Saya memiliki pengalaman dengan CouchBase dan merasa bermanfaat.
sumber
Kode, desain dan disk Anda (untuk menulis) menentukan kinerja secara umum. Bukan platform.
sumber
Anda bisa melihat CUBRID . Ini adalah RDBMS open source yang sangat "panas" di Korea Selatan saat ini. Ini seharusnya berfungsi dengan sangat baik / sangat cepat untuk aplikasi web dengan jumlah pengguna yang tinggi (mereka mengatakan 50rb atau sekitar itu).
sumber
Saya pikir salah satu database utama dapat menangani beban jika dirancang dengan baik. Sayangnya saya memperkirakan bahwa kurang dari 1% dari semua database dirancang dengan baik. (Saya secara pribadi telah berurusan dengan data dari ribuan database yang berbeda melakukan berbagai fungsi, jadi saya pikir saya punya ide bagus tentang kurangnya kualitas yang ada di luar sana di dunia nyata.)
Saya akan sangat menyarankan agar Anda mendapatkan beberapa buku tentang penyetelan kinerja untuk database yang Anda pilih dan membacanya secara menyeluruh sebelum mulai mendesain. Ada banyak hal yang akan membantu database Anda tampil lebih baik yang harus dirancang sejak awal. Hanya mengetahui cara menulis permintaan performant dan indeks desain sangat penting untuk mendapatkan desain yang baik. Jenis studi dan kinerja yang dirancang ini bukan optimasi prematur. Tidak ada alasan sama sekali untuk menggunakan teknik membunuh kinerja yang dikenal dalam desain. Database perlu dirancang untuk kinerja sejak awal.
sumber
Kami memiliki game seluler dengan 1000-an pemain dan kami melihat penurunan yang sangat besar dengan pergi ke kolam koneksi mysql IIS / .NET yang persisten. mysql 5.1
Pikirkan tentang menyimpan "tulis saja" data di tempat lain untuk mengurangi beban pada db apa pun yang Anda pilih, bahkan Cassandra atau syslog. Pikirkan tentang menyimpan data yang berubah dengan cepat, sangat transien tetapi dapat direkonstruksi dalam nosql db seperti memcache, riak, dll.
sumber