¿Debo usar una base de datos para almacenar el contenido del juego? [cerrado]

16

Tengo un juego 2D escrito en C ++ usando SFML. Quiero hacer que el juego sea expandible de tal manera que se pueda agregar fácilmente contenido como elementos o entidades agregando una línea / entrada / fila a un archivo o base de datos.

Estoy buscando algo que no necesita compilarse en el programa, sino que puede leerse y escribirse en tiempo de ejecución. ¿Cuándo sería apropiado usar una base de datos?

SiniestroSloth
fuente
1
Por favor aclare sus necesidades más. Las bases de datos son bastante rápidas, pero muy complejas. ¿Realmente necesitas la velocidad? ¿Por qué no solo usar un archivo de texto? ¿Has ejecutado un punto de referencia?
Anko
¿Cuántos artículos vas a tener? ¿Es más de un millón? Ese es el umbral en el que consideraría usar una base de datos sobre archivos de texto.
Philipp
Yo diría que una base de datos es exagerada para esto, solo use algún tipo de lista de definiciones. Quizás solo texto simple. Considere XML o JSON.
Hugo Zink
1
Recomiendo XML o JSON también. Prefiero XML porque es más legible para mí, como humano, pero JSON también es una buena opción.
Draco18s ya no confía en SE
No afirmaré tener mucho conocimiento de los sistemas de datos, o cómo se implementan en los juegos, pero diré que Microsoft tiende a usar implementaciones de micro bases de datos para muchas de sus aplicaciones simples (las que no tienen muchas datos o necesidades de bases de datos externas, pero tienden a tener "relaciones", etc. Siempre que tenga en cuenta la facilidad de uso, puede tener sentido. (Mala idea: uso de un espacio de nombres XML súper formalizado que exige la corrección de datos)
Katana314

Respuestas:

26

Solo use una base de datos si necesita una base de datos. Es decir:

  • Si necesita realizar consultas complejas con frecuencia.
  • Si tiene relaciones de datos complejas.
  • Si sus datos son enormes y no es probable que quepan en la memoria.

Si los datos de tu juego satisfacen alguna de estas condiciones, podrías beneficiarte al usar una base de datos. Tenga en cuenta que estos no son muy comunes, y probablemente no satisfaga ninguno de ellos. Si lo hace, elegiría SQLite o algo con una idea similar de no requerir un servidor en ejecución y ser solo una biblioteca.

De lo contrario, use archivos y cargue datos en la memoria al inicio. Si quieres que el juego sea modificable, carga estos datos tanto del directorio de tu juego como de los directorios de los mods y define cómo se podría fusionar la información conflictiva.

También tenga en cuenta que, si se hace uso de una base de datos, que podría beneficiar tanto a usted como a los desarrolladores de mods' todavía utilizar archivos para leer los datos iniciales y construir la base de datos sólo cuando el juego. A menos que el tamaño potencial de esta base de datos sea enorme (es decir, más de unas pocas docenas de MiB), es posible que desee utilizar una base de datos en memoria, que es posible en SQLite especificando :memory:como la ruta de la base de datos .

Darkhogg
fuente
3
Me gustaría considerarlo en segundo lugar SQLite, incluso si sus necesidades NO son "complejas" o "enormes". En realidad, hay muchas razones por las que con algo pequeño e incrustado como ese, puede beneficiarse enormemente de tener una base de datos a su alcance.
wjl
Además, las plataformas móviles utilizan bases de datos para almacenar información. Android usa SQLite. Esto significa que la mayor parte de su trabajo para plataformas móviles ya está hecho (en términos de manejo de datos). Además, es realmente fácil configurar SQLite y editar datos de SQLite (con programas como SQLite Studio o similares). Si se trata de usar SQLite, la mejor opción sería usar V3. Pero aparte de eso, ¡perfecto!
Ismael Miguel
@wjl: De acuerdo, los beneficios de la normalización y las restricciones de integridad referencial valen la pena incluso para conjuntos de datos de juegos más pequeños. (Ahora, si no fuera tan difícil hacer que SQLite hiciera las restricciones de integridad referencial adecuadas ...)
Mason Wheeler
Este es un argumento en contra del uso de una base de datos relacional . Una tienda de valor clave indizada simple todavía puede valer la pena.
Mark
1
@Mark Si vas a usar una tienda de valores clave en un juego, también podrías tener un hashmap o similar en la memoria.
Darkhogg
5

Realmente me gusta MongoDB para el desarrollo de juegos, tiene un rendimiento realmente bueno y es realmente flexible, fácil de usar y basado en json.

Puede agregar cualquier campo que necesite en cualquier colección debido a que es NoSQL Arch, por lo que encaja muy bien en cualquier entorno "dinámico" como los juegos.

Dale un vistazo .

Si está desarrollando algún tipo de juego de estrategia basado en MMO Turn, probablemente debería leer sobre CouchDB , es una base de datos NoSQL que tiene un sistema de versiones realmente bueno.

PRDeving
fuente
No es una buena respuesta. La pregunta no era "qué base de datos debería usar", sino "debería usar una base de datos".
uliwitness
1

CastleDB es una buena opción porque es simplemente un editor que luego convierte una base de datos en un archivo JSON. He visto muchas respuestas diciendo que un archivo de texto sin formato es el mejor, por lo que CastleDB es probablemente el mejor de ambos mundos.

hjk231
fuente
No es una mala respuesta, pero pierde la pregunta. La pregunta no era "qué base de datos debería usar", sino "debería usar una base de datos".
uliwitness