La risposta è sì, è un'opzione valida ma no, probabilmente non è una grande idea .
Esistono due problemi principali con SQL che NoSQL tenta di risolvere quando si tratta di giochi.
Il primo è latenza o ritardo. In un certo senso, i database SQL sono incredibilmente veloci, elaborando migliaia di transazioni o più in decimi di secondo. In un altro senso, sono incredibilmente lenti, perché l'elaborazione di poche transazioni può richiedere lo stesso tempo. Per la maggior parte degli utilizzi del database, questo non ha importanza, ma i giochi hanno un componente in tempo reale, quindi non si tratta solo di quante transazioni puoi fare al secondo, ma del tempo medio impiegato per rispondere a una transazione del database.
Questa latenza è un grosso problema per i giochi in tempo reale. Molti sviluppatori che necessitano di database di grandi dimensioni (in genere per MMO) creano un livello di memorizzazione nella cache che si trova tra il database e i server di gioco per evitare queste bancarelle e quindi svuotare periodicamente la cache. Il problema? Hai appena eliminato i motivi principali per utilizzare un database: atomicità, coerenza, isolamento e durata .
Ma quel problema non si applica ai giochi web. Hai già una connessione ad alta latenza tra il giocatore e il gioco, quindi potresti anche ottenere il throughput fornito da SQL, nonché i vantaggi di un software maturo e ben noto.
Il secondo problema, tuttavia, si applica a te, e questa è la discrepanza di impedenza relazionale oggetto . I giochi si occupano di oggetti, i database si occupano di file. Se sei fortunato, un oggetto può essere trasformato in una riga semplicemente elencando i suoi campi, ma la maggior parte delle volte gli oggetti sono gerarchici e devi appiattirli in qualche modo per metterli in righe.
Database basati su documenti, come CouchDB e MongoDB, risolvono questo problema promuovendo il documento sull'oggetto di livello superiore, anziché sulla riga ("documento" in questo caso è sinonimo di "oggetto"). In questo modo, perdono molti dei vantaggi dei database SQL. Il throughput è molto più basso e gli algoritmi di blocco diventano molto più complicati.
La buona notizia è che ci sono già molti strumenti di mappatura relazionale a oggetti (ORM) disponibili per qualsiasi linguaggio tu stia usando. Ti consentono di tradurre tra oggetti in memoria e righe nel database in modo abbastanza trasparente. Questi strumenti non sono generalmente appropriati per i giochi in tempo reale su larga scala, perché possono presentare gli aspetti peggiori delle prestazioni dei database SQL e NoSQL. Ma va bene per un gioco Web - nel peggiore dei casi, quando si verificano problemi di prestazioni, è possibile tornare a fare transazioni alla vecchia maniera. Il problema di latenza non ti danneggia e la maggiore produttività ti aiuta.
Infine, per sostenere un punto che ho sottolineato altrove : non si tratta di dati di gioco statici. Non sto parlando delle descrizioni dei tuoi oggetti o del danno dell'arma o degli sprite o altro qui. Intendo i dati di gioco reali e mutevoli, come quelli che sono nell'inventario di un giocatore o quali sono le sue statistiche. Tutto ciò che serve per i dati statici è un archivio dati. Forse si scopre che la cosa più semplice da fare è usare lo stesso database dell'archivio dati perché hai un ORM eccezionale; forse avrai solo bisogno del filesystem. Sono due problemi distinti e una risposta non deve (e probabilmente non si adatta) ad entrambi i casi.