{"id":3584,"date":"2017-05-25T02:00:18","date_gmt":"2017-05-25T09:00:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3584"},"modified":"2025-06-13T18:46:08","modified_gmt":"2025-06-14T01:46:08","slug":"conflict-resolution-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/conflict-resolution-couchbase-mobile\/","title":{"rendered":"Desmitificaci\u00f3n de la resoluci\u00f3n de conflictos en Couchbase Mobile"},"content":{"rendered":"<p>Los conflictos pueden producirse en entornos de replicaci\u00f3n en los que un documento puede ser actualizado simult\u00e1neamente por uno o m\u00e1s escritores. Esto es especialmente com\u00fan en entornos m\u00f3viles en los que las conexiones de red poco fiables pueden provocar que los cambios simult\u00e1neos de varios dispositivos no se sincronicen de manera oportuna, dando lugar a conflictos.<\/p>\n<p>En este post, discutimos los fundamentos de c\u00f3mo se manejan los conflictos en Couchbase Mobile y esbozamos el papel de las aplicaciones en la resoluci\u00f3n de conflictos. En un pr\u00f3ximo post, trataremos un tema relacionado con la gesti\u00f3n de \u00e1rboles de revisi\u00f3n y tama\u00f1os de bases de datos en un sistema de gesti\u00f3n de documentos basado en revisiones.<\/p>\n<p>El proceso de resoluci\u00f3n de conflictos discutido en este blog se aplica a Couchbase Mobile 1.x. Por favor, echa un vistazo a este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/document-conflicts-couchbase-mobile\/\">Correo electr\u00f3nico:<\/a> sobre los detalles del proceso autom\u00e1tico de resoluci\u00f3n de conflictos en Couchbase Mobile 2.x. Consulte nuestro <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#custom-conflict-resolution\">documentaci\u00f3n<\/a> para una discusi\u00f3n sobre la resoluci\u00f3n de conflictos personalizada en Couchbase Mobile 2.x.<\/p>\n<p><!--more--><br \/>\nLa siguiente ilustraci\u00f3n describe un escenario en el que pueden producirse conflictos en entornos m\u00f3viles<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3629\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflict-basics-1.png\" alt=\"Basics of how conflicts created\" width=\"663\" height=\"522\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics-1.png 794w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics-1-300x236.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics-1-768x605.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics-1-20x16.png 20w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>Fondo<\/h2>\n<p>En <a href=\"https:\/\/developer.couchbase.com\/mobile\">Couchbase M\u00f3vil <\/a>incluye la pila <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/couchbase-lite\/index.html\">Couchbase Lite<\/a> base de datos integrada que se ejecuta localmente en los dispositivos y <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/guides\/sync-gateway\/index.html\">Pasarela de sincronizaci\u00f3n<\/a> en la nube que suele estar respaldada por <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/introduction\/intro.html\">Servidor Couchbase <\/a>persistencia de los datos en la nube. La pasarela de sincronizaci\u00f3n se encarga de replicar los documentos entre los dispositivos. Es concebible que un documento pueda ser actualizado por varios dispositivos al mismo tiempo.<\/p>\n<p>&nbsp;<\/p>\n<h2>Control de concurrencia multiversi\u00f3n<\/h2>\n<p>Couchbase Mobile utiliza la t\u00e9cnica Multi Version Concurrency Control (MVCC) para manejar conflictos. En este m\u00e9todo, a cada documento se le asigna un \u00fanico ID de revisi\u00f3n generado por el sistema. Este ID es adicional al ID del documento, que permanece igual en todas las revisiones del documento. Cada cambio en un documento, ya sea una modificaci\u00f3n o una eliminaci\u00f3n, se trata como una nueva revisi\u00f3n del documento y, por lo tanto, se le asigna un nuevo ID de revisi\u00f3n.<\/p>\n<h3>\u00c1rbol de revisi\u00f3n<\/h3>\n<p>Cada vez que se va a realizar un cambio en un documento existente, el escritor debe incluir el ID de revisi\u00f3n de la revisi\u00f3n actual del documento que se est\u00e1 actualizando. Se crea una nueva revisi\u00f3n para el cambio y se a\u00f1ade como nodo hijo a la revisi\u00f3n actual que se estaba actualizando, dando lugar a un \u00c1rbol de Revisi\u00f3n para el documento.<\/p>\n<h3><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3632\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/revision-tree-latest.png\" alt=\"\" width=\"186\" height=\"235\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/revision-tree-latest.png 186w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/revision-tree-latest-16x20.png 16w\" sizes=\"auto, (max-width: 186px) 100vw, 186px\" \/><\/h3>\n<p>Cada documento tiene asociado un \u00e1rbol de revisi\u00f3n que crece a lo largo de la vida del documento. En una pr\u00f3xima entrada hablaremos de t\u00e9cnicas para gestionar el tama\u00f1o del \u00e1rbol.<\/p>\n<h3>Estructura del documento<\/h3>\n<p>A un nivel muy alto, cada documento en Couchbase Mobile V1.4 se compone de un ID de documento, ID de revisi\u00f3n actual, cuerpo JSON y Metadatos. Los metadatos, entre otras cosas, contienen el historial de revisiones del documento. Los Metadatos son un concepto \"entre bastidores\", y las aplicaciones de usuario no deber\u00edan preocuparse por ellos.  De hecho, en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=316854429&amp;utm_term=%2Bcouchbase&amp;utm_content=&amp;_bt=192327536059&amp;_bm=b&amp;_bn=g&amp;gclid=CNvv9Y7ihtQCFUlMDQodPn4Ejw\">versi\u00f3n futura<\/a> de Couchbase, los metadatos se mover\u00e1n fuera del documento completamente y dentro de un XATTR.<\/p>\n<p>Adem\u00e1s, cada revisi\u00f3n de documento tiene asociado un valor TTL (que por defecto es de 5 minutos).<\/p>\n<h3>Revisiones de l\u00e1pidas<\/h3>\n<p>En un sistema basado en MVCC, cada actualizaci\u00f3n, incluida una operaci\u00f3n de borrado, crea una revisi\u00f3n del documento.  Las revisiones borradas se denominan revisiones \"Tombstone\". Una revisi\u00f3n borrada es esencialmente una revisi\u00f3n especial que tiene la propiedad \"_deleted\" a true. Las revisiones de borrado se replican.  Estas revisiones son especiales en el sentido de que si haces una consulta en Couchbase Lite, no ser\u00e1n devueltas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3593\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/revision-tree-2.png\" alt=\"Revision Tombstone\" width=\"267\" height=\"422\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/revision-tree-2.png 267w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/revision-tree-2-190x300.png 190w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/revision-tree-2-13x20.png 13w\" sizes=\"auto, (max-width: 267px) 100vw, 267px\" \/><\/p>\n<h3>Estructura del ID de revisi\u00f3n<\/h3>\n<p>Un ID de revisi\u00f3n tiene el formato <em>\"-\"<\/em><\/p>\n<ul>\n<li>\u00a0\u00a0<em>ID de generaci\u00f3n (nueva revisi\u00f3n) = ID de generaci\u00f3n (padre de la revisi\u00f3n) + 1<\/em><\/li>\n<\/ul>\n<p>La primera revisi\u00f3n que se crea cuando se crea un documento tiene un ID de generaci\u00f3n de 1<\/p>\n<ul>\n<li>contenido hash ID =\u00a0 <em>hash calculado a partir del contenido de la revisi\u00f3n<\/em><\/li>\n<\/ul>\n<p>Esto implica que dos revisiones de un documento con id\u00e9ntico contenido tendr\u00e1n el mismo ID hash de contenido.<\/p>\n<p><em>Nota<\/em>: Como optimizaci\u00f3n, si dos escritores hacen cambios id\u00e9nticos a un documento simult\u00e1neamente, resultando en dos revisiones entrantes con el mismo ID de revisi\u00f3n, Couchbase Mobile s\u00f3lo almacenar\u00e1 una \u00fanica revisi\u00f3n.<\/p>\n<h2>\u00a0Conflictos<\/h2>\n<p>En un sistema basado en MVCC, se produce un conflicto si el sistema encuentra una bifurcaci\u00f3n en el \u00e1rbol. De la discusi\u00f3n sobre los \u00e1rboles de revisi\u00f3n, se puede deducir que \u00e9ste ser\u00eda el caso cuando hay dos o m\u00e1s nodos hoja en el \u00e1rbol.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3594\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflict-branch-1.png\" alt=\"conflict branch\" width=\"539\" height=\"353\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-branch-1.png 539w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-branch-1-300x196.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-branch-1-20x13.png 20w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/p>\n<h3>Revisi\u00f3n actual<\/h3>\n<p>Cuando ocurre un conflicto, Couchbase Mobile a\u00fan necesita seleccionar un \"ganador\" o \"Revisi\u00f3n Actual\" entre los nodos hoja en conflicto. Elegir un ganador no implica que el conflicto est\u00e9 resuelto.<\/p>\n<p>Couchbase Mobile elige un ganador de forma determinista. Debido a la naturaleza determinista del proceso, no es necesario que los nodos de Couchbase Mobile se comuniquen entre s\u00ed para elegir a los ganadores: todos eligen al mismo utilizando los siguientes criterios<\/p>\n<h4>Caso 1 : Todas las revisiones de hojas no se borran<\/h4>\n<ul>\n<li>La ganadora es la revisi\u00f3n no eliminada de la rama de revisi\u00f3n m\u00e1s larga.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3595\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflicts-explained.png\" alt=\"current revision - case1\" width=\"363\" height=\"552\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained.png 363w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-197x300.png 197w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-300x456.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-13x20.png 13w\" sizes=\"auto, (max-width: 363px) 100vw, 363px\" \/><\/p>\n<h4>Caso 2: Se suprimen todas las revisiones de las hojas<\/h4>\n<p>La ganadora es la revisi\u00f3n hoja eliminada en la rama de revisi\u00f3n m\u00e1s larga<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3596\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/winner-2.png\" alt=\"conflict resolution -case2\" width=\"363\" height=\"550\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-2.png 363w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-2-198x300.png 198w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-2-300x455.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-2-13x20.png 13w\" sizes=\"auto, (max-width: 363px) 100vw, 363px\" \/><\/p>\n<h4>Caso 3: Algunas revisiones de hojas se borran y otras no.<\/h4>\n<p>La ganadora es la revisi\u00f3n no eliminada de la rama de revisi\u00f3n m\u00e1s larga.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3597\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflicts-explained-2.png\" alt=\"conflict resolution case3\" width=\"363\" height=\"562\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-2.png 363w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-2-194x300.png 194w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-2-300x464.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflicts-explained-2-13x20.png 13w\" sizes=\"auto, (max-width: 363px) 100vw, 363px\" \/><\/p>\n<h4>Caso 4: Hay empate<\/h4>\n<p>El ganador es aquel cuyo ID de revisi\u00f3n se ordena m\u00e1s alto en una simple comparaci\u00f3n ASCII<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3598\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/winner-3.png\" alt=\"conflict resolution - case 4\" width=\"446\" height=\"492\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-3.png 446w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-3-272x300.png 272w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-3-300x331.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/winner-3-18x20.png 18w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><\/p>\n<h2>Resoluci\u00f3n de conflictos<\/h2>\n<h3>\u00bfQui\u00e9n debe gestionar los conflictos?<\/h3>\n<p>Aunque Couchbase Mobile escoge una Revisi\u00f3n Actual entre las revisiones en conflicto, en \u00faltima instancia es responsabilidad de la aplicaci\u00f3n resolver los conflictos por las siguientes razones -<\/p>\n<ul>\n<li>La elecci\u00f3n del ganador entre revisiones conflictivas puede basarse en criterios distintos a los que el Sistema utiliza para elegir un ganador de forma determinista. La revisi\u00f3n actual seleccionada por Couchbase puede no ser la elecci\u00f3n correcta para la aplicaci\u00f3n.<\/li>\n<li>No hay un claro ganador entre las resoluciones en conflicto. As\u00ed que, en este caso, puede ser necesario fusionar los cambios de las revisiones en conflicto. Los detalles de una fusi\u00f3n dependen de la sem\u00e1ntica de la aplicaci\u00f3n.<\/li>\n<li>Incluso si la aplicaci\u00f3n decide ir con la revisi\u00f3n que Couchbase eligi\u00f3 como ganadora, recuerda que las revisiones en conflicto a\u00fan permanecen en la base de datos. Por lo tanto, la aplicaci\u00f3n debe borrar las revisiones no ganadoras del \u00e1rbol de revisiones para prevenir que el \u00e1rbol de revisiones crezca mucho con revisiones conflictivas sin usar. Esto se discutir\u00e1 en profundidad en un pr\u00f3ximo post.<\/li>\n<\/ul>\n<h3>Opciones para resolver conflictos<\/h3>\n<p>Hay dos opciones para tratar los conflictos<\/p>\n<h4>Opci\u00f3n 1: Elegir una revisi\u00f3n entre revisiones contradictorias<\/h4>\n<p>En esta opci\u00f3n, una de las revisiones en conflicto como el ganador y \"l\u00e1pida\" el resto.<\/p>\n<p>La aplicaci\u00f3n puede retener la \"Revisi\u00f3n Actual\" elegida por Couchbase como ganadora o puede elegir una revisi\u00f3n diferente entre las revisiones en conflicto. En cualquier caso, es importante borrar las revisiones no ganadoras para que puedan ser purgadas durante la compactaci\u00f3n de la base de datos como se discute en la siguiente secci\u00f3n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3599\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflict-resolution-1-2.png\" alt=\"conflict resolution with tombstone\" width=\"432\" height=\"398\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-1-2.png 432w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-1-2-300x276.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-1-2-20x18.png 20w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><\/p>\n<h4>Opci\u00f3n 2: N-way-merge<\/h4>\n<p>En esta opci\u00f3n, los cambios de las revisiones en conflicto se fusionan seg\u00fan la sem\u00e1ntica de la aplicaci\u00f3n. Las fusiones van a una nueva revisi\u00f3n que se convierte en la revisi\u00f3n actual\/ganadora. La rama no ganadora se elimina.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3631\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/conflict-resolution-merge.png\" alt=\"conflict resolution- n way merge\" width=\"388\" height=\"393\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge.png 388w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge-296x300.png 296w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge-65x65.png 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge-50x50.png 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge-300x304.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-resolution-merge-20x20.png 20w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><\/p>\n<h3>\u00bfY si no se resuelven los conflictos?<\/h3>\n<p>Si una aplicaci\u00f3n decide ir con el ganador elegido por Couchbase Mobile y no resuelve expl\u00edcitamente los conflictos, puede acabar con un \u00e1rbol de revisi\u00f3n con un gran n\u00famero de ramas y nodos hoja. Esto tendr\u00e1 consecuencias indeseables en el tama\u00f1o del documento y, en consecuencia, en el tama\u00f1o de la base de datos. Couchbase Mobile tiene procesos autom\u00e1ticos para aliviar algo de esto, pero la aplicaci\u00f3n es en \u00faltima instancia responsable de asegurar que las revisiones de hoja no deseadas sean tombstoned.<\/p>\n<p>Discutiremos los detalles de la gesti\u00f3n de la base de datos y del \u00e1rbol de revisiones en un pr\u00f3ximo post, as\u00ed que permanezca atento.<\/p>\n<h2>\u00bfY ahora qu\u00e9?<\/h2>\n<p>Este post fue una introducci\u00f3n al sistema de control de concurrencia en Couchbase Mobile. Una consideraci\u00f3n importante en un sistema basado en MVCC es gestionar el tama\u00f1o de los \u00e1rboles de revisi\u00f3n y evitar que se hinchen. Este aspecto ser\u00e1 discutido en un pr\u00f3ximo post.<\/p>\n<p>Si tiene alguna pregunta o sugerencia, deje un comentario a continuaci\u00f3n o p\u00f3ngase en contacto conmigo en Twitter <a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a> o env\u00edeme un correo electr\u00f3nico <a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.  En\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a>\u00a0son otro buen lugar para plantear preguntas.<\/p>\n<p>Por \u00faltimo, un r\u00e1pido agradecimiento a\u00a0<a href=\"mailto:traun@couchbase.com\">Traun Leyden<\/a> y <a href=\"mailto:sachin.smotra@couchbase.com\">Sachin Smotra<\/a>\u00a0por sus aportaciones a este post.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.\u00a0This is especially common in mobile environments wherein unreliable network connections may result in concurrent changes from multiple devices not being synchronized in [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":3585,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,1810],"tags":[1980,1968,1981,1725],"ppma_author":[8948],"class_list":["post-3584","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-mobile","tag-conflict-resolution","tag-embedded-database","tag-mvcc","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Conflict Resolution in Multi Version Concurrency Control System<\/title>\n<meta name=\"description\" content=\"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/conflict-resolution-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Demystifying Conflict Resolution in Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/conflict-resolution-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-25T09:00:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T01:46:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png\" \/>\n\t<meta property=\"og:image:width\" content=\"787\" \/>\n\t<meta property=\"og:image:height\" content=\"522\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Demystifying Conflict Resolution in Couchbase Mobile\",\"datePublished\":\"2017-05-25T09:00:18+00:00\",\"dateModified\":\"2025-06-14T01:46:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/\"},\"wordCount\":1344,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png\",\"keywords\":[\"conflict resolution\",\"embedded database\",\"MVCC\",\"NoSQL Database\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Mobile\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/\",\"name\":\"Conflict Resolution in Multi Version Concurrency Control System\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png\",\"datePublished\":\"2017-05-25T09:00:18+00:00\",\"dateModified\":\"2025-06-14T01:46:08+00:00\",\"description\":\"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png\",\"width\":787,\"height\":522,\"caption\":\"Conflict Resolution\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Demystifying Conflict Resolution in Couchbase Mobile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Conflict Resolution in Multi Version Concurrency Control System","description":"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/conflict-resolution-couchbase-mobile\/","og_locale":"es_MX","og_type":"article","og_title":"Demystifying Conflict Resolution in Couchbase Mobile","og_description":"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/conflict-resolution-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-05-25T09:00:18+00:00","article_modified_time":"2025-06-14T01:46:08+00:00","og_image":[{"width":787,"height":522,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Demystifying Conflict Resolution in Couchbase Mobile","datePublished":"2017-05-25T09:00:18+00:00","dateModified":"2025-06-14T01:46:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/"},"wordCount":1344,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png","keywords":["conflict resolution","embedded database","MVCC","NoSQL Database"],"articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Mobile"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/","name":"Conflict Resolution in Multi Version Concurrency Control System","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png","datePublished":"2017-05-25T09:00:18+00:00","dateModified":"2025-06-14T01:46:08+00:00","description":"Conflicts can occur in replication environments where a document can be updated concurrently by one or more writers.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/conflict-basics.png","width":787,"height":522,"caption":"Conflict Resolution"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/conflict-resolution-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Demystifying Conflict Resolution in Couchbase Mobile"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Directora de Gesti\u00f3n de Productos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3584"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3584\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/3585"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3584"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}