Gestion des versions de document et conflits - Foire aux questions

Lorsque vous utilisez des bases de données réparties, des copies de vos données peuvent être stockées dans plusieurs emplacements. Il est important que ces données soient synchronisées. Toutefois, votre environnement de travail peut empêcher vos utilisateurs de mettre à jour les documents en y intégrant leurs modifications immédiatement, ou même de les répliquer dans la base de données.

De ce fait, les diverses copies d'un même document peuvent avoir des mises à jour différentes. Des "conflits" surviennent alors car IBM® Cloudant® for IBM Cloud® n'est pas en mesure de déterminer quelle est la bonne copie.

IBM Cloudant utilise la fonctionnalité MVCC (Multi-Version Concurrency Control) pour s'assurer que tous les noeuds de chaque cluster de base de données n'incluent que la version la plus récente d'un document.

Qu'est-ce que la cohérence à terme ?

Les bases de données IBM Cloudant se servent d'un modèle de cohérence à terme, qui implique qu'IBM Cloudant doit s'assurer qu'il n'existe aucune différence entre les noeuds. Ces incohérences peuvent survenir quand des documents périmés sont synchronisés.

Il est important que les bases de données IBM Cloudant disposent d'un accès simultané en lecture et en écriture. La fonctionnalité MVCC offre cette possibilité. MVCC est une forme de contrôle des accès concurrents optimiste qui permet d'effectuer des opérations de lecture et d'écriture sur les bases de données IBM Cloudant plus rapidement car un verrou de base de données n'est pas nécessaire pour les opérations de lecture et d'écriture. En même temps, MVCC active la synchronisation entre les noeuds de base de données IBM Cloudant.

Comment savoir s'il y a un conflit ?

C'est impossible à savoir. Il peut vous arriver de demander un document comportant un conflit. A ce moment là, IBM Cloudant retourne le document normalement, comme si aucun conflit n'existait. Toutefois, la version qui est renvoyée n'est pas nécessairement la version la plus récente. En effet, la version est sélectionnée en fonction d'un algorithme interne qui prend en compte plusieurs facteurs. Vous ne devez donc pas supposer que lorsque des documents sont renvoyés, ils sont forcément toujours les plus récents.

Comment identifier un document avec un conflit ?

S'il existe un conflit avec un document et que vous tentez de le mettre à jour, IBM Cloudant renvoie une réponse 409. Si vous tentez de mettre à jour un document quand vous êtes hors ligne, IBM Cloudant ne peut pas rechercher de conflits potentiels et vous ne recevez pas de réponse 409.

Quand cette situation se produit, il est préférable de rechercher les conflits de documents quand vous êtes de nouveau en ligne. Si vous devez trouver des conflits de document, utilisez la fonction de mappe exemple suivante :

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

Si vous voulez trouver des conflits dans plusieurs documents d'une base de données, créez une vue.

Que se passe-t-il si j'ignore les conflits ?

Si vous ne vérifiez pas les conflits ou si vous ne les corrigez pas, votre base de données IBM Cloudant présentera les problèmes suivants :

  • Une augmentation de l'incohérence des documents du fait de la multiplication des documents conflictuels.
  • Un accroissement de la taille des bases de données puisque les documents comportant des conflits doivent être conservés jusqu'à la résolution de ces conflits.
  • Une dégradation des performances car IBM Cloudant prend plus de temps à répondre à chaque demande car il doit passer en revue tous les documents en conflit pour trouver la "meilleure version possible".

Comment résoudre les conflits ?

Une fois que vous avez trouvé un conflit, effectuez les quatre étapes ci-dessous pour les résoudre.

  1. Obtenir les révisions en conflit.
  2. Fusionner ces révisions dans votre application ou demander au propriétaire ce qu'il souhaite faire.
  3. Télécharger la nouvelle révision.
  4. Supprimer les anciennes révisions.