Conflictos de guardados de juego y unidades atómicas
Información general
Los conflictos de guardado se producen cuando modifica los mismos datos del juego en varios dispositivos. El sistema necesita decidir qué versión conservar. Para diseñar la estructura de sus datos de guardado, debe comprender cómo el sistema detecta y resuelve los conflictos.Cuándo se producen los conflictos
Los conflictos se producen durante la operación de sincronización (PFGameSaveFilesAddUserWithUiAsync) solo cuando todas las condiciones siguientes son verdaderas:
- Existen cambios locales: Modificó archivos localmente desde la última sincronización.
- Existen cambios en la nube: Otro dispositivo cargó datos más recientes desde la última sincronización.
- Misma unidad atómica: Ambos cambios están en la misma carpeta de nivel raíz.
Matriz de detección de conflictos
¿Qué es una unidad atómica?
Algunos sistemas de sincronización de archivos tratan los conflictos archivo por archivo. Si el mismo archivo necesita cargarse y descargarse, hay un conflicto. En Game Saves, cada subcarpeta de nivel raíz se trata como una unidad atómica.Cada subcarpeta de nivel raíz es una unidad atómica.
- Mantener la integridad de los datos: Los archivos interdependientes se mantienen coherentes juntos
- Proporcionar aislamiento: Los datos independientes en carpetas separadas se sincronizan sin conflictos
- Minimizar los conflictos: Los cambios en unidades atómicas diferentes en dispositivos diferentes se combinan automáticamente
Ejemplo de estructura de guardado
Escenarios de conflicto
Archivos de nivel raíz: caso especial
Todos los archivos en la raíz del guardado comparten una unidad atómica. El sistema agrupa todos los archivos que coloca directamente en la raíz del guardado (no en ninguna subcarpeta) como una sola unidad atómica. Si modifica un archivo de nivel raíz localmente y otro dispositivo modifica un archivo de nivel raíz diferente, esta diferencia desencadena un conflicto.Opciones de elección del usuario
Cuando se producen conflictos, los jugadores eligen entre:- Usar datos locales (conservar los locales): Conservar los datos de guardado actuales del dispositivo.
- Usar datos de la nube (conservar los de la nube): Descargar y usar los datos de guardado de la nube.
Fundamental: la resolución es todo o nada
⚠️ Importante: Aunque las unidades atómicas determinan cuándo se detecta un conflicto, la elección de resolución de conflictos del usuario se aplica al guardado completo, no a cada unidad atómica.
Ejemplo: escenario de conflicto mixto
Por qué es importante
- Conservar local pierde los cambios solo en la nube: Si elige “Conservar local” debido a un conflicto en SlotA, no recibe la actualización de la nube en SlotC que hizo otro dispositivo.
- Conservar nube pierde los cambios solo locales: Si elige “Conservar nube”, el estado de la nube sobrescribe sus cambios locales en SlotB y SlotD.
- Reversión disponible: Ambas elecciones conservan la rama descartada para una futura capacidad de reversión.
Resumen de diseño
Este enfoque de todo o nada simplifica la experiencia del jugador. Aunque la resolución por unidad atómica mantiene técnicamente la coherencia de los datos (dado que las unidades atómicas definen los límites de coherencia), crea desafíos de experiencia de usuario:
- Los jugadores necesitan entender el concepto de unidades atómicas y los límites de carpetas.
- Los resultados mixtos (algunas carpetas locales, otras de la nube) pueden dejar a los jugadores confundidos sobre el estado final.
- Preguntar por cada unidad atómica en conflicto por separado hace que la resolución de conflictos sea abrumadora.
Cuándo no se producen conflictos
Eliminación en ambos lados
Si ambos dispositivos eliminan el mismo archivo (o archivos de la misma unidad atómica), no se produce ningún conflicto. El sistema reconoce que ambos dispositivos están de acuerdo en que el archivo debe quitarse.Cambios en unidades atómicas diferentes
Si el dispositivo A modifica archivos enSlotA/ y el dispositivo B modifica archivos en SlotB/, no se produce ningún conflicto. La sincronización combina automáticamente ambos cambios.
Procedimientos recomendados
1. Diseñe cuidadosamente la estructura de carpetas
Use subcarpetas para unidades de guardado independientes:- Datos de referencia compartidos: Almacene los datos que cualquier ranura de guardado pueda usar, como contenido desbloqueado o logros, en su propia subcarpeta para que se sincronicen de forma independiente de las ranuras de guardado individuales.
- Colecciones grandes de recursos: Si su juego almacena conjuntos grandes de archivos que se actualizan de forma independiente, como paquetes de contenido descargado o niveles creados por los usuarios, considere dividirlos en varias subcarpetas raíz para que las actualizaciones de una colección no entren en conflicto con las actualizaciones de otra.
