Su pregunta es realmente amplia debido a la gran cantidad de géneros que existen, pero aquí está la perspectiva de un desarrollador de software profesional.
Proporcionó una lista de criterios que desea utilizar para determinar qué mecanismo de persistencia de datos utiliza. Esos fueron:
- El tamaño del proyecto.
- La plataforma objetivo del juego.
- La complejidad de la estructura de datos.
- Portabilidad de datos entre muchos proyectos.
- ¿Con qué frecuencia se debe acceder a los datos?
- Múltiples tipos de datos para una misma aplicación
- Cualquier otro punto que considere interesante al decidir qué usar.
Primero debemos establecer qué opciones están disponibles para nosotros. Como no especificó un idioma o tecnología, es difícil decir exactamente, pero probablemente esté tratando de decidir entre XML y el almacenamiento de bases de datos relacionales .
Una distinción importante es que XML no es realmente un mecanismo de almacenamiento , sino una técnica de serialización. Es una forma de representar estructuras en memoria para tu juego. Teniendo en cuenta eso, realmente estás hablando de archivos planos versus almacenamiento de bases de datos relacionales . Estas no son las únicas opciones, pero son las más comunes, así que las voy a usar.
Para archivos planos:
- XML
- JSON
- Ñame
- XAML
- Texto sin formato
Para bases de datos:
- servidor SQL
- MySQL
- DB2
- Oráculo
- Mucho mas
EDITAR: Usted preguntó sobre otros tipos de mecanismos además de los archivos y las bases de datos relacionales. El único otro tipo notable de base de datos que he visto utilizar regularmente son las bases de datos "estilo Berkeley", que se basan esencialmente en valores clave. Estos tienden a usar árboles B para estructurar los datos, por lo que las búsquedas son rápidas. Estos son excelentes para la búsqueda de configuración / configuración donde sabes exactamente lo que quieres (por ejemplo, dame todos los datos de telemetría para "Nivel 1").
Ahora que tenemos todo lo básico fuera del camino, veamos algunos de sus criterios.
El tamaño del proyecto.
Algunos pueden estar en desacuerdo, pero el tamaño de su proyecto no necesariamente tendrá un gran impacto en su mecanismo de persistencia de datos. Deberá crear una biblioteca reutilizable de funciones que almacene / cargue datos desde cualquier mecanismo que desee. Incluso sugeriría implementar una capa de abstracción (consulte el patrón del Adaptador ) para que pueda cambiar fácilmente su mecanismo de persistencia si lo necesita.
Dicho esto, para proyectos pequeños, el uso de XML en el sistema de archivos puede funcionar bien, pero querrá abordar algunos de sus problemas de seguridad (es decir, el cifrado) para que los jugadores no puedan cambiar los datos a voluntad.
La plataforma objetivo del juego.
La plataforma tampoco será un gran problema. Debería estar más preocupado por su plataforma de desarrollo que la plataforma de destino. La razón de esto es que algunos lenguajes manejan ciertos tipos de marcado o bases de datos mejor que otros listos para usar. Eso no quiere decir que no pueda usar ninguno de los anteriores en casi cualquier idioma, pero a veces es mejor usar las herramientas compatibles que están disponibles para usted. Cualquier plataforma admitirá archivos planos y analizará XML, pero en las plataformas móviles es posible que desee considerar la serialización binaria si es posible, o al menos optimizar su XML para el almacenamiento.
La complejidad de la estructura de datos.
Esto es algo complicado. Las bases de datos relacionales son excelentes solo para eso ... almacenar entidades y sus relaciones. Tiene una mejor capacidad para imponer la estructura utilizando un repositorio de almacenamiento relacional que con los archivos en un sistema de archivos. Considere los tipos de relaciones entre sus entidades, así como la frecuencia con la que las cambia o encuentra entidades relacionadas. Para estructuras extremadamente complejas, sugeriría ir a la ruta de la base de datos.
Portabilidad de datos entre muchos proyectos.
Cuando se trata de portabilidad, debe considerar el hecho de que las bases de datos son naturalmente más pesadas que los archivos. Hay gastos generales de instalación y configuración, habrá diferentes bases de datos disponibles para diferentes plataformas, etc. SQLite es una muy buena forma de evitar esto. Sin embargo, cuando se trata de portabilidad, es probable que tenga un tiempo más fácil con soluciones basadas en archivos como XML.
EDITAR: Hay algunas otras preocupaciones que mencionó sobre la portabilidad en uno de sus comentarios. En última instancia, no desea que sus datos se acoplen demasiado a ningún producto o tipo de archivo. En última instancia, es mejor si puede almacenar datos de stock (niveles, enemigos, etc.) en algún tipo de formato abstracto (archivos delimitados por tabulaciones, XML, etc.) que pueda analizar y almacenar fácilmente en una base de datos / sistema de archivos al compilar o cargar hora. Esto significa que puede cambiar su mecanismo de almacenamiento por un capricho y simplemente reescribir la pieza de análisis.
¿Con qué frecuencia se debe acceder a los datos?
Gran cantidad de acceso a datos significa muchas E / S a menos que tenga algún tipo de mecanismo de almacenamiento en caché. Las bases de datos mantienen estructuras en la memoria y son excelentes para la manipulación y recuperación de datos. Si realmente persiste en los datos constantemente, es posible que desee quedarse con una base de datos.
Múltiples tipos de datos para una misma aplicación
El volumen es ciertamente una consideración, pero a menos que esté hablando de la persistencia de miles o millones de objetos, el sistema de archivos seguirá siendo aceptable como solución.
Tipo de juego
El tipo de juego que estás construyendo puede tener una gran influencia en la plataforma que elijas. Sí, para la mayoría de los juegos de un solo jugador para clientes, estarás bien usando una solución basada en un sistema de archivos comprimido o encriptado. Sin embargo, si estás hablando de juegos con un componente en línea, sería una locura. Siga la ruta de la base de datos y ahórrese el dolor de cabeza. Deje que el servidor administre todos sus datos utilizando un clúster de fondo.
Espero que algunos de estos comentarios ayuden. De ninguna manera es completamente integral, y tomar la decisión depende de ti, pero mi comentario debería darte algunas cosas en que pensar.
EDITAR: Hay algunas veces en que adoptar un enfoque híbrido tiene mucho sentido. Por ejemplo, supongamos que está desarrollando un MMORPG. En el lado del cliente, puede almacenar datos en caché sobre otros jugadores en una base de datos no relacional (como se mencionó anteriormente). En el lado del servidor, está almacenando todos los datos del juego en una base de datos relacional para mantenerlos. Y, de nuevo, en el lado del cliente, probablemente esté almacenando datos de registro, datos de configuración, etc. en archivos XML / planos para facilitar la accesibilidad.
Otro póster también mencionó que a veces es bueno, incluso si está almacenando datos para la producción en una base de datos, tener una forma de usar archivos planos para el desarrollo ... puede ser más fácil eliminar otro producto de la mezcla .