2010-04-09 28 views
11

¿Cómo maneja CouchDB los conflictos mientras realiza la replicación bidireccional?Resolución de conflictos de Couchdb

Por ejemplo: Digamos que hay dos bases de datos de la libreta de direcciones (en el servidor A y B). Hay un documento para Jack que contiene detalles de contacto de Jack.

  1. El servidor A y B están duplicados y ambos tienen la misma versión del documento de Jack.
  2. En el servidor A, el móvil de Jack no se ha actualizado.
  3. En el servidor B, se actualiza la dirección de Jack.
  4. Ahora cuando hacemos la replicación bidireccional hay un conflicto.

¿Cómo lo maneja couchDB? Si iniciamos la replicación en un programa Java, ¿hay alguna manera de saber si hubo conflictos con el programa Java?

Respuesta

17

El wiki CouchDB tiene un explanantion detallada: http://wiki.apache.org/couchdb/Replication_and_conflicts

En pocas palabras: CouchDB no trata de combinar las versiones contradictorias. Ambas versiones se copian en ambas réplicas. Un algoritmo determinista (pero desde un punto de vista de la aplicación probablemente arbitrario) elige uno de ellos para ser la versión "oficial". Elegirá la misma versión en ambas réplicas. Solo esta versión será visible por defecto y en vistas. Su aplicación puede consultar las otras versiones y fusionarlas según sus necesidades (posiblemente involucrando al usuario mostrando todas las versiones en la pantalla). Si su aplicación no busca conflictos, una de las dos actualizaciones se perderá efectivamente.

Si no está utilizando la API de replicación o carga masiva (pero la API REST por documento), la actualización conflictiva no entrará en la base de datos, pero se rechazará con un error 409. Tienes que fusionarte antes de tratar de actualizar nuevamente (como en Subversion).

Cuestiones relacionadas