Device Sync - Flutter SDK
Device Sync自动在客户端应用程序和 Atlas App Services后端应用程序之间同步数据。 当客户端设备在线时,Sync 在设备和App Services后端之间的背景异步同步数据。
Flutter SDK仅支持Flexible Sync。 您必须配置App Services后端才能使用Flexible Sync。
注意
Flutter SDK 不支持基于分区的同步。
同步 Realm
您可以配置 Realm,以在许多设备之间自动同步数据,并且每个设备都有自己的本地数据副本。同步 Realm 使用与纯本地 Realm 不同的配置,并且需要 Atlas App Services 后端处理同步过程。
应用程序始终可以在本地创建、修改和删除同步的 Realm 对象,即使在离线状态下也是如此。 只要网络连接可用,Realm Flutter SDK 就会打开与应用程序服务器的连接,并与其他客户端进行双向更改同步。 Atlas Device Sync 协议和服务器端操作转换可确保 Realm 的所有完全同步实例看到完全相同的数据,即使某些更改发生在离线状态和/或接收时无序。
已同步 Realms 与非同步 Realms
已同步 Realm 与非同步本地 Realm 有几个不同之处:
同步 Realm 尝试将更改与后端 App Services App 同步,而非同步 Realm 则不会。
同步 Realm 可以由经过身份验证的用户访问,而非同步 Realm 没有用户或身份验证的概念。
您可以将数据从非同步域复制到同步域,反之亦然,但不能同步非同步域。 要将非同步域转换为同步域,您可以按照将仅限本地的应用程序迁移到启用同步的应用程序中描述的进程进行操作。
什么是 Flexible Sync?
为 App Services 后端配置选择 Flexible Sync 时,客户端实现必须包括对可查询字段查询的订阅。Flexible Sync 的工作原理是同步与您在客户端应用程序中维护的查询订阅相匹配的数据。
订阅集包含一组查询。 Flexible Sync会返回与这些查询匹配的文档,并且用户具有读取或写入这些文档的适当权限。 如果文档与查询匹配,但客户端没有读取或写入文档的权限,则文档不会同步到客户端应用程序。
您可以使用Flexible Sync RQL 的有限子集形成 查询。要进一步了解可以查询的字段,请参阅可查询字段文档。
订阅集基于特定类型的 Realm 对象。要同步多种类型 Realm 对象的数据,您必须拥有多个订阅。
要在客户端应用程序中使用 Device Sync,请使用灵活同步配置打开同步 Realm。然后,管理订阅以确定要同步的文档。
在后端启用“灵活同步”
在开始使用 SDK 从客户端应用程序同步数据之前,必须在 App Services 后端启用灵活同步。
首先,请参阅有关启用 Device Sync 的后端文档。
更新群组以提高性能
订阅集的每个写入事务都会产生性能成本。如果需要在会话期间对 Realm 对象进行多次更新,请考虑将编辑的对象保留在内存中,直到所有更改完成。这通过仅将完整且更新的对象写入 Realm 而不是每次更改来提高同步性能。
Device Sync 如何工作
除了 Realm 的所有功能之外,Device Sync 还添加 App Services 后端和客户端设备之间的网络同步。当您使用具有同步功能的 Realm 时,Realm 存在于设备上,与使用不具有同步功能的 Realm 类似。但是,更改存储在这些 Realm 中的数据会通过后端 App Services 实例在所有客户端设备之间进行同步。该后端还在运行 MongoDB 的基于云的 Atlas 集群中存储 Realm 数据。
Device Sync 依赖于工作程序客户端,该客户端在应用程序的专用线程中与应用程序后端进行通信。此外,同步 Realm 会保留对所含对象的更改历史记录。同步使用此历史记录解决客户端更改和后端更改之间的冲突。
使用Device Sync的应用程序使用 JSON schema 在后端定义其模式 。客户端应用程序必须与后端模式匹配才能同步数据。但是,如果您更愿意使用应用程序的编程语言定义初始模式,则可以使用 开发模式 在写入应用程序时根据原生SDK 对象创建后端JSON schema。但是,一旦您的应用程序用于生产目的,您应该在后端使用JSON 模式更改您的模式。