MongoDB移动功能

概述

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或更高版本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,754评论 0 5
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,867评论 0 9
  • 推荐阅读 MongoDB 资源、库、工具、应用程序精选列表中文版 有哪些鲜为人知,但是很有意思的网站? 一份攻城狮...
    guanguans阅读 945评论 0 6
  • 我来到元瑞老师的美中育人将近半个月了,老师的课我也听了,接近尾声。 总的印象是:课程的选题,非常接地气,有实用价值...
    刘勃说阅读 202评论 0 0
  • 5月12-15号苏州培训,16-18号党校培训,19号体检,20-21休息,22-26收费业务培训,27-30休息...
    逆莳针阅读 254评论 0 0