Preguntas frecuentes sobre conflictos y creación de versiones de documentos

Cuando utiliza bases de datos distribuidas, es posible que las copias de los datos se almacenen en varias ubicaciones. Mantener estos datos sincronizados es importante. Sin embargo, el entorno de trabajo puede impedir que los usuarios actualicen los documentos con sus cambios de forma inmediata, o incluso que los repliquen en la base de datos.

Como resultado, es posible que las copias de un documento tengan diferentes actualizaciones. Se producen "conflictos" porque IBM® Cloudant® for IBM Cloud® no puede determinar qué copia es la correcta.

IBM Cloudant utiliza el control de simultaneidad de varias versiones (MVCC) para garantizar que todos los nodos de cada clúster de base de datos incluyan únicamente la versión más reciente de un documento.

¿Qué es la coherencia final?

Las bases de datos de IBM Cloudant son finalmente coherentes, lo que significa que IBM Cloudant debe asegurarse de que no existan diferencias entre los nodos. Estas incoherencias se pueden producir cuando se sincronizan documentos obsoletos.

Es importante que las bases de datos de IBM Cloudant tengan acceso simultáneo de lectura y escritura. MVCC permite esta capacidad. MVCC es una forma de control de simultaneidad optimista que acelera las operaciones de lectura y escritura en bases de datos IBM Cloudant porque no es necesario un bloqueo de base de datos para las operaciones de lectura y escritura. Al mismo tiempo, MVCC permite la sincronización entre los nodos de las bases de datos de IBM Cloudant.

¿Cómo puedo saber si hay un conflicto?

No puede. A veces se solicita un documento que tiene un conflicto. En esas ocasiones, IBM Cloudant devuelve el documento con normalidad, como si no existiese ningún conflicto. Sin embargo, la versión que se devuelve no es necesariamente la versión más actual. En su lugar, se selecciona la versión en función de un algoritmo interno que tiene en cuenta varios factores. No debe dar por hecho que los documentos que se devuelven son siempre los más actuales.

¿Cómo identifico un documento con un conflicto?

Si existe un conflicto con un documento e intenta actualizarlo, IBM Cloudant devuelve una respuesta 409. Si intenta actualizar un documento mientras está fuera de línea, IBM Cloudant no puede comprobar si hay conflictos potenciales, y no recibe una respuesta 409.

Cuando se produce esta situación, es mejor comprobar si hay conflictos de documento cuando vuelva a estar en línea. Si tiene que buscar conflictos de documento, utilice la función de correlación de ejemplo siguiente:

function (doc) {
  if (doc._conflicts) {
    emit(null, [doc._rev].concat(doc._conflicts));
  }
}

Si quiere buscar conflictos dentro de varios documentos en una base de datos, escriba una vista.

¿Qué sucede si ignoro los conflictos?

Si no comprueba si hay conflictos, o no los arregla, la base de datos de IBM Cloudant tiene los siguientes problemas:

  • La incoherencia de documentos aumenta, porque los documentos en conflicto se siguen multiplicando.
  • Aumenta el tamaño de la base de datos, ya que todos los documentos con conflictos se deben conservar hasta que se resuelva el conflicto.
  • Disminuye el rendimiento, porque IBM Cloudant tarda más en responder cada solicitud, ya que tiene que pasar por todos los documentos con conflictos para encontrar la "mejor versión posible".

¿Cómo puedo resolver los conflictos?

Después de encontrar un conflicto, siga estos cuatro pasos para resolver el problema.

  1. Obtenga las revisiones conflictivas.
  2. Fusiónelos en su aplicación o pregunte al propietario qué desea hacer.
  3. Cargue la nueva revisión.
  4. Suprima las versiones antiguas.