Quali DBMS sono abbastanza veloci per un gioco online (poche migliaia di giocatori)? [chiuso]


8

Attualmente sto realizzando un gioco MMORPG, che potrebbe avere alcune migliaia di giocatori online contemporaneamente (probabilmente no; solo un pio desiderio). Prima di tutto volevamo usare MySQL, ma ho sentito che non è abbastanza veloce per questa scala.

Quale DBMS è abbastanza veloce? Quanto è SQL Server (come ho imparato SQL Server a scuola)?


Proprio come punto di riferimento, World Of Warcraft è basato su Oracle.
Philᵀᴹ

Qualunque DBMS scegliate, non dimenticate di tenere conto delle licenze. Forse la tua versione gratuita va bene per piccoli carichi, ma se e quando devi ridimensionare o ridimensionare potresti riscontrare un grave caso di shock adesivo.
datagod

Risposte:


24

Questa è una domanda davvero difficile a cui rispondere. Puoi prendere la piattaforma di database più veloce al mondo, progettare uno schema orribile, scrivere un'applicazione schifosa attorno ad essa e quindi essere tentato di incolpare la piattaforma di database. Allo stesso tempo, è possibile utilizzare SQL Server Express gratuito e, con il giusto design, la logica dell'applicazione e un approccio con ragionevole scalabilità (ad esempio ridimensionamento delle letture mediante memorizzazione nella cache dei dati, ecc.), È possibile scrivere un'applicazione che gestisce migliaia di utenti nessun problema.

Credo che SQL Server sia in grado di gestire migliaia di utenti? Assolutamente. Credo che Oracle e DB2 possano fare altrettanto? Certamente. MySQL? Non sono sicuro, non abbastanza esperienza lì. Accesso? Probabilmente non è affatto una scelta saggia. Se hai familiarità con SQL Server, allora suggerisco che è la strada che prendi in considerazione, tieni presente che la tua scelta di RDBMS non determinerà di per sé successo o fallimento.


Beh, avevo solo bisogno di una linea guida. Non è che un piccolo gioco indipendente raggiungerà immediatamente migliaia di utenti simultanei. Grazie!
Simon Verbeke,

3
Anche se potresti non avere in programma di colpire subito migliaia di utenti contemporaneamente, se non pianifichi correttamente dall'inizio finirai in una situazione in cui devi subire un'interruzione grave o almeno avere qualche rallentamento per un po ', mentre lavori per risolvere i problemi.
mrdenny,

Bene, ed ecco un articolo puntuale che spiega come Facebook stia ora sentendo il bruciore per le loro decisioni di progettazione iniziali basate su argomenti "non avremo mai enormi": gigaom.com/cloud/… ... appena notato questo articolo è stato anche citato nella risposta di Rolando
Aaron Bertrand

@Aaron: roba buona. +1 per la tua risposta perché le infrastrutture software intorno a MMORPG dovrebbero essere indipendenti dal database e comportarsi comunque !!!
RolandoMySQLDBA

12

Lasciami dire così, ricordi GameSpy Arcade dall'inizio della metà degli anni 2000? Funzionava con migliaia di giochi ed era tutto in esecuzione su SQL Server e supportava decine di migliaia di utenti contemporaneamente (sì, avevamo diversi server SQL lì dentro che facevano varie cose). Riguarda la progettazione del database e il modo in cui usi il sistema. Fallo correttamente e il tuo progetto avrà successo, fallo in modo errato e il tuo progetto fallirà, malamente.


Bello sapere che informazioni su GameSpy, soprattutto da quando l'avevo usato. Non ho mai saputo della parte SQL per tutto quel tempo.
StanleyJohns,

1
Non dimenticare, allora la versione più recente era SQL 2000 e disponiamo di oltre 1 miliardo di tabelle di righe. Abbiamo avuto un buon rappresentante per mantenere i sistemi online sotto carico elevato.
mrdenny,

11

La risposta giusta dipende molto dalla piattaforma per cui stai programmando.

Accade così che qualcuno abbia posto questa domanda per una piattaforma specifica in StackOverflow circa 1,5 anni fa.

Che si tratti di MySQL, SQL Server, Oracle, PostgreSQL o qualche altro RDBMS, devi essere molto creativo con l'infrastruttura del database. Se hai un libretto degli assegni aperto per l'hardware e un DBMS di livello industriale, Oracle è per te (in realtà, Oracle RAC sarebbe più desiderabile). Se stai sviluppando utilizzando IIS e un ambiente Microsoft, allora è SQL Server fino in fondo. Se hai problemi di budget e desideri un aspetto grafico di Oracle, PostgreSQL in soccorso. Se hai problemi di budget, una fervida immaginazione e desideri micromanage di Storage Engine a tuo piacimento per soddisfare la conformità ACID, letture ad alta velocità e una varietà di architetture di replica, direi pregiudizialmente MySQL.

Il DBMS dovrebbe essere l'ultimo dei tuoi problemi con MMORPG. I problemi di programmazione presentano sempre pesci più grandi da friggere. Quindi, prendi la tua decisione con prudenza e saggezza, perché qualunque DBMS tu scelga, devi conviverci ( allo stesso modo in cui FaceBook deve convivere con MySQL ).


2
Questo è il terzo riferimento che ho visto a quell'articolo di Facebook oggi. È un articolo abbastanza buono.
mrdenny l'

2
+1. MySQL è di solito trascurato, ma è un RDBMS davvero potente.
Stanley John

7

Questa non è la domanda giusta. Le prestazioni del tuo gioco dipenderanno dall'architettura completa e dallo stack tecnologico che scegli e da come viene implementato. Il DBMS è solo un componente dello stack. Immagino che è improbabile che il DBMS sia un fattore limitante per le prestazioni, a meno che non si progettino cose molto male. Il livello del dominio, la memorizzazione nella cache e il modo in cui distribuisci e ridimensiona il sito sembrano essere preoccupazioni molto più importanti.


5

Qualsiasi RDBMS cadrà con la scala a seconda di come è configurato, ridimensionato e come l'applicazione lo utilizza.

Me pensa, hai due domande in una. Il primo, "ciò che i DBMS sono in grado di mantenere in modo efficiente i dati di gioco". (soggettivo, imho) Il secondo "come scalare quel DBMS per esibirmi con migliaia di utenti?"

Molti servizi online hanno trovato la combinazione di MySQL e Memcached per fornire prestazioni e scalabilità eccellenti. Tuttavia, arriva un punto in cui anche quella soluzione cade. Tuttavia, potrebbe essere esattamente quello che ti serve.

Sempre più servizi online inseriscono una soluzione NoSQL nella loro architettura. Ho una certa esperienza con CouchBase e lo trovo utile.


4

Codice, design e i tuoi dischi (per le scritture) determinano le prestazioni in generale. Non la piattaforma.


2

Puoi dare un'occhiata a CUBRID . È un RDBMS open source che è molto "caldo" in Corea del Sud in questo momento. Supponiamo che funzioni meglio / molto velocemente per le applicazioni web con un alto numero di utenti (dicono 50k o qualcosa del genere).


CUBRID, infatti, non solo un DBMS relazionale ma fornisce anche funzionalità Object . La parte oggetto è esattamente ciò di cui gli sviluppatori di giochi hanno bisogno. In CUBRID è possibile creare facilmente tipi definiti dall'utente. Per esempio. una tabella può avere una colonna, che ha un tipo di dati come un'altra tabella come: CREATE TABLE a (id INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR (255)); CREATE TABLE b (id INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Questo tipo di funzionalità è estremamente utile per gli sviluppatori di giochi. I popolari giochi online in Corea del Sud si basano su CUBRID.
Occhio

2

Penso che uno qualsiasi dei principali database sia in grado di gestire il carico se progettato bene. Purtroppo, stimerei che meno dell'1% di tutti i database sia ben progettato. (Ho trattato personalmente i dati di letteralmente migliaia di database diversi che svolgono una vasta gamma di funzioni, quindi penso di avere una buona idea della mancanza di qualità che esiste nel mondo reale.)

Suggerirei caldamente di ottenere alcuni libri sull'ottimizzazione delle prestazioni per il database scelto e di leggerli attentamente prima di iniziare a progettare. Ci sono molte cose che aiuteranno il tuo database a funzionare meglio che dovrebbe essere progettato dall'inizio. Sapere come scrivere query performanti e indici di progettazione è fondamentale per ottenere un buon design. Questo tipo di studio e le prestazioni progettate non sono ottimizzazioni premature. Non vi è alcun motivo di utilizzare tecniche di uccisione delle prestazioni conosciute nella progettazione. I database devono essere progettati per le prestazioni sin dall'inizio.


0

Abbiamo giochi mobili con migliaia di giocatori e abbiamo visto un enorme calo di carico andando ai pool di connessioni mysql IIS / .NET persistenti. mysql 5.1

Pensa a conservare i dati di "sola scrittura" da qualche altra parte per ridurre il carico su qualunque db tu scelga Cassandra o syslog. Pensa a mantenere dati in rapida evoluzione, altamente transitori ma ricostruibili in un db nosql come memcache, riak, ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.