Devo usare un database per archiviare il contenuto del gioco? [chiuso]


16

Ho un gioco 2D scritto in C ++ usando SFML. Voglio rendere il gioco espandibile in modo tale che contenuti come oggetti o entità possano essere facilmente aggiunti aggiungendo una riga / voce / riga a un file o database.

Sto cercando qualcosa che non ha bisogno di essere compilato nel programma, ma invece può essere letto e scritto in fase di esecuzione. Quando sarebbe appropriato usare un database?


1
Per favore chiarisci di più le tue esigenze. I database sono abbastanza veloci, ma molto complessi. Hai davvero bisogno della velocità? Perché non usare semplicemente un file di testo? Hai eseguito un benchmark?
Anko,

Quanti oggetti hai? È più di un milione? Si tratta della soglia in cui prenderei in considerazione l'uso di un database su file di testo.
Philipp,

Direi che un database è eccessivo per questo, basta usare una specie di elenco di definizioni. Forse solo testo semplice. Prendi in considerazione XML o JSON.
Hugo Zink,

1
Raccomando anche XML o JSON. Preferisco XML perché è più leggibile per me, come essere umano, ma anche JSON è una buona scelta.
Draco18s non si fida più di SE il

Non pretenderò di avere molta conoscenza dei sistemi di dati o di come sono implementati nei giochi, ma dirò che Microsoft tende a utilizzare implementazioni di micro-database per molte delle loro semplici app (quelle che non hanno un sacco di dati o necessità di database esterni, ma tendono ad avere "relazioni" ecc.). Finché tieni a mente la facilità d'uso, può avere senso. (Cattiva idea: utilizzare uno spazio dei nomi XML super formalizzato che impone la correttezza dei dati)
Katana314

Risposte:


26

Utilizzare un database solo se è necessario un database. Questo è:

  • Se è necessario eseguire query complesse spesso.
  • Se hai relazioni di dati complesse.
  • Se i tuoi dati sono enormi e non è probabile che si adattino alla memoria.

Se i dati del tuo gioco soddisfano una di queste condizioni, potresti trarre vantaggio dall'uso di un database. Nota che questi non sono molto comuni e probabilmente non li soddisfi. Se lo fai, andrei con SQLite o qualcosa del genere con un'idea simile di non richiedere un server in esecuzione e di essere solo una libreria.

In caso contrario, utilizzare i file e caricare i dati in memoria all'avvio. Se vuoi che il gioco sia modificabile, carica questi dati sia dalla directory del tuo gioco che dalle directory delle mod e definisci come unire le informazioni in conflitto.

Si noti inoltre che, se si fa uso di un database, potrebbe beneficiare sia voi che gli sviluppatori Mods' utilizzare ancora i file per leggere i dati iniziali e costruire il database solo quando il gioco carica. A meno che la dimensione potenziale di questo database non sia enorme (cioè più di qualche decina di MiB), potresti voler utilizzare un database in memoria, che è possibile in SQLite specificando :memory:come percorso del database .


3
In secondo luogo SQLite, anche se le tue esigenze NON sono "complesse" o "enormi". In realtà ci sono molte ragioni per cui con qualcosa di piccolo e incorporato come quello, puoi trarre grandi vantaggi dall'avere un database a portata di mano.
wjl

Inoltre, le piattaforme mobili utilizzano database per memorizzare alcune informazioni. Android utilizza SQLite. Ciò significa che la maggior parte del tuo lavoro per piattaforme mobili è già stata eseguita (in termini di gestione dei dati). Inoltre, è davvero facile configurare SQLite e modificare i dati di SQLite (con programmi come SQLite Studio o simili). Se si desidera utilizzare SQLite, la soluzione migliore sarebbe utilizzare V3. Ma a parte questo, perfetto!
Ismael Miguel,

@wjl: D'accordo, i vantaggi della normalizzazione e dei vincoli di integrità referenziale valgono la pena anche per set di dati di gioco più piccoli. (Ora, se non fosse stato un tale dolore, fare in modo che SQLite facesse i propri vincoli di integrità referenziale ...)
Mason Wheeler,

Questo è un argomento contro l'utilizzo di un database relazionale . Un semplice archivio di valori-chiave indicizzati può comunque essere utile.
Segna il

1
@Mark Se hai intenzione di utilizzare un archivio di valori-chiave in un gioco potresti anche avere solo una hashmap o simile in memoria.
Darkhogg,

5

Mi piace molto MongoDB per lo sviluppo del gioco, ha prestazioni davvero buone ed è davvero flessibile, facile da usare e basato su json.

Puoi semplicemente aggiungere qualsiasi campo di cui hai bisogno in qualsiasi collezione grazie al suo NoSQL Arch, quindi si adatta davvero bene a qualsiasi ambiente "dinamico" come i giochi.

Dai un'occhiata .

Se stai sviluppando una sorta di gioco di strategia MMO Turn, probabilmente dovresti leggere su CouchDB , è un database NoSQL che ha un sistema di versioning davvero buono.


Non è una buona risposta. La domanda non era "quale database dovrei usare" ma piuttosto "dovrei usare un database affatto".
uliwitness

1

CastleDB è una buona opzione perché è semplicemente un editor che converte successivamente un database in un file JSON. Ho visto molte risposte affermando che un file di testo semplice è il migliore, quindi CastleDB è probabilmente il migliore di entrambi i mondi.


Non è una cattiva risposta, ma manca la domanda. La domanda non era "quale database dovrei usare" ma piuttosto "dovrei usare un database affatto".
uliwitness
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.