{"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\/pt\/best-practices-couchbase-mobile-database-sync-part2\/","title":{"rendered":"Pr\u00e1ticas recomendadas e padr\u00f5es com o Couchbase Mobile - Parte 2"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/mobile\/\">Couchbase Mobile<\/a> permite uma ampla gama de casos de uso offline-first de diferentes graus de escala e complexidade. Em um artigo anterior <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/best-practices-common-patterns-couchbase-mobile-part1\/\">postagem<\/a>No artigo \"Couchbase Lite\", discuti padr\u00f5es comuns ao usar o Couchbase Lite como armazenamento de dados NoSQL incorporado em seus aplicativos. Esses padr\u00f5es se concentraram no armazenamento local de dados. Nesta postagem do blog, discutimos alguns padr\u00f5es comuns e pr\u00e1ticas recomendadas relacionados \u00e0 sincroniza\u00e7\u00e3o de dados com o <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/introduction.html\">Gateway de sincroniza\u00e7\u00e3o<\/a>. Esta publica\u00e7\u00e3o pressup\u00f5e que voc\u00ea esteja familiarizado com os fundamentos do Couchbase Mobile. Se precisar de uma introdu\u00e7\u00e3o, consulte os documentos em <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/introduction.html\">Couchbase Lite<\/a> e <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/index.html\">Gateway de sincroniza\u00e7\u00e3o<\/a>.<\/p>\n<h3 id=\"pattern1:keepingthedataup-to-syncwhileappisinthebackground\">Padr\u00e3o 1: manter os dados sincronizados enquanto o aplicativo est\u00e1 em 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>O suporte a backgrounds em aplicativos m\u00f3veis varia drasticamente de acordo com a plataforma. De fato, em determinadas plataformas, como o Android, o conceito de \"aplicativos em segundo plano\" \u00e9 bastante nebuloso\/complicado. Portanto, a forma como voc\u00ea sincronizaria os dados enquanto seu aplicativo est\u00e1 em segundo plano depende muito da plataforma. Voc\u00ea pode encontrar uma discuss\u00e3o sobre como o Couchbase Lite reage ao ciclo de vida do aplicativo em <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> e <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/csharp.html#replication-status-and-app-life-cycle\">Windows<\/a> em nossa documenta\u00e7\u00e3o.<\/p>\n<ul>\n<li><strong>Caso de uso<\/strong><\/li>\n<\/ul>\n<p>Ao manter os dados atualizados quando n\u00e3o est\u00e3o em uso ativo (ou em primeiro plano), os aplicativos podem melhorar a experi\u00eancia do usu\u00e1rio final, reduzindo o tempo de inicializa\u00e7\u00e3o em lan\u00e7amentos subsequentes.<\/p>\n<ul>\n<li><strong>Abordagem<\/strong>\n<ul>\n<li>Deve-se observar que n\u00e3o h\u00e1 garantia de que seu aplicativo ter\u00e1 permiss\u00e3o para ser executado em segundo plano. Normalmente, essa \u00e9 uma decis\u00e3o no n\u00edvel do sistema ou do usu\u00e1rio.<\/li>\n<li>O modo como um aplicativo lida com a sincroniza\u00e7\u00e3o em segundo plano depende da plataforma<\/li>\n<li>Em geral, recomenda-se que, quando poss\u00edvel, seu aplicativo reaja a eventos adequados do ciclo de vida do aplicativo e feche o replicador antes de fazer a transi\u00e7\u00e3o para o segundo plano<\/li>\n<li><strong>iOS<\/strong>\n<ul>\n<li>As replica\u00e7\u00f5es cont\u00ednuas s\u00e3o transferidas para o modo off-line quando o aplicativo \u00e9 colocado em segundo plano<\/li>\n<li>Uso <a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/NetworkingInternet\/Conceptual\/RemoteNotificationsPG\/APNSOverview.html#\/\/apple_ref\/doc\/uid\/TP40008194-CH8-SW1\">Servi\u00e7o de notifica\u00e7\u00e3o por push da Apple (APNS)<\/a> para enviar um <a href=\"https:\/\/developer.apple.com\/documentation\/usernotifications\/setting_up_a_remote_notification_server\/pushing_updates_to_your_app_silently\">notifica\u00e7\u00e3o silenciosa<\/a> para ativar o aplicativo enquanto ele estiver em segundo plano ou use <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\">Atualiza\u00e7\u00e3o do aplicativo em segundo plano<\/a> para permitir que o sistema desperte o aplicativo de forma oportuna<\/li>\n<li>Quando o aplicativo for ativado em segundo plano, fa\u00e7a uma replica\u00e7\u00e3o \u00fanica para sincronizar os dados<\/li>\n<li>Mais informa\u00e7\u00f5es sobre o suporte em segundo plano no iOS neste <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/background-sync-couchbase-mobile-ios\/\">postagem no blog<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Android<\/strong>\n<ul>\n<li>H\u00e1 algumas op\u00e7\u00f5es dispon\u00edveis se os aplicativos precisarem executar tarefas em segundo plano\n<ul>\n<li>Uso <a href=\"https:\/\/developer.android.com\/guide\/components\/services\">Servi\u00e7o de primeiro plano<\/a> para replica\u00e7\u00f5es de longa dura\u00e7\u00e3o em segundo plano<\/li>\n<li>Uso <a href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/workmanager\">Gerente de trabalho<\/a> para agendar replica\u00e7\u00f5es pontuais a serem executadas de forma ass\u00edncrona em segundo plano ou usar o Remote <a href=\"https:\/\/firebase.google.com\/docs\/cloud-messaging\/\">Firebase Cloud Messaging (FCM)<\/a> para iniciar uma solicita\u00e7\u00e3o de trabalho para executar uma replica\u00e7\u00e3o \u00fanica<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>UWP<\/strong>\n<ul>\n<li>As replica\u00e7\u00f5es cont\u00ednuas n\u00e3o s\u00e3o transferidas para o modo off-line quando um aplicativo \u00e9 colocado em segundo plano. No entanto, \u00e9 recomend\u00e1vel que os aplicativos fechem o replicador quando fizerem a transi\u00e7\u00e3o para segundo plano<\/li>\n<li>Uso <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/shell\/tiles-and-notifications\/raw-notification-overview\">notifica\u00e7\u00f5es brutas<\/a> enviado via <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/uwp\/design\/shell\/tiles-and-notifications\/windows-push-notification-services--wns--overview\">Servi\u00e7o de notifica\u00e7\u00e3o por push do Windows (WPNS)<\/a> para ativar o aplicativo enquanto ele estiver em segundo plano<\/li>\n<li>Quando o aplicativo for ativado em segundo plano, agende uma tarefa em segundo plano para fazer uma replica\u00e7\u00e3o \u00fanica para sincronizar os dados<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern2:purgeafterpush\">Padr\u00e3o 2: purgar ap\u00f3s empurrar<\/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>O Couchbase Lite oferece suporte \u00e0 capacidade de os aplicativos serem notificados sobre o status de replica\u00e7\u00e3o de um documento ou conjunto de documentos por meio de <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Eventos de replica\u00e7\u00e3o<\/a> capacidade. Os aplicativos podem aproveitar esse recurso para tomar as medidas apropriadas em rela\u00e7\u00e3o ao documento, dependendo do status, como a elimina\u00e7\u00e3o do documento.<\/p>\n<ul>\n<li><strong>Caso de uso<\/strong><\/li>\n<\/ul>\n<p>Pode ser desej\u00e1vel remover documentos do armazenamento local do cliente ap\u00f3s a sincroniza\u00e7\u00e3o com o servidor por motivos de conformidade com a governan\u00e7a ou para evitar o incha\u00e7o do banco de dados local.<\/p>\n<ul>\n<li><strong>Abordagem<\/strong>\n<ul>\n<li>Registro <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Evento de replica\u00e7\u00e3o<\/a> observador no Replicator<\/li>\n<li>Ao receber <code>onPushed<\/code> no(s) documento(s), invoque o evento <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/Database.html#\/s:18CouchbaseLiteSwift8DatabaseC13purgeDocument6withIDySS_tKF\">purgar()<\/a> API para eliminar o documento. Os documentos eliminados n\u00e3o s\u00e3o sincronizados.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern3:enforcingserversidedocumentlifespanondisconnectedclients\">Padr\u00e3o 3: impondo o tempo de vida do documento no lado do servidor em 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>O Couchbase Lite oferece suporte \u00e0 capacidade dos aplicativos de definir datas de expira\u00e7\u00e3o em documentos locais por meio de <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/Database.html#\/s:18CouchbaseLiteSwift8DatabaseC21setDocumentExpiration6withID10expirationySS_10Foundation4DateVSgtKF\">Data de expira\u00e7\u00e3o<\/a> recurso. Os aplicativos podem aproveitar esse recurso para expirar localmente um documento no Couchbase Lite, independentemente da conectividade com o servidor.<\/p>\n<ul>\n<li><strong>Caso de uso<\/strong><\/li>\n<\/ul>\n<p>Os documentos criados no servidor podem ser associados a uma TTL ou data de expira\u00e7\u00e3o que determina quando o documento deve ser eliminado do sistema (clientes e servidor). Quando houver conectividade de rede, os documentos exclu\u00eddos no lado do servidor ser\u00e3o sincronizados com o lado do cliente para que tamb\u00e9m sejam exclu\u00eddos no lado do cliente. No entanto, \u00e9 prov\u00e1vel que os clientes estejam off-line quando os documentos expirarem no servidor e pode ser importante que esses documentos sejam removidos dos clientes em tempo h\u00e1bil.<\/p>\n<ul>\n<li><strong>Abordagem<\/strong>\n<ul>\n<li>Modele seus documentos para incluir uma propriedade definida pelo usu\u00e1rio que especifique a hora UTC em que o documento expira. Vamos cham\u00e1-la de <em>validUntil<\/em>.<\/li>\n<li>Registro <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-events\">Evento de replica\u00e7\u00e3o<\/a> observador no cliente Replicator<\/li>\n<li>Ao receber <code>Puxar<\/code> no(s) documento(s), use o evento <em>validUntil<\/em> para definir o TTL em documentos usando o <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#document-expiration\">setExpirationDate()<\/a> API<\/li>\n<li>Quando os documentos expiram no cliente, eles s\u00e3o automaticamente eliminados do cliente, independentemente da conectividade da rede. Os documentos eliminados n\u00e3o s\u00e3o sincronizados.<\/li>\n<li>No lado do servidor, os documentos podem ser eliminados de forma independente<\/li>\n<li><strong>Advert\u00eancia<\/strong> : Se a expirationDate (conforme definido por <em>validUntil<\/em> ) \u00e9 atualizada enquanto os clientes est\u00e3o off-line, ent\u00e3o os clientes n\u00e3o ser\u00e3o notificados dessa altera\u00e7\u00e3o. Portanto, \u00e9 poss\u00edvel que os documentos sejam eliminados prematuramente nos clientes quando eles estiverem off-line. Portanto, essa abordagem \u00e9 segura desde que o tempo de vida do documento n\u00e3o seja alterado ap\u00f3s a cria\u00e7\u00e3o. Discutiremos outra abordagem para lidar com esses casos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern4:controllingwhenandwhatdocumentsgetsyncedtoserver\">Padr\u00e3o 4: controle de quando e quais documentos s\u00e3o sincronizados com o 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>O Couchbase Lite oferece suporte \u00e0 capacidade de os aplicativos definirem <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-filters\">filtros<\/a> no replicador que determina quais documentos s\u00e3o enviados para o servidor. Esse recurso pode ser aproveitado para controlar quando e quais documentos s\u00e3o sincronizados com o servidor.<\/p>\n<ul>\n<li><strong>Caso de uso<\/strong><\/li>\n<\/ul>\n<p>Em um artigo anterior <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/best-practices-common-patterns-couchbase-mobile-part1\/\">blog<\/a>Na se\u00e7\u00e3o \"Como usar o banco de dados\", discutimos como uma inst\u00e2ncia separada de um banco de dados pode ser usada para manter dados somente locais. Embora esse padr\u00e3o funcione quando voc\u00ea precisa de uma segrega\u00e7\u00e3o rigorosa dos dados e se n\u00e3o forem necess\u00e1rias consultas de jun\u00e7\u00e3o entre bancos de dados, h\u00e1 casos de uso em que voc\u00ea deseja um controle refinado sobre <em>quando<\/em> as altera\u00e7\u00f5es locais devem ser sincronizadas. Voc\u00ea tamb\u00e9m pode usar esse padr\u00e3o como uma alternativa ao padr\u00e3o de banco de dados pr\u00e9-criado para impor que os documentos sejam somente locais (ou seja, nunca sincronizados).<\/p>\n<ul>\n<li><strong>Abordagem<\/strong>\n<ul>\n<li>Modele seus documentos para incluir um <em>\"status\"<\/em> que controla o fluxo de trabalho comercial. Por exemplo, use um valor de <em>\"em andamento\"<\/em> para indicar quando as altera\u00e7\u00f5es n\u00e3o est\u00e3o prontas para serem sincronizadas e um valor de status de <em>\"comprometido\"<\/em> quando as altera\u00e7\u00f5es precisarem ser enviadas para cima. Se for necess\u00e1rio tornar os documentos somente locais, use um <em>\"escopo\"<\/em> com um valor de <em>\"local\"<\/em> para indicar que os documentos n\u00e3o devem ser sintetizados<\/li>\n<li>Configurar o adequado <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-filters\">Filtro de replica\u00e7\u00e3o<\/a> no replicador. O filtro deve inspecionar a propriedade do documento (conforme definido acima) para determinar se um documento precisa ser sincronizado ou n\u00e3o<\/li>\n<li>Toda vez que h\u00e1 altera\u00e7\u00f5es prontas para serem enviadas, a fun\u00e7\u00e3o de filtro \u00e9 aplicada pelo replicador do Couchbase Lite e os documentos s\u00e3o sincronizados somente se os crit\u00e9rios do filtro forem atendidos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"pattern5:controllingthepriorityorderofinitialsetofdocumentssyncedtotheclient\">Padr\u00e3o 5: controle da ordem de prioridade do conjunto inicial de documentos sincronizados com o 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>Gateway de sincroniza\u00e7\u00e3o <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.6\/data-routing.html\">canais<\/a> permitem que os aplicativos separem os dados com base no tipo, na finalidade, nas permiss\u00f5es de controle de acesso etc. Isso pode ser aproveitado para separar os dados com base na prioridade.<\/p>\n<ul>\n<li><strong>Caso de uso<\/strong><\/li>\n<\/ul>\n<p>A capacidade de priorizar os documentos recebidos pelos clientes garantiria que os clientes pudessem come\u00e7ar a trabalhar com as altera\u00e7\u00f5es de documentos mais relevantes assim que elas fossem extra\u00eddas, sem ter que esperar que o restante dos documentos fosse sincronizado. As altera\u00e7\u00f5es de documentos restantes e de menor prioridade s\u00e3o retiradas posteriormente. Isso reduz o tempo de resposta do aplicativo na inicializa\u00e7\u00e3o.<\/p>\n<ul>\n<li><strong>Abordagem<\/strong>\n<ul>\n<li>Atribua documentos a diferentes canais com base na prioridade. Por exemplo, voc\u00ea pode ter documentos atribu\u00eddos a canais de prioridade \"baixa\", \"m\u00e9dia\" ou \"alta\".<\/li>\n<li>No lado do cliente, na inicializa\u00e7\u00e3o, fa\u00e7a uma replica\u00e7\u00e3o pull \u00fanica do canal de prioridade mais alta, especificando o <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.6.0\/couchbase-lite-swift\/Classes\/ReplicatorConfiguration.html#\/s:18CouchbaseLiteSwift23ReplicatorConfigurationC8channelsSaySSGSgvp\">canais<\/a> filtro. Quando a sincroniza\u00e7\u00e3o dos documentos no canal <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.6\/swift.html#replication-status\">completa<\/a>Se o aplicativo for usado, ele poder\u00e1 iniciar outra replica\u00e7\u00e3o para os canais restantes.<\/li>\n<li>Voc\u00ea tamb\u00e9m pode configurar um replicador cont\u00ednuo para o canal de prioridade mais alta e extrair os canais restantes somente sob demanda usando a replica\u00e7\u00e3o de um disparo. Isso garantir\u00e1 que o canal de prioridade mais alta seja mantido sincronizado em tempo real.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"whatnext\">O que vem a seguir<\/h2>\n<p>Nesta postagem, abordamos alguns padr\u00f5es de uso comuns no Couchbase Lite relacionados \u00e0 sincroniza\u00e7\u00e3o de dados de e para o Sync Gateway e o servidor Couchbase. Continuaremos a publicar postagens descrevendo outras dicas e recomenda\u00e7\u00f5es para solucionar casos de uso comuns.<br \/>\nSe tiver d\u00favidas ou coment\u00e1rios, deixe um coment\u00e1rio abaixo ou sinta-se \u00e0 vontade para entrar em contato comigo pelo\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">Twitter<\/a>\u00a0ou <a href=\"mailto:\/\/priya.rajagopal@couchbase.com\">e-mail<\/a> me .  O\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a> s\u00e3o outro bom lugar para entrar em contato com perguntas.<\/p>\n<h2 id=\"acknowledgments\">Agradecimentos<\/h2>\n<p>Gostaria de agradecer as contribui\u00e7\u00f5es da equipe de desenvolvimento do Couchbase Lite e do Sync Gateway, especificamente <a href=\"https:\/\/github.com\/adamcfraser\">Adam Fraser<\/a> e <a href=\"https:\/\/github.com\/borrrden\">Jim Borden<\/a> por sua an\u00e1lise da postagem do 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 v26.0 (Yoast SEO v26.0) - 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\/pt\/best-practices-couchbase-mobile-database-sync-part2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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 alguns padr\u00f5es comuns e pr\u00e1ticas recomendadas relacionados ao armazenamento e \u00e0 sincroniza\u00e7\u00e3o de dados entre aplicativos m\u00f3veis e a nuvem usando o 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\/pt\/best-practices-couchbase-mobile-database-sync-part2\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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 alguns padr\u00f5es comuns e pr\u00e1ticas recomendadas relacionados ao armazenamento e \u00e0 sincroniza\u00e7\u00e3o de dados entre aplicativos m\u00f3veis e a nuvem usando o Couchbase Mobile","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/best-practices-couchbase-mobile-database-sync-part2\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, Diretora S\u00eanior, Gerenciamento de Produtos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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 \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=7744"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/7748"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=7744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=7744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=7744"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=7744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}