Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Detalles técnicos

Conflict Resolution

Los conflictos surgen cuando dos o más usuarios realizan cambios en los mismos datos de forma independiente. Esto puede deberse a la latencia entre el dispositivo y el servidor o a la pérdida de conectividad. En este caso, Atlas Device Sync utiliza automáticamente estrategias de resolución de conflictos para fusionar los cambios. En concreto, Device Sync gestiona la resolución de conflictos mediante Transformación operativa: un conjunto de reglas que garantizan una sólida consistencia final, lo que significa que todas las versiones de los clientes convergerán a estados idénticos. Esto se mantendrá incluso si los cambios se realizaron en un orden diferente.

Hay que tener conocimiento de las reglas para garantizar resultados coherentes, pero la ventaja es que al seguir dichas reglas, se pueden tener dispositivos que funcionen completamente sin conexión y aun así converger en resultados significativos cuando se conecten.

Esta página utiliza el ejemplo de una aplicación para pasear perros para ilustrar cómo Device Sync resuelve conflictos. En esta aplicación, Matt y Sarah son paseadores de perros que la usan para rastrear los perros de sus clientes y sus horarios de paseo.

A muy alto nivel, las reglas son las siguientes:

Las eliminaciones siempre ganan.
Si una de las partes borra un objeto, este siempre permanecerá borrado, aunque la otra parte haya realizado cambios posteriormente.
La última en actualizar gana.
If two sides update the same property, Device Sync will keep the value from the most recent update.
Las inserciones en listas se ordenan por tiempo.
Si se insertan dos elementos en la misma posición, el primero aparecerá antes que el otro. Esto significa que, si ambos lados añaden elementos al final de una lista, se incluirán ambos elementos en orden de inserción.
Las claves primarias designan la identidad del objeto.
If two sides both create objects of the same class with identical primary keys, they will be treated as instances of the same object.

Ejemplo

Resolución de conflictos entre dos usuarios

Matt and Sarah are working on data for their dog walking business. Matt deletes data on one of their client's dogs, Doug, as they no longer need to walk him. While Sarah is out without internet connection, she edits Doug's required walk time data on her local, offline version, as she does not know about Matt's deletion of Doug's data.

Una vez que Sarah recupere la conexión a internet, su cambio se enviará al servidor. El servidor enviará a ella la operación de eliminación de Matt. Como el borrado siempre gana según las reglas de resolución de conflictos de Device Sync, se mantiene el borrado de Matt en vez de la edición de Sarah. El servidor no enviará la edición de Sarah al dispositivo de Matt. Los datos vuelven a coincidir en los dispositivos de Matt y Sarah.

El uso de números enteros para contar es un caso especial. La forma en que la mayoría de los lenguajes de programación implementarían una operación de incremento (como v += 1) consiste en leer el valor, incrementar el resultado y luego almacenarlo. Obviamente, esto no funcionará si varias partes realizan el incremento simultáneamente (pueden leer 10, incrementarlo a 11 y, al fusionarlo, obtener un resultado de 11 en lugar del 12 deseado).

To support this common case, we offer a way to express whether you are incrementing (or decrementing) the value, giving enough hints so the merge can reach the correct result. You have the choice to update the entire value or edit it in a way that conveys more meaning, allowing you to get more precise control of the conflict resolution.

Coleções aninhadas são tratadas de forma semelhante a objetos incrustados. Es decir, se consideran objetos secundarios con un objeto principal específico. Cualquier actualización en el objeto padre siempre prevalecerá en una resolución de conflictos, incluso si sobrescribe el objeto hijo.

Las actualizaciones de una colección anidada se resuelven de la siguiente manera:

  • Si varios dispositivos actualizan la misma colección anidada existente, Device Sync utiliza reglas normales de resolución de conflictos para incorporar ambos cambios.

  • Si varios dispositivos crean nuevas colecciones únicas anidadas en el mismo objeto principal, se aplica la regla "la última actualización prevalece" y Device Sync sobrescribe todas las demás actualizaciones con la última actualización realizada.

Por ejemplo, los datos del cliente en la aplicación para pasear perros de Sarah y Matt se modelan como matrices anidadas en la propiedad principal client. Sarah, y posteriormente Matt, crean cada uno una nueva colección de detalles para el mismo cliente en sus dispositivos sin conexión. Cuando los dispositivos se sincronizan, Device Sync conserva la entrada creada por Matt, ya que su actualización (creación de una nueva colección de detalles anidada) fue la última realizada.

Later, Sarah and Matt each make unique updates to the newly created details entry. Device Sync will merge these updates according to normal conflict resolution rules, inserting the new or modified items to the list in chronological order.

Device Sync interpreta el valor de una string en su totalidad y no fusiona conflictos a nivel de carácter individual. Por ejemplo, esto significa que si se inserta o elimina un caracter o subcadena dentro de un string, Device Sync tratará esto como un reemplazo de todo el valor del string.

Device Sync considera la eliminación de una clave de diccionario como una actualización, no como una eliminación. Por lo tanto, se aplica la regla "La última actualización prevalece" en lugar de la regla "Las eliminaciones siempre prevalecen".

For example, the dog walking app contains an optional collection of details for each dog, which are entered as key-values. While both users are offline, Sarah deletes the entire favorite toy entry for a dog, and later Matt updates the same dog's favorite toy to tennis ball. When both come back online, Device Sync considers both as updates to the favorite toy entry and applies Matt's updates because he made them after Sarah's deletion.

En general, la resolución de conflictos de Device Sync debería funcionar en la mayoría de los casos y no debería ser necesario personalizarla. Dicho esto, la forma típica de personalizar la resolución de conflictos es cambiar el tipo de propiedad de cadena a lista. Cada parte puede añadir sus actualizaciones a la lista y aplicar las reglas de resolución de conflictos que desee directamente en el modelo de datos. Puede usar esta técnica para implementar valores máximos, mínimos, victorias de primera escritura, victorias de última escritura o cualquier otro tipo de resolución que se le ocurra.

  • Device Sync implementa un sistema de resolución de conflictos que permite que varios escritores fuera de línea escriban simultáneamente y, aun así, converjan en el mismo resultado.

  • El sistema de resolución de conflictos sigue cuatro reglas:
    • Las eliminaciones siempre ganan.

    • La última actualización gana.

    • Las inserciones en listas se ordenan por tiempo.

    • Las claves primarias designan la identidad del objeto.

  • Los contadores, las colecciones anidadas y las cadenas son casos especiales que se deben tener en cuenta en el código del cliente.

Volver

Detalles técnicos

En esta página