概述
MongoDB Mobile是MongoDB数据库的较小版本,经过优化可在移动和物联网设备上运行。以下部分定义了支持的平台,以及MongoDB Mobile和MongoDB之间的功能差异。
平台支持
MongoDB Mobile支持在以下设备上进行开发:
比较MongoDB 和MongoDB Mobile
MongoDB Mobile包含两个核心部分:
MongoDB数据库的移动优化版本,在设备上本地运行,可以离线访问数据。
Native Java(Android)和Swift(iOS)SDK,用于管理较低级别的数据库操作,并提供与MongoDB Mobile和Stitch后端交互的方法。
Stitch SDK提供两个独立的客户端,用于与MongoDB Mobile进行交互:
本地:MongoDB Stitch SDK的本地MongoDB客户端仅提供对MongoDB Mobile(在设备上本地运行的MongoDB)的访问。SDK支持MongoDB驱动程序支持的大多数CRUD,聚合和操作命令。仅当您希望本地数据库不与Atlas同步时才使用本地服务。
远程:SDK的远程客户端提供对MongoDB Atlas和MongoDB Mobile的访问,并提供Atlas和MongoDB Mobile之间的数据同步。只要您想访问Atlas和MongoDB Mobile,就可以使用远程服务,并且希望确保数据保持同步。
注意
您的应用程序可以使用远程服务(提供对MongoDB Mobile和Atlas的访问)或本地服务,但不能同时使用两者。
移动同步(Beta)
远程服务可以在MongoDB Mobile和MongoDB Atlas之间同步数据更改。您的客户端代码指定要跟踪的文档以及如何处理出现的任何冲突和错误。您指定 Sync将调用的ConflictHandler, ErrorListener和 ChangeEventListener处理程序。然后,Stitch使用 更改流来监视更改,并在发生更改时通知已注册的客户端。
Sync为其同步的文档维护一组文档ID。文档ID以隐式或显式方式添加到此同步集合中:
使用sync()。insertOne() 或sync()。insertMany()方法插入文档时,文档ID会隐式添加到同步集合中 。
您可以通过将文档ID传递给sync()。syncOne() 或sync()。syncMany() 方法来识别要同步的现有文档 。
您可以通过调用sync()。desyncOne() 或sync()。desyncMany() 方法从同步集合中删除文档。
已标记为要同步的文档始终可以脱机使用,以便使用常见的MongoDB CRUD运算符进行查询和修改。
同步行为
标记为同步的文档包括一个__stitch_sync_version 字段,Stitch在合并期间用于管理文档版本。修改本地文档后,Stitch会递增__stitch_sync_version.v对象中的字段,然后根据以下本地到远程进程同步更改:
更改(插入,更新,替换,删除)在本地应用,Sync发出本地更改事件,并将文档标记为uncommitted (hasUncommittedWrites == true)。
然后立即将更改应用于远程数据库,或者在应用程序重新联机时应用。
如果远程数据库上没有冲突的更改,则会应用更改,并且您ChangeEventListener会收到标记为的更改事件 committed。如果存在冲突,则Sync会记录冲突并将文档的本地和远程版本传递给 您指定的 ConflictHandler。
如果发生不是冲突的错误,则错误将返回到 ErrorListener,并且文档paused必须由用户修复,然后才能进行同步。
当您正在侦听的文档发生远程更改时,它们将根据以下远程到本地行为在本地进行同步:
对于每个未处理的远程更改,MongoDB Stitch会找到相应的本地文档。
如果本地文档尚未应用更改,并且没有冲突,则MongoDB Stitch应用更改并将更改事件发送到 ChangeEventListener。
如果存在冲突,则MongoDB Stitch会将文档的本地和远程版本传递给 您指定的 ConflictHandler。
同步状态
在任何给定时间,Sync都处于以下状态之一:
联机 - 每当有待处理的本地更改时,同步将运行,并且将针对任何本地更改以及任何不冲突或已解决的远程更改发出更改事件。
脱机 - 所有本地更改都以同步方式排队。为任何本地更改发出更改事件。
同样,任何跟踪的文档都可能处于以下paused状态:如果在同步文档期间出现错误,则会通过您指定的ErrorListener通知用户 ,并且文档暂停; 也就是说,在用户进行必要的更改(更新或删除)之前,它将不再标记为同步。
外部数据变更
如果对来自非Stitch应用程序的远程数据集进行了更改,则必须确保正确处理Stitch版本控制,否则更改将无法正确同步到客户端。有两种方法可以解决这个问题:
使用下一个64位整数(NumberLong)增加对象v内字段的值:__stitch_sync_version
../../_images/__stitch_sync_version.png
删除或$取消设置的 __stitch_sync_version场之前进行其他更改文件。当下次运行Sync时,它会将更改视为新版本。
注意>>
为了改善MongoDB Mobile的大小和性能,MongoDB 4.0中的一些组件不包含在移动版本中。以下列表详细说明了未包含的组件:
分片和复制
MongoDB Mobile作为独立实例运行,移动设备上存在单个节点。
存储引擎配置
由于其在设备上的稳定性和普及性,MongoDB Mobile使用SQLite作为幕后的简单键值存储。因此,MongoDB Mobile不提供配置底层SQLite部署或使用其他存储引擎的功能。
数据库认证
MongoDB Mobile仅接受来自应用程序内部的连接。这些连接是可信的,因此MongoDB Mobile中禁用了数据库身份验证。在MongoDB Mobile和外部组件之间移动数据时,我们建议在服务器端使用身份验证和安全规则的组合。
加密/ SSL
MongoDB Mobile不使用SSL连接本地数据库。但是,使用Stitch SDK在设备外部传输数据时,连接会使用SSL加密。
此外,MongoDB Mobile不提供静态加密。MongoDB建议用户在将数据存储到MongoDB Mobile之前加密应用程序中的必要字段。
改变流
MongoDB Mobile数据库不支持创建 更改流。
服务器端JavaScript执行
MongoDB Mobile不支持服务器端JavaScript 执行。
交易
MongoDB Mobile不支持交易。
使用Sync构建移动应用程序
概述
在设置Android或iOS项目 以使用MongoDB Stitch SDK之后,您就可以初始化MongoDB Stitch并连接到数据库。以下过程说明如何构建使用MongoDB Mobile和Atlas存储数据的应用程序。
有关仅使用MongoDB Mobile在应用程序中存储数据的示例,请参阅 构建仅限本地的移动应用程序。
有关使用Sync的完整示例应用程序,请参阅 待办事项教程。
先决条件
如果您还没有这样做,请参阅设置MongoDB Mobile项目中的步骤 来设置您的Android或iOS项目以使用MongoDB Stitch SDK。
注意
Stitch SDK要求您的Atlas集群版本为3.4或更高版本。要使用Sync,您的群集必须为3.6或更高版本。
网友评论