Couchbase Mobile的最佳实践和模式:第2部分


Couchbase已建立

Couchbase Mobile支持各种不同规模和复杂程度的离线优先使用案例。在早期post,我讨论了在应用程序中使用Couchbase Lite作为嵌入式NoSQL数据存储时的常见模式。这些模式侧重于本地数据存储。在这篇博文中,我们讨论了一些与同步数据相关的常见模式和最佳实践Sync Gateway。这篇文章假设你熟悉Couchbase Mobile的基本原理。如果你需要一本入门书,看看上面的文件Couchbase LiteSync Gateway

寻找第一部分?迎面地over here去看看吧!。

模式1:在应用程序处于后台时保持数据同步

couchbase mobile app background

背景对移动应用的支持因平台而异。事实上,在某些平台上,比如安卓,“后台应用”的概念相当模糊/复杂。因此,当你的应用程序在后台时,你如何同步数据在很大程度上取决于平台。你可以找到一个关于Couchbase Lite对应用生命周期的反应的讨论iOS,Android,和Windows在我们的文档中。

  • 用例

通过在不活跃时(或在前台)保持数据的最新,应用程序可以通过减少后续启动的启动时间来改善最终用户体验。

  • 方法
    • 应该注意的是,不能保证你的应用程序可以在后台运行。这通常是系统级或用户级的决策。
    • 应用如何处理后台同步取决于平台
    • 通常建议您的应用尽可能对适当的应用生命周期事件做出反应,并在转换到后台之前关闭复制器
    • ios
    • 机器人
    • UWP
      • 当应用程序被推到后台时,连续复制不会转换到离线模式。但是,建议应用程序在复制程序转换到后台时关闭它们。
      • 使用raw notifications通过发送Windows Push Notification Service(WPNS)在后台唤醒应用程序
      • 当应用程序在后台被唤醒时,安排一个后台任务来执行一次性复制以同步数据

模式2:推送后清除

clear local database after syncing data

Couchbase Lite支持通过以下方式通知应用程序文档或文档集的复制状态Replication Eventing能力。应用程序可以利用这一功能,根据状态对文档采取适当的操作,例如清除文档。

  • 用例

出于治理法规遵从性的原因,或者为了避免本地数据库膨胀,在将文档同步到服务器之后,可能需要从本地客户端存储中删除文档。

  • 方法
    • 注册Replication Event复制器上的观察者
    • 在接收时onPushed事件,调用purge()应用编程接口来处理文档。已清除的文档不会同步。

模式3:在断开连接的客户端上实施服务器端文档生命周期

Set local TTL on documents

Couchbase Lite支持应用程序通过以下方式设置本地文档的到期日期Expiration Date特色。应用程序可以利用这一功能在本地使Couchbase Lite上的文档过期,而无需考虑与服务器的连接。

  • 用例

在服务器上创建的文档可能与一个TTL或到期日期相关联,该日期指示文档何时必须从系统(客户端和服务器)中清除。当存在网络连接时,在服务器端删除的文档将会同步到客户端,因此它们也会在客户端被删除。但是,当服务器上的文档过期时,客户端很可能处于脱机状态,因此及时从客户端删除这些文档可能很重要。

  • 方法
    • 为您的文档建模,使其包含一个用户定义的属性,该属性指定文档过期时的世界协调时时间。让我们称之为有效截止日期
    • 注册Replication Event客户端复制器上的观察者
    • 在接收时Pull事件,请使用有效截止日期值来设置文档的TTLsetExpirationDate()美国石油学会
    • 当文档在客户端过期时,无论网络连接如何,它们都会自动从客户端清除。已清除的文档不会同步。
    • 在服务器端,可以独立清除文档
    • 警告:如果到期日期(由定义有效截止日期属性)在客户端脱机时更新,则客户端将不会收到此更改的通知。因此,当客户端脱机时,文档可能会被过早清除。因此,只要文档的生命周期在创建后没有改变,这种方法是安全的。我们将讨论处理这种情况的另一种方法。

模式4:控制何时以及哪些文档同步到服务器

controlling documents that get pushed to server

Couchbase Lite支持应用程序设置细粒度的能力filters决定将哪些文档推送到服务器的复制器。可以利用这一功能来控制何时以及哪些文档被同步到服务器。

  • 用例

在早期blog,我们讨论了如何使用单独的数据库实例来保存仅本地的数据。当您需要严格的数据隔离,并且不需要跨数据库连接查询时,这种模式是有效的,但是当您想要对当...的时候将同步本地更改。您也可以使用此模式作为预构建数据库模式的替代,以强制文档只在本地(即从不同步)。

  • 方法
    • 将您的文档建模为包含用户定义的“状态”控制业务工作流的属性。例如,使用值“进行中”指示更改何时未准备好同步,以及状态值为“承诺”当需要推动变革时。如果您需要将文档设为仅本地文档,则使用用户定义的“范围”值为的属性“本地”指示文档不同步
    • 配置合适的Replication Filter复制器的功能。过滤器应该检查文档属性(如上定义),以确定文档是否需要同步
    • 每次准备好要推送的更改时,Couchbase Lite复制器都会应用过滤功能,只有满足过滤条件时,才会同步文档。

模式5:控制同步到客户端的初始文档集的优先级顺序

sync gateway channel priority

同步网关channels允许应用程序根据类型、目的、访问控制权限等来隔离数据。这可以用来根据优先级隔离数据。

  • 用例

对客户端收到的文档进行优先排序的能力将确保客户端可以在获取最相关的文档更改后立即开始工作,而不必等待其余的文档同步。其余优先级较低的文档更改将在以后被删除。这减少了应用程序在初始启动时的响应时间。

  • 方法
    • 根据优先级将文档分配到不同的通道。例如,您可以将文档分配给“低”、“中”或“高”优先级通道。
    • 在客户端,在初始启动时,通过指定channels过滤器。一旦文件在通道中同步completes,该应用可以为剩余的频道启动另一个复制。
    • 您还可以为最高优先级的通道设置一个连续复制器,并仅在需要时使用一次性复制来拉动其余通道。这将确保最高优先级信道实时保持同步。

进一步阅读

Design Patterns for Microservices

Design Decisions: The Data Model and MongoDB