公告推出 MongoDB 8.0,史上最快的 MongoDB!了解更多 >>推出 MongoDB 8.0,史上最快的 MongoDB!>>

评估Amazon DocumentDB与MongoDB的兼容性

亚马逊声称,从 MongoDB 迁移到 DocumentDB "就像将数据库端点更改为新的 Amazon DocumentDB 集群一样简单"。

我们定期通过运行 6 个 MongoDB 测试套件(共 1,481 个测试)来评估 DocumentDB 的兼容性声明,针对 DocumentDB 的 API 仿真进行测试。这是我们用来测试 MongoDB 在每次数据库发布时的自身一致性和正确性的套件,也是 MongoDB 完整 API 的最佳代表。

测试包括

jsCore:大约 1,000 个关于 MongoDB CRUD 操作 和数据库命令的测试

aggregation:超过 300 个关于 MongoDB 聚合管道的测试

jsCore_decimal:评估使用 十进制数据类型的应用程序的正确行为,这种数据类型适用于金融和科学工作负载中常见的精确分数数值数据

change_streams:测试 MongoDB change streams,开发人员使用它来构建事件驱动的数据管道,这些管道能够实时响应数据库更改

jsCore_txns:评估 MongoDB 中的 多文档 ACID 事务的正确行为

jsonSchema:测试 MongoDB 提供的 数据治理控制

在测试时(2022 年 1 月),DocumentDB 仿真 MongoDB 4.0 协议的子集。与 DocumentDB 不同,MongoDB Atlas(完全托管的 MongoDB 服务)支持最新的 MongoDB 6.0 版本

测试结果

与 MongoDB 的 API 仿真比较,所有正确性测试中有超过 64% 失败。对于开发者来说,这意味着

  1. 任何依赖此功能的现有 MongoDB 应用程序在迁移到 DocumentDB 时都需要重新设计

  2. 针对 DocumentDB API 编写的任何新应用程序只支持 MongoDB 功能的子集

  3. 为 DocumentDB 编写的任何应用程序都将锁定在 AWS 上。

测试数量成功失败
jsCore1030381649
聚合32897231
jsCore_Decimal14140
change_streams39831
jsCore_txns492128
jsonSchema*21219
总计1,481523958

*DocumentDB API 仿真不支持的功能

从功能角度来看,DocumentDB 最接近 2018 年发布的 MongoDB 4.0。因此,开发者需要

  1. 在应用程序层重新实现所需的数据库功能,这会减慢应用程序开发的速度

  2. 将多份数据移动到相邻的 AWS 技术,这将导致开发成本和运营成本的增加以及平台复杂性的增加

主要差距包括

  • DocumentDB 仅支持 MongoDB 查询语言的一部分。
  • 支持的 MongoDB 4.0 聚合管道阶段和查询语言运算符不到 50%。缺失的功能包括

    • 没有图遍历,也没有数据的分解或桶划分。
    • 只有有限的算术、数组和集合运算符可用。
    • 没有即时物化视图
    • 也无法使用聚合表达式与查询语言结合使用。
    • 聚合管道不支持类型转换。这些转换允许您在数据库中本地运行复杂的数据转换,从而消除许多昂贵、缓慢且脆弱的ETL过程。
    • 最近MongoDB版本中添加的聚合管道阶段和运算符,包括正则表达式、时间戳、三角学、合并、自定义聚合表达式、联合等。

  • 没有架构治理来控制数据质量。

  • 尽管声称支持变更流,但超过80%的MongoDB变更流正确性测试仍然失败,这是由于DocumentDB。

    • 不支持在非主节点上打开变更流。在没有分片支持的情况下,应用程序的所有写操作也必须由那个唯一的DocumentDB主节点提供服务,因此添加变更流可能会产生潜在的显著竞争,影响应用程序的吞吐量和延迟。
    • 不支持DDL事件,包括删除、重命名和dropDatabase,阻止开发者响应集合和数据库级别的更改。
    • 不支持$replaceRoot、$replaceWith、$redact、$set或$unset聚合管道,限制了过滤或修改变更流输出的能力。
    • resume_after与MongoDB API不兼容,限制了用户在MongoDB和DocumentDB之间切换应用程序的能力。
    • 无法为变更流设置细粒度、按用户权限。如果数据库上启用了变更流,任何具有读取权限的用户都可以看到数据库上的所有更改。
    • 变更事件在默认情况下存储3小时后将被删除。MongoDB可以在oplog滚动之前交付变更事件,没有硬性限制。
    • 变更流会因存储和交付更改而产生额外费用。MongoDB Atlas中的变更流没有额外费用。

  • 没有即时物化视图
  • 光标选项有限:不支持排序或可尾随光标。
  • 没有因果一致性保证,通过消除跨副本执行单调读取的能力,降低了数据质量。
  • DocumentDB没有实现MongoDB API的可调一致性选项。即使在需要更高吞吐量和降低耐久性保证的情况下,例如流式传输IoT传感器数据、用户跟踪或大型社交媒体平台,客户端也必须等待所有写操作达到大多数节点。

在4.0更新中添加的DocumentDB多文档ACID事务支持与MongoDB事务相比有限,标准测试套件的失败率超过一半。

  • DocumentDB事务只能达到与等效MongoDB Atlas配置相近的~65%的吞吐量,延迟接近20%更高。
  • DocumentDB事务可能是不确定的和“模糊的”。
  • 受超时或节点故障影响的交易将返回一个错误,无法告知用户交易是成功还是失败,可能违反数据完整性和ACID保证。为了避免这种“模糊性”,亚马逊的文档建议用户重写他们的代码,使所有更新都具有幂等性,消耗宝贵的开发资源。
  • 事务无法处理超过32MB的数据。
  • 由于DocumentDB不支持分片,事务仅限于在单个主节点上的集合上运行,限制了可扩展性。
  • DocumentDB不支持可重试的写操作或提交,这意味着开发者必须自己开发复杂错误处理代码。

相比之下,Atlas 在每个新数据库版本宣布为“一般可用”时立即更新,这意味着开发者无需等待数月或数年即可访问最新的平台增强功能。自2021年6月MongoDB 5.0发布以来,Atlas 现在更新得更频繁,每个季度都提供新的GA版本,这使得DocumentDB更加落后。MongoDB 5.0是第一个提供稳定API的版本,允许用户将应用程序绑定到MongoDB API的特定版本。这让他们有信心,即使在数据库升级的情况下,代码也能连续多年不间断地运行。稳定API为您提供了投资保护和API稳定性的水平,这在大多数其他数据库(包括DocumentDB)中都是不可能的。

这项服务由MongoDB及其合作伙伴生态系统的数千名支持工程师、顾问和解决方案架构师提供支持,这些人员在过去十年中支持了数以万计的MongoDB客户,积累了集体MongoDB知识。

安全港

对我们产品中描述的任何功能或功能的发展、发布和时机均由我们自行决定。此信息仅用于概述我们的产品方向,不应依赖于做出购买决策,也不是提供任何材料、代码或功能的承诺、保证或法律义务。