{"id":7744,"date":"2019-10-16T13:14:44","date_gmt":"2019-10-16T20:14:44","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7744"},"modified":"2025-06-13T20:52:21","modified_gmt":"2025-06-14T03:52:21","slug":"best-practices-couchbase-mobile-database-sync-part2","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/best-practices-couchbase-mobile-database-sync-part2\/","title":{"rendered":"Mejores pr\u00e1cticas y patrones con Couchbase Mobile - Parte 2"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/mobile\/\">Couchbase M\u00f3vil<\/a> permite una amplia gama de casos de uso offline-first de diversos grados de escala y complejidad. En un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/best-practices-common-patterns-couchbase-mobile-part1\/\">Correo electr\u00f3nico:<\/a>En el blog de Couchbase Lite, discut\u00ed patrones comunes al usar Couchbase Lite como almac\u00e9n de datos NoSQL integrado en tus aplicaciones. Esos patrones se centraron en el almacenamiento local de datos. En esta entrada del blog, discutimos algunos patrones comunes y las mejores pr\u00e1cticas en lo que respecta a la sincronizaci\u00f3n de datos con el <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/introduction.html\">Pasarela de sincronizaci\u00f3n<\/a>. Este post asume que est\u00e1s familiarizado con los fundamentos de Couchbase Mobile. Si necesitas una introducci\u00f3n, consulta la documentaci\u00f3n en <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/introduction.html\">Couchbase Lite<\/a> y <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/index.html\">Pasarela de sincronizaci\u00f3n<\/a>.<\/p>\n<h3 id=\"pattern1:keepingthedataup-to-syncwhileappisinthebackground\">Patr\u00f3n 1: Mantener los datos sincronizados mientras la aplicaci\u00f3n est\u00e1 en segundo plano<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/09\/background-sync-e1567893400788.png\" alt=\"couchbase mobile app background\" \/><\/figure>\n<p>El soporte de aplicaciones m\u00f3viles en segundo plano var\u00eda dr\u00e1sticamente seg\u00fan la plataforma. De hecho, en ciertas plataformas como Android, el concepto de \"aplicaciones en segundo plano\" es bastante nebuloso\/complicado. As\u00ed que c\u00f3mo sincronizar datos mientras tu aplicaci\u00f3n est\u00e1 en segundo plano depende mucho de la plataforma. Puedes encontrar una discusi\u00f3n sobre c\u00f3mo Couchbase Lite reacciona al ciclo de vida de la aplicaci\u00f3n en <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-status-and-app-life-cycle\">iOS<\/a>, <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/java.html#replication-status-and-app-life-cycle\">Android<\/a> y <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/csharp.html#replication-status-and-app-life-cycle\">Windows<\/a> en nuestra documentaci\u00f3n.<\/p>\n<ul>\n<li><strong>Caso pr\u00e1ctico<\/strong><\/li>\n<\/ul>\n<p>Al mantener los datos actualizados cuando no est\u00e1n en uso activo (o en primer plano), las aplicaciones pueden mejorar la experiencia del usuario final reduciendo el tiempo de arranque en posteriores lanzamientos.<\/p>\n<ul>\n<li><strong>Ac\u00e9rquese a<\/strong>\n<ul>\n<li>Hay que tener en cuenta que no hay garant\u00eda de que se permita a tu aplicaci\u00f3n ejecutarse en segundo plano. Eso suele ser una decisi\u00f3n a nivel de sistema o a nivel de usuario.<\/li>\n<li>La forma en que una aplicaci\u00f3n gestiona la sincronizaci\u00f3n en segundo plano depende de la plataforma<\/li>\n<li>Por lo general, se recomienda que, siempre que sea posible, la aplicaci\u00f3n reaccione a los eventos adecuados del ciclo de vida de la aplicaci\u00f3n y cierre el replicador antes de pasar a segundo plano.<\/li>\n<li><strong>iOS<\/strong>\n<ul>\n<li>Las r\u00e9plicas continuas pasan a modo offline cuando la aplicaci\u00f3n pasa a segundo plano.<\/li>\n<li>Utilice <a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/NetworkingInternet\/Conceptual\/RemoteNotificationsPG\/APNSOverview.html#\/\/apple_ref\/doc\/uid\/TP40008194-CH8-SW1\">Servicio de notificaciones push de Apple (APNS)<\/a> para enviar un <a href=\"https:\/\/developer.apple.com\/documentation\/usernotifications\/setting_up_a_remote_notification_server\/pushing_updates_to_your_app_silently\">notificaci\u00f3n silenciosa<\/a> para activar la aplicaci\u00f3n en segundo plano o utilizar <a href=\"https:\/\/developer.apple.com\/documentation\/uikit\/core_app\/managing_your_app_s_life_cycle\/preparing_your_app_to_run_in_the_background\/updating_your_app_with_background_app_refresh\">Actualizaci\u00f3n de la aplicaci\u00f3n en segundo plano<\/a> para permitir que el sistema despierte oportunamente la aplicaci\u00f3n<\/li>\n<li>Cuando la aplicaci\u00f3n se activa en segundo plano, realiza una replicaci\u00f3n \u00fanica para sincronizar los datos.<\/li>\n<li>M\u00e1s informaci\u00f3n sobre el soporte de fondo en iOS en este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/background-sync-couchbase-mobile-ios\/\">entrada del blog<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Android<\/strong>\n<ul>\n<li>Hay un par de opciones disponibles si las aplicaciones tienen que ejecutar tareas en segundo plano\n<ul>\n<li>Utilice <a href=\"https:\/\/developer.android.com\/guide\/components\/services\">Servicio de primer plano<\/a> para r\u00e9plicas de larga duraci\u00f3n en segundo plano<\/li>\n<li>Utilice <a href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/workmanager\">Jefe de trabajo<\/a> para programar r\u00e9plicas \u00fanicas que se ejecuten de forma as\u00edncrona en segundo plano o utilizar Remote <a href=\"https:\/\/firebase.google.com\/docs\/cloud-messaging\/\">Mensajer\u00eda en la nube Firebase (FCM)<\/a> iniciar una solicitud de trabajo para ejecutar una replicaci\u00f3n \u00fanica<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>UWP<\/strong>\n<ul>\n<li>Las r\u00e9plicas continuas no pasan a modo offline cuando una aplicaci\u00f3n pasa a segundo plano. No obstante, se recomienda que las aplicaciones cierren el replicador cuando pasen a segundo plano.<\/li>\n<li>Utilice <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/shell\/tiles-and-notifications\/raw-notification-overview\">notificaciones brutas<\/a> enviado a trav\u00e9s de <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/shell\/tiles-and-notifications\/windows-push-notification-services--wns--overview\">Servicio de notificaciones push de Windows (WPNS)<\/a> para activar la aplicaci\u00f3n en segundo plano<\/li>\n<li>Cuando la aplicaci\u00f3n se active en segundo plano, programe una tarea en segundo plano para realizar una replicaci\u00f3n \u00fanica y sincronizar los datos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern2:purgeafterpush\">Patr\u00f3n 2: Purga tras empuje<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/09\/purge-after-push-2-e1567895071699.png\" alt=\"clear local database after syncing data\" \/><\/figure>\n<p>Couchbase Lite permite que las aplicaciones reciban notificaciones sobre el estado de replicaci\u00f3n de un documento o conjunto de documentos a trav\u00e9s de <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Eventos de replicaci\u00f3n<\/a> capacidad. Las aplicaciones pueden aprovechar esta capacidad para tomar las medidas oportunas sobre el documento en funci\u00f3n de su estado, por ejemplo, eliminarlo.<\/p>\n<ul>\n<li><strong>Caso pr\u00e1ctico<\/strong><\/li>\n<\/ul>\n<p>Puede ser conveniente eliminar los documentos del almac\u00e9n local del cliente una vez sincronizados con el servidor, por motivos de cumplimiento de la normativa o para evitar la sobrecarga de la base de datos local.<\/p>\n<ul>\n<li><strong>Ac\u00e9rquese a<\/strong>\n<ul>\n<li>Reg\u00edstrese en <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Evento de replicaci\u00f3n<\/a> observador en Replicator<\/li>\n<li>Al recibir <code>onPushed<\/code> en los documentos, invoque <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/Database.html#\/s:18CouchbaseLiteSwift8DatabaseC13purgeDocument6withIDySS_tKF\">purgar()<\/a> API para eliminar documentos. Los documentos eliminados no se sincronizan.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern3:enforcingserversidedocumentlifespanondisconnectedclients\">Patr\u00f3n 3: Aplicaci\u00f3n de la vida \u00fatil de los documentos en el servidor a clientes desconectados<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/09\/docexpiration-e1567913583132.png\" alt=\"Set local TTL on documents\" \/><\/figure>\n<p>Couchbase Lite permite a las aplicaciones establecer fechas de caducidad en documentos locales a trav\u00e9s de <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/Database.html#\/s:18CouchbaseLiteSwift8DatabaseC21setDocumentExpiration6withID10expirationySS_10Foundation4DateVSgtKF\">Fecha de expiraci\u00f3n<\/a> funci\u00f3n. Las aplicaciones pueden aprovechar esta capacidad para caducar localmente un documento en Couchbase Lite independientemente de la conectividad con el servidor.<\/p>\n<ul>\n<li><strong>Caso pr\u00e1ctico<\/strong><\/li>\n<\/ul>\n<p>Los documentos creados en el servidor pueden asociarse a un TTL o fecha de caducidad que dicta cu\u00e1ndo debe purgarse el documento del sistema (clientes y servidor). Cuando haya conectividad de red, los documentos eliminados en el servidor se sincronizar\u00e1n con el cliente, de modo que tambi\u00e9n se eliminar\u00e1n en el cliente. Sin embargo, es probable que los clientes est\u00e9n desconectados cuando los documentos caduquen en el servidor y puede ser importante que estos documentos se eliminen de los clientes en el momento oportuno.<\/p>\n<ul>\n<li><strong>Ac\u00e9rquese a<\/strong>\n<ul>\n<li>Modele sus documentos para incluir una propiedad definida por el usuario que especifique la hora UTC en la que expira el documento. Llam\u00e9mosla <em>v\u00e1lidoHasta<\/em>.<\/li>\n<li>Reg\u00edstrese en <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Evento de replicaci\u00f3n<\/a> observador en el cliente Replicante<\/li>\n<li>Al recibir <code>Tire de<\/code> en documento(s), utilice el bot\u00f3n <em>v\u00e1lidoHasta<\/em> para establecer el TTL de los documentos que utilizan la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#document-expiration\">setFechaCaducidad()<\/a> API<\/li>\n<li>Cuando los documentos caducan en el cliente, se purgan autom\u00e1ticamente del cliente independientemente de la conectividad de red. Los documentos purgados no se sincronizan.<\/li>\n<li>En el lado del servidor, los documentos pueden purgarse independientemente<\/li>\n<li><strong>Advertencia:<\/strong> : Si la fecha de caducidad (definida por <em>v\u00e1lidoHasta<\/em> ) se actualiza mientras los clientes est\u00e1n desconectados, los clientes no ser\u00e1n notificados de este cambio. Por lo tanto, es posible que los documentos se eliminen prematuramente en los clientes cuando no est\u00e1n conectados. Por lo tanto, este m\u00e9todo es seguro siempre que la vida \u00fatil del documento no cambie despu\u00e9s de su creaci\u00f3n. Vamos a discutir otro enfoque para manejar estos casos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern4:controllingwhenandwhatdocumentsgetsyncedtoserver\">Patr\u00f3n 4: Controlar cu\u00e1ndo y qu\u00e9 documentos se sincronizan con el servidor<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/10\/replication-filter-2.png\" alt=\"controlling documents that get pushed to server\" \/><\/figure>\n<p>Couchbase Lite permite que las aplicaciones establezcan par\u00e1metros muy precisos <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-filters\">filtros<\/a> en el replicador que determina qu\u00e9 documentos se env\u00edan al servidor. Esta capacidad puede aprovecharse para controlar cu\u00e1ndo y qu\u00e9 documentos se sincronizan con el servidor.<\/p>\n<ul>\n<li><strong>Caso pr\u00e1ctico<\/strong><\/li>\n<\/ul>\n<p>En una <a href=\"https:\/\/www.couchbase.com\/blog\/es\/best-practices-common-patterns-couchbase-mobile-part1\/\">blog<\/a>En el art\u00edculo anterior, hablamos de c\u00f3mo se puede utilizar una instancia separada de una base de datos para almacenar datos locales. Aunque este patr\u00f3n funciona cuando se necesita una segregaci\u00f3n estricta de los datos y si no se requieren consultas de uni\u00f3n entre bases de datos, hay casos de uso en los que se desea un control detallado sobre <em>cuando<\/em> los cambios locales deben ser sincronizados. Tambi\u00e9n puede utilizar este patr\u00f3n como alternativa al patr\u00f3n de base de datos pre-construida con el fin de hacer cumplir que los documentos son s\u00f3lo locales (es decir, nunca sincronizados).<\/p>\n<ul>\n<li><strong>Ac\u00e9rquese a<\/strong>\n<ul>\n<li>Modele sus documentos para incluir un <em>\"status\"<\/em> que controla el flujo de trabajo empresarial. Por ejemplo, utilice un valor de <em>\"en curso\"<\/em> para indicar cuando los cambios no est\u00e1n listos para ser sincronizados y un valor de estado de <em>\"comprometido\"<\/em> cuando sea necesario subir los cambios. Si necesita hacer que los documentos sean s\u00f3lo locales, utilice un archivo <em>\"\u00e1mbito\"<\/em> con un valor de <em>\"local\"<\/em> para indicar que los documentos no deben sincronizarse<\/li>\n<li>Configurar adecuado <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-filters\">Filtro de replicaci\u00f3n<\/a> en el replicador. El filtro debe inspeccionar la propiedad del documento (como se ha definido anteriormente) para determinar si un documento necesita ser sincronizado o no<\/li>\n<li>Cada vez que hay cambios listos para ser enviados, el replicador de Couchbase Lite aplica la funci\u00f3n de filtrado y los documentos se sincronizan s\u00f3lo si se cumplen los criterios de filtrado.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern5:controllingthepriorityorderofinitialsetofdocumentssyncedtotheclient\">Patr\u00f3n 5: Control del orden de prioridad del conjunto inicial de documentos sincronizados con el cliente<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/09\/channel-assignment-e1568069916997.png\" alt=\"sync gateway channel priority\" \/><\/figure>\n<p>Pasarela de sincronizaci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/data-routing.html\">canales<\/a> permiten a las aplicaciones separar los datos en funci\u00f3n de su tipo, finalidad, permisos de control de acceso, etc. Esto puede aprovecharse para separar los datos en funci\u00f3n de su prioridad.<\/p>\n<ul>\n<li><strong>Caso pr\u00e1ctico<\/strong><\/li>\n<\/ul>\n<p>La capacidad de priorizar los documentos recibidos por los clientes garantizar\u00eda que \u00e9stos pudieran ponerse en marcha con los cambios documentales m\u00e1s relevantes en cuanto se hubieran extra\u00eddo sin tener que esperar a que el resto de los documentos se sincronizaran. Los cambios restantes, de menor prioridad, se descargan m\u00e1s tarde. Esto reduce los tiempos de respuesta de la aplicaci\u00f3n en el arranque inicial.<\/p>\n<ul>\n<li><strong>Ac\u00e9rquese a<\/strong>\n<ul>\n<li>Asigne documentos a distintos canales en funci\u00f3n de su prioridad. Por ejemplo, puede asignar documentos a canales de prioridad \"baja\", \"media\" o \"alta\".<\/li>\n<li>En el lado del cliente, en el lanzamiento inicial, realice una replicaci\u00f3n pull de una sola vez del canal de mayor prioridad especificando el par\u00e1metro <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/ReplicatorConfiguration.html#\/s:18CouchbaseLiteSwift23ReplicatorConfigurationC8channelsSaySSGSgvp\">canales<\/a> filtro. Una vez que la sincronizaci\u00f3n de los documentos en el canal <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-status\">completa<\/a>la aplicaci\u00f3n puede iniciar otra replicaci\u00f3n para los canales restantes.<\/li>\n<li>Tambi\u00e9n puede configurar un replicador continuo para el canal de mayor prioridad y extraer los canales restantes s\u00f3lo bajo demanda utilizando la replicaci\u00f3n de una sola vez. Esto garantizar\u00e1 que el canal de mayor prioridad se mantenga sincronizado en tiempo real.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"whatnext\">\u00bfQu\u00e9 sigue?<\/h2>\n<p>En este post, cubrimos algunos patrones de uso comunes en Couchbase Lite relacionados con la sincronizaci\u00f3n de datos hacia y desde Sync Gateway y el servidor Couchbase. Seguiremos publicando posts describiendo otros consejos y recomendaciones para resolver casos de uso comunes.<br \/>\nSi tiene alguna pregunta o sugerencia, deje un comentario a continuaci\u00f3n o p\u00f3ngase en contacto conmigo en\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">Twitter<\/a>\u00a0o <a href=\"mailto:\/\/priya.rajagopal@couchbase.com\">correo electr\u00f3nico<\/a> me .  El\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a> son otro buen lugar para plantear preguntas.<\/p>\n<h2 id=\"acknowledgments\">Agradecimientos<\/h2>\n<p>Me gustar\u00eda agradecer las contribuciones del equipo de desarrollo de Couchbase Lite y Sync Gateway, en concreto <a href=\"https:\/\/github.com\/adamcfraser\">Adam Fraser<\/a> y <a href=\"https:\/\/github.com\/borrrden\">Jim Borden<\/a> por su rese\u00f1a de la entrada del blog.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase Mobile enables a wide range of offline-first use cases of varying degrees of scale and complexity. In an earlier post, I discussed common patterns while using Couchbase Lite as embedded NoSQL data store within your apps. Those patterns focused [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":7748,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2370,1814,1815,7667,1810,2389,2366],"tags":[2004,2358,1572,1536,1725,2348,2349],"ppma_author":[8948],"class_list":["post-7744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-application-design","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-solutions","category-sync-gateway","tag-couchbase-mobile-2-0","tag-couchbase-mobile-2-x","tag-database","tag-ios","tag-nosql-database","tag-uwp","tag-xamarin"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Best Practices and Patterns with Couchbase Mobile - Part 2 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"We discuss a few common patterns and best practices as it relates to storing and syncing data between mobile apps and cloud using Couchbase Mobile\" \/>\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\/best-practices-couchbase-mobile-database-sync-part2\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Best Practices and Patterns with Couchbase Mobile - Part 2\" \/>\n<meta property=\"og:description\" content=\"We discuss a few common patterns and best practices as it relates to storing and syncing data between mobile apps and cloud using Couchbase Mobile\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/best-practices-couchbase-mobile-database-sync-part2\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-16T20:14:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:52:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png\" \/>\n\t<meta property=\"og:image:width\" content=\"396\" \/>\n\t<meta property=\"og:image:height\" content=\"308\" \/>\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=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Best Practices and Patterns with Couchbase Mobile &#8211; Part 2\",\"datePublished\":\"2019-10-16T20:14:44+00:00\",\"dateModified\":\"2025-06-14T03:52:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\"},\"wordCount\":1449,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png\",\"keywords\":[\"couchbase mobile 2.0\",\"couchbase mobile 2.x\",\"database\",\"ios\",\"NoSQL Database\",\"uwp\",\"xamarin\"],\"articleSection\":[\"Android\",\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Solutions\",\"Sync Gateway\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\",\"name\":\"Best Practices and Patterns with Couchbase Mobile - Part 2 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png\",\"datePublished\":\"2019-10-16T20:14:44+00:00\",\"dateModified\":\"2025-06-14T03:52:21+00:00\",\"description\":\"We discuss a few common patterns and best practices as it relates to storing and syncing data between mobile apps and cloud using Couchbase Mobile\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png\",\"width\":396,\"height\":308,\"caption\":\"Couchbase Mobile Sync\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Best Practices and Patterns with Couchbase Mobile &#8211; Part 2\"}]},{\"@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":"Best Practices and Patterns with Couchbase Mobile - Part 2 - The Couchbase Blog","description":"Discutimos algunos patrones comunes y las mejores pr\u00e1cticas en relaci\u00f3n con el almacenamiento y sincronizaci\u00f3n de datos entre aplicaciones m\u00f3viles y la nube utilizando Couchbase Mobile.","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\/best-practices-couchbase-mobile-database-sync-part2\/","og_locale":"es_MX","og_type":"article","og_title":"Best Practices and Patterns with Couchbase Mobile - Part 2","og_description":"We discuss a few common patterns and best practices as it relates to storing and syncing data between mobile apps and cloud using Couchbase Mobile","og_url":"https:\/\/www.couchbase.com\/blog\/es\/best-practices-couchbase-mobile-database-sync-part2\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-10-16T20:14:44+00:00","article_modified_time":"2025-06-14T03:52:21+00:00","og_image":[{"width":396,"height":308,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.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":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Best Practices and Patterns with Couchbase Mobile &#8211; Part 2","datePublished":"2019-10-16T20:14:44+00:00","dateModified":"2025-06-14T03:52:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/"},"wordCount":1449,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png","keywords":["couchbase mobile 2.0","couchbase mobile 2.x","database","ios","NoSQL Database","uwp","xamarin"],"articleSection":["Android","Application Design","Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","Solutions","Sync Gateway"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/","url":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/","name":"Best Practices and Patterns with Couchbase Mobile - Part 2 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png","datePublished":"2019-10-16T20:14:44+00:00","dateModified":"2025-06-14T03:52:21+00:00","description":"Discutimos algunos patrones comunes y las mejores pr\u00e1cticas en relaci\u00f3n con el almacenamiento y sincronizaci\u00f3n de datos entre aplicaciones m\u00f3viles y la nube utilizando Couchbase Mobile.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/Automatic-Sync.png","width":396,"height":308,"caption":"Couchbase Mobile Sync"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Best Practices and Patterns with Couchbase Mobile &#8211; Part 2"}]},{"@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\/7744","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=7744"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7748"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=7744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=7744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=7744"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=7744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}