Sto lavorando a un gioco multiplayer in tempo reale che richiederà un database (per funzionalità come profili dei giocatori, amici, sblocchi, notizie, ecc.) Questo è un gioco per PC standard (non basato su browser) e utilizzerà un client-server architettura. Sono nuovo nell'uso dei database e ho fatto qualche ricerca negli ultimi giorni quando mi sono imbattuto nel dibattito acceso: RDBMS vs NoSQL. Attualmente mi sto avvicinando a NoSQL ma dopo aver letto degli usi per ciascuno (RDBMS e NoSQL), sono tentato di usare entrambi. So che può sembrare strano, ma lasciami spiegare la mia situazione:
Il mio team ha un pacchetto di web hosting condiviso che offre memoria e larghezza di banda mySQL illimitate, l'unico avvertimento è che possiamo avere solo 25 connessioni aperte contemporaneamente (regola di hosting condiviso). Ho intenzione di utilizzare questo per il mio sito Web (un uso tipico senza dubbio) al fine di pubblicare aggiornamenti di notizie, supportare funzionalità della community (come commenti, caricamento di fan art, ecc.) E simili. Va tutto bene e bene - ma! è qui che le cose si fanno interessanti ... Voglio mostrare queste stesse informazioni che sono pubblicate sul mio sito web, nel gioco. Questo significa usare mySQL sia per il mio sito web che per il mio gioco. Oltre ai post di notizie e simili, ho intenzione di usarlo nel gioco per cose come la chat e un elenco di server. Sono principalmente preoccupato per quella regola delle 25 connessioni.
Il che mi porta a porre la domanda n. 1: funzionerà e c'è un'alternativa migliore?
Ora oltre a questo, ho letto quanto bene funziona NoSQL ed è adatto ai giochi in tempo reale (potrei sbagliarmi, ho attraversato un'enorme guerra di fiamma RDBMS vs NoSQL per arrivare qui e probabilmente sono bruciato). Fondamentalmente, vorrei usare MongoDB per tutti i miei dati sugli oggetti di gioco.
E di nuovo, sarà utile se fornirò un contesto: ho trovato un host (MongoLab) che offre gratuitamente un pacchetto MongoDB da 240 MB, che intendo utilizzare fino a quando non sarà necessario aggiornarlo. Dato 240 MB, ho calcolato che sarò in grado di memorizzare circa 60.000 giocatori (se ogni giocatore ha circa 4KB e ignoriamo altre cose che potrebbero essere memorizzate). Lo spazio di archiviazione e dover pagare di più in futuro (se il nostro gioco avrà successo) non è un problema. L'unico motivo per cui intendo attualmente utilizzare MongoDB per tutti i miei dati sugli oggetti di gioco è a causa della frequenza con cui accederai a questi dati degli oggetti di gioco (come ogni volta che un giocatore viene ucciso, raccoglie un oggetto, spara una pistola, ecc.) I come i semplici documenti privi di schemi (che semplificano la mappatura dei dati degli oggetti di gioco). Dovrei notare che, una volta,
Intendo utilizzare lo stesso MongoDB nel mio sito Web, per visualizzare le informazioni sul profilo del giocatore (non mi preoccupo della coerenza completa, va bene qualche ritardo dagli aggiornamenti in-game). Il che mi porta alla mia seconda domanda, domanda n. 2: è una buona idea o c'è qualcosa di meglio che dovrei fare?
Il gioco avrà un'esperienza di avvio simile a questa:
- Accesso client (MongoDB)
- Il client è nella home page del gioco con chat room (MySQL)
- Il client passa all'elenco dei server (MySQL)
Il client si connette a un server e ci gioca
Il server comunica gli aggiornamenti per tutti i giocatori (MongoDB)
Questo è solo il modo in cui immaginavo che avrebbe funzionato. Ti sembra buono o hai suggerimenti su come migliorare questo piano?