Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

优化 Atlas 中的同步存储

在此页面上

  • 历史
  • 修剪
  • 客户端最大离线时间
  • 关键概念
  • 客户端最大离线时间不会立即影响客户端重置
  • 设置客户端最长离线时间
  • 使用 Flexible Sync 时优化性能和存储
  • 总结

Atlas Device Sync 使用应用程序的已同步 Atlas 集群中的空间来存储用于同步的元数据。这包括每个同步数据库的更改历史记录。 Atlas App Services 可最大限度地减少 Atlas 集群中的空间使用量。要减少同步所需的时间和数据,就必须尽量减少元数据。

App Services 后端保留每个 Realm底层数据变更的历史记录,类似于 MongoDB oplog 。 App Services 使用此历史记录在后端和客户端之间同步数据。 App Services 将历史记录存储在同步的 Atlas 集群中。

当您在应用中设置客户端最大离线时间时,修剪会删除早于客户端最大离线时间的更改。

客户端最大离线时间用于修剪,控制历史记录的年龄限制。 这会间接更改客户端在与后端的同步会话之间可以保持离线的时间。 不同步时间超过指定天数的客户端在下次连接后端时可能会遇到客户端重置

将客户端最大离线时间设置为较低的值将减少同步所需的历史记录量。 由此产生的优化降低了同步 Atlas 集群中的存储使用量。

新应用会自动启用客户端最长离线时间,默认值为 30 天。

警告

客户端最大离线时间导致历史记录永久更改

客户端最大离线时间支持修剪较旧的历史记录。这将永久更改受影响的历史记录,并可能导致客户端在将来重置。

同步在所有客户端上应始终收敛于相同的最终状态。 为了在同步期间收敛,客户端需要从上次同步后立即开始的完整变更历史记录。 当客户端长时间不同步时,修剪可能会更改历史记录,从而阻止客户端收敛。 由于同步依赖于所有客户端都收敛到一个共同的结果,因此此类客户端无法进行同步。

因此,客户端必须先完成客户端重置,然后才能恢复同步。 在客户端重置场景中,客户端会删除 Realm 的客户端本地副本,并从后端下载该 Realm 的当前状态。 然后,使用 Realm 的新副本继续同步。

客户端最大离线时间控制后端在应用修剪之前的等待时间。 在指定的天数内未同步后,客户端在下次连接后端时可能会遇到客户端重置。

未指定客户端最大离线时间的应用程序从不应用修剪。 这意味着客户端可以在离线任何时间(数周、数月甚至数年)后进行连接并同步更改。 随着时间的推移,经常编辑的 Realm 会积累许多更改。 对于大型变更集,同步需要更多的时间和数据。

修剪会对历史记录造成永久性的、不可逆转的更改。 因此,增加客户端最大离线时间不会立即改变客户端重置之前的时间长度。 现有历史记录已因修剪而更改,需要客户端重置。新历史记录需要时间才能累积到新客户端最大离线时间。

减少客户端最大离线时间不会立即改变客户端重置之前的时间长度。一旦定期计划的修剪作业将修剪应用于新的符合条件的历史记录,客户端重置就会开始提前进行。

  1. 在 App Services 用户界面中,单击侧边栏中的 Device Sync菜单。默认显示Dashboard标签页。

  2. 单击 Configuration 标签页。

  3. 向下滚动到Advanced Configuration (optional)部分,然后单击下拉列表以展开该部分。

    App Services 用户界面中的“高级配置”部分
  4. Client Max Offline Time部分下,指定应用程序的客户端最长离线时间的天数。默认值为30天。最小值为1 。

  5. 准备好保存后,单击屏幕底部的Save Changes按钮。

  6. 在确认窗口中,再次单击Save Changes按钮以确认更改。

  1. 使用以下pull 命令拉取最新版本应用的本地副本:

    Pull
    appservices pull --remote="<Your App ID>"
  2. 您可以使用应用程序的sync/config.json文件中的 client_max_offline_days属性配置应用程序的客户端最长离线时间天数:

    ``sync/config.json``
    {
    "client_max_offline_days": 42,
    }
  3. 使用以下推送命令部署更新的应用配置:

    推动
    appservices push --remote="<Your App ID>"

对于Flexible Sync配置,使用的 Atlas 存储空间量与您设置的可查询字段的数量成正比。 可查询的字段在后端的 Atlas 集群上使用存储。您配置的可查询字段越多,在后端集群上使用的存储就越多。

如果应用中有大量集合,则可能需要在多个集合中使用相同的可查询字段名称。 将其与权限相结合,以便更精细地控制谁可以访问哪些collection。

例子

您的应用可能包含 20 或 30 个collection,但您希望尽量减少可查询字段的数量。您可以跨collection重复使用全局可查询字段,以同步每个collection中的对象。例如, owner_id可能是您要在多个collection中查询的字段。

或者,您可能在多个collection中有owner_id ,但只需要在一个collection中对其进行查询。 在这种情况下,您可以将owner_id设为集合可查询字段。 这意味着 Sync 只需维护一个collection的有关该字段的元数据,而不是存储您不查询该字段的所有collection的元数据。

最后,对于设备要查询数据的一个特定分面(Facet)的应用程序(例如owner_id == user.id ,您可能需要将该字段指定为索引可查询字段。 索引可查询字段可为客户端只需同步一小部分数据(例如,一组商店或单个用户)的应用程序提供更高效的性能。

每个应用可以有一个索引可查询字段。索引可查询字段是全局可查询字段,必须存在并在同步的每个collection中使用相同的符合条件的数据类型。

有关更多信息,请参阅可查询字段范围索引可查询字段。

为获得最佳性能,请使用广泛查询打开同步 Realm。 然后,添加更精细的查询,以在客户端应用程序中公开目标数据集。 与使用更细粒度的查询打开多个同步 Realm 相比,从广泛的查询中分离出工作集可提供更好的性能。

配置可查询字段时,请考虑用于 Sync 的广泛查询,并减少支持这些广泛查询的字段。

例子

在待办事项清单应用中,最好使用广泛的查询,例如assignee == currentUserprojectName == selectedProject作为 Sync 查询。 这为您提供了几个要同步文档的广泛字段。在客户端中,您可以进一步细化对特定优先级或完成状态的任务等内容的查询,以划分工作集。

  • Device Sync 使用同步的 Atlas 集群中的空间来存储更改历史记录。

  • 修剪可减少“Flexible Sync”应用的空间使用量,但可能会导致客户端在超过客户端最大离线时间(以天为单位)的时间内未连接到后端的客户端重置。

  • 在 Flexible Sync 配置中添加额外的可查询字段会增加 Atlas 集群上消耗的存储空间。 使用广泛查询并选择较少的支持广泛查询的字段可减少存储消耗。

后退

生产负载测试

来年

压缩 Atlas 卷