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

MongoDB与Oracle比较

概述

概述

在20世纪70年代,甲骨文公司成为首家商业化的关系型数据库公司。当时,软件工程师在纸上编写代码,而甲骨文创建了提供巨大效率提升的软件。RDBMS成为标准,甲骨文也成为企业中最稳定、最根深蒂固的软件供应商之一。在过去十年中,像MongoDB这样的替代方案出现,以应对我们存储和管理数据方式的改变。

如今,现代企业正在考虑如何更好地利用他们的数据——无论是为了获得更好的客户洞察,适应不断变化的用户期望,还是以新的应用程序和商业模式击败竞争对手。因此,推动早期关系型数据库发展的许多假设已经发生了变化。

  • 对更高开发生产力和更快上市时间的需求,传统的刚性关系型数据模型和单体应用程序的瀑布式开发让位于敏捷方法、微服务和DevOps,将发布周期从数月和数年压缩到数天和数周。

  • 管理大量新的、快速变化的数据类型的需求——由新的网络、移动、社交和物联网应用程序生成的结构化、半结构化和多态数据。

  • 向分布式系统和云计算的全面转型,使开发人员能够利用按需、高度可扩展的计算和存储基础设施,同时能够为全球任何地方工作的人提供服务,并满足对数据主权的新一轮监管需求。

因此,为了满足新应用的需求和现代化现有工作负载,非表格式数据库,如MongoDB,应运而生。从MongoDB 4.0开始,支持多文档ACID事务,这使得开发者更容易解决目前或未来可能面临Oracle挑战的使用案例。

本页概述了Oracle和MongoDB以及每个的适当使用案例。您可以通过访问我们的遗留系统现代化页面了解更多关于现代化遗留系统和开发流程的好处。

什么是Oracle?

什么是Oracle?

Oracle是一家专注于数据库管理系统的全球科技公司。其核心数据库产品是Oracle Database 12c企业版(以及即将推出的18c)。这是通过按处理许可证模型销售的,并需要特定功能的授权附加组件。在Oracle中,您根据自己的需求预先定义数据库模式。然后,您设置规则来管理表中字段之间的关系。相关信息可能存储在单独的表中。然后通过使用外键和连接来关联这些信息。任何模式的变化都需要迁移程序。这个程序可能会使数据库离线或显著降低应用性能。

什么是MongoDB?

什么是MongoDB?

MongoDB是由MongoDB公司开发的非关系型数据库。MongoDB将数据以BSON(二进制JSON)这种二进制表示形式存储为文档。相关信息存储在一起,以便通过MongoDB查询语言快速查询。字段可以从文档到文档不同;无需向系统声明文档的结构——文档是自描述的。如果需要向文档添加新字段,则可以在不影响集合中其他所有文档的情况下创建该字段,无需更新中央系统目录,也无需使系统离线。可选的,可以使用模式验证来对每个集合强制执行数据治理控制。

MongoDB的文档数据模型自然映射到应用程序代码中的对象。这使得开发者容易学习和使用。文档让您能够表示层次关系,轻松存储数组和其他更复杂结构。

为12+种语言提供了本地化、惯用型的驱动程序——社区已经构建了数十种更多——使即兴查询、实时聚合和丰富索引成为提供强大程序化访问和分析任何结构化数据的强大方式。

文档可以将相关数据集合起来,这些数据在关系型模式中可能分别存储在不同的父子表中。因此,MongoDB的原子单文档操作已经提供了满足大多数应用数据完整性需求的事务语义。一个或多个字段可以在单个操作中写入。这包括对多个子文档和数组元素的更新。MongoDB提供的保证确保在更新文档时完全隔离;任何错误都会导致操作回滚,使客户端收到文档的一致视图。

多文档事务使MongoDB成为唯一能够结合传统关系型数据库的ACID保证、文档模型的速度、灵活性和强大功能,以及智能分布式系统设计以扩展和将数据放置在所需位置的数据库。通过快照隔离,事务提供了一致的数据视图,并执行全部或无操作以维护数据完整性。MongoDB中的事务感觉就像开发者在Oracle中熟悉的交易一样。它们是多语句的,语法类似(例如start_transaction和commit_transaction),因此任何具有先前交易经验的人都可以轻松地将它们添加到任何应用程序中。

与Oracle和其他关系型数据库不同,MongoDB基于分布式系统架构,而不是单体、单节点设计。因此,MongoDB提供了开箱即用的扩展和数据本地化,包括自动分片和副本集以保持始终在线的可用性。

提高开发人员生产力

使用MongoDB Atlas for the Edge和无服务器平台提高开发人员生产力

使用Atlas for the Edge将文档模型的力量带到您的移动和物联网设备上。通过本地访问您的数据以及完整的MongoDB查询语言,您的应用程序运行更快,并且可以持续运行 - 即使在网络断开时也是如此。Atlas设备同步保持MongoDB Atlas中的数据与所有设备的同步。没有本机的移动Oracle企业数据库。当开发人员需要与后端Oracle数据库同步时,他们被迫使用其他数据库技术(如SQLite或BerkeleyDB)并编写定制的、复杂的解决方案,或者支付昂贵的数据库选项,以与后端Oracle数据库同步。

Atlas App Services无服务器平台是与MongoDB协同工作的最佳方式。它通过处理诸如服务集成等日常后端工作,将开发时间减半,并将数据安全地传输到应用程序前端。Atlas App Services数据访问控制允许您直接从前端应用程序中执行任何MongoDB查询。Atlas App Services触发器允许您的应用程序实时响应对数据更改,无论更改来自何处。触发器代码在Atlas中编写和执行,这使得这些触发器比Oracle中的存储过程和触发器具有更大的灵活性,并且更容易维护。另一个好处是,Atlas App Services触发器不会消耗宝贵的数据库资源。Oracle没有提供等效的数据或服务工作方式。这迫使您浪费数月时间编写数千行无差别的模板代码,然后配置应用程序服务器来运行它。

为什么使用MongoDB

为什么使用MongoDB而不是Oracle?

所有规模的组织都在采用MongoDB,因为它使它们能够更快地构建应用程序,处理高度多样化的数据类型,并在规模上更有效地管理应用程序。

开发简化了,因为MongoDB文档自然映射到现代面向对象的编程语言。使用MongoDB消除了将代码中的对象转换为关系表中的单元格的复杂对象关系映射(ORM)层。

在评估数据库时,必须考虑每个解决方案的相对成本 - 不仅仅是软件的成本,还有硬件、开发和部署成本。通过提高开发人员生产力、减少许可费用和降低硬件需求,组织从Oracle切换到MongoDB可节省数百万美元的成本。

MongoDB 也可以在多个分布式数据中心内部和之间进行扩展。这提供了以前使用像 Oracle 这样的关系型数据库无法实现的新水平可用性和可伸缩性。随着您的部署在数据量和吞吐量方面增长,MongoDB 可以轻松扩展,无需停机时间,无需更改您的应用程序。相比之下,要实现 Oracle 的扩展,通常需要大量的定制工程工作或投资于昂贵的定制硬件。

如果您认为 MongoDB 是您合适的解决方案,并且您目前正在使用 Oracle,请查看我们的迁移指南和 MongoDB 的关系型迁移器 - 一款简化从关系型数据库迁移和转换数据到 MongoDB 的工具,降低您迁移到 MongoDB 的风险,同时帮助您充分利用文档模型。

选择 MongoDB 而非 Oracle 的用户

选择 MongoDB 而非 Oracle 的用户

以下示例表明,MongoDB 被选用的原因是对开发人员生产力、应用程序性能和可伸缩性的根本性改进,同时显著降低成本和锁定。

为了跟上业务需求,Travelers Insurance 使用由敏捷和 DevOps 方法支持的微服务架构现代化其开发过程。但其现有的 Oracle 和 SQL Server 数据库的僵化性限制了他们所需的快速移动。解决方案是 MongoDB 和其灵活的数据模型。他们消除了任何数据库更改需要等待 3 天的情况,创建了一个支持持续交付新业务功能的软件开发管道。

金融巨头 RBS 使用由 MongoDB 驱动的新数据架构来现代化其投资银行系统。通过停用数百台 Oracle 服务器,它提高了开发者构建新应用程序的效率,为数据扩展创建了一个简化的云原生基础设施,并避免了数百万美元的成本。

Telefonica 将其客户个性化服务从 Oracle 迁移到 MongoDB。使用 Oracle,7 名开发者、多次迭代和 14 个月的时间才构建了一个表现不佳的系统。使用 MongoDB,一个由 3 名开发者组成的小组在 3 个月内构建了其新的个性化服务,现在为全球的遗留和新产品提供动力。MongoDB 帮助 Telefonica 更加敏捷,节省资金并推动新的收入渠道。

东方航空将其旅行、搜索和应用程序从 Oracle 迁移到 MongoDB。使用 MongoDB 使公司项目和工程团队能够构建一个使用 Oracle 无法构建的应用程序,从而改变客户体验,并推动更多业务在线。文档数据模型的简单性、动态架构、惯用驱动器和索引灵活性意味着开发团队现在可以更快地推出新应用程序,同时还能实现显著的成本节约。

常见用途

MongoDB是一种通用数据库,适用于各种用例。MongoDB最常见用例包括单一视图人工智能物联网移动实时分析边缘计算个性化目录内容管理。随着多文档事务的添加,使用MongoDB解决各种用例变得更加容易。

何时使用Oracle?

在什么情况下Oracle会更合适?

虽然许多组织已经成功地将关系型数据库管理系统(RDBMS)迁移到MongoDB,但您不能直接将MongoDB用作围绕关系数据模型和SQL构建的旧应用的替代品。然而,组织正在从将关键任务、收入生成应用程序现代化到MongoDB中受益。例如,将其电子商务平台从旧的关系型数据库迁移到MongoDB。因此,它通过降低延迟8倍和消除系统升级期间的停机时间来改善客户体验。思科的开发团队能够更快地构建和发布新应用,而公司的电子商务平台可以利用云计算带来的业务敏捷性。

概述

在20世纪70年代,甲骨文公司成为首家商业化的关系型数据库公司。当时,软件工程师在纸上编写代码,而甲骨文创建了提供巨大效率提升的软件。RDBMS成为标准,甲骨文也成为企业中最稳定、最根深蒂固的软件供应商之一。在过去十年中,像MongoDB这样的替代方案出现,以应对我们存储和管理数据方式的改变。

如今,现代企业正在考虑如何更好地利用他们的数据——无论是为了获得更好的客户洞察,适应不断变化的用户期望,还是以新的应用程序和商业模式击败竞争对手。因此,推动早期关系型数据库发展的许多假设已经发生了变化。

  • 对更高开发生产力和更快上市时间的需求,传统的刚性关系型数据模型和单体应用程序的瀑布式开发让位于敏捷方法、微服务和DevOps,将发布周期从数月和数年压缩到数天和数周。

  • 管理大量新的、快速变化的数据类型的需求——由新的网络、移动、社交和物联网应用程序生成的结构化、半结构化和多态数据。

  • 向分布式系统和云计算的全面转型,使开发人员能够利用按需、高度可扩展的计算和存储基础设施,同时能够为全球任何地方工作的人提供服务,并满足对数据主权的新一轮监管需求。

因此,为了满足新应用的需求和现代化现有工作负载,非表格式数据库,如MongoDB,应运而生。从MongoDB 4.0开始,支持多文档ACID事务,这使得开发者更容易解决目前或未来可能面临Oracle挑战的使用案例。

本页概述了Oracle和MongoDB以及每个的适当使用案例。您可以通过访问我们的遗留系统现代化页面了解更多关于现代化遗留系统和开发流程的好处。

什么是Oracle?

Oracle是一家专注于数据库管理系统的全球科技公司。其核心数据库产品是Oracle Database 12c企业版(以及即将推出的18c)。这是通过按处理许可证模型销售的,并需要特定功能的授权附加组件。在Oracle中,您根据自己的需求预先定义数据库模式。然后,您设置规则来管理表中字段之间的关系。相关信息可能存储在单独的表中。然后通过使用外键和连接来关联这些信息。任何模式的变化都需要迁移程序。这个程序可能会使数据库离线或显著降低应用性能。

什么是MongoDB?

MongoDB是由MongoDB公司开发的非关系型数据库。MongoDB将数据以BSON(二进制JSON)这种二进制表示形式存储为文档。相关信息存储在一起,以便通过MongoDB查询语言快速查询。字段可以从文档到文档不同;无需向系统声明文档的结构——文档是自描述的。如果需要向文档添加新字段,则可以在不影响集合中其他所有文档的情况下创建该字段,无需更新中央系统目录,也无需使系统离线。可选的,可以使用模式验证来对每个集合强制执行数据治理控制。

MongoDB的文档数据模型自然映射到应用程序代码中的对象。这使得开发者容易学习和使用。文档让您能够表示层次关系,轻松存储数组和其他更复杂结构。

为12+种语言提供了本地化、惯用型的驱动程序——社区已经构建了数十种更多——使即兴查询、实时聚合和丰富索引成为提供强大程序化访问和分析任何结构化数据的强大方式。

文档可以将相关数据集合起来,这些数据在关系型模式中可能分别存储在不同的父子表中。因此,MongoDB的原子单文档操作已经提供了满足大多数应用数据完整性需求的事务语义。一个或多个字段可以在单个操作中写入。这包括对多个子文档和数组元素的更新。MongoDB提供的保证确保在更新文档时完全隔离;任何错误都会导致操作回滚,使客户端收到文档的一致视图。

多文档事务使MongoDB成为唯一能够结合传统关系型数据库的ACID保证、文档模型的速度、灵活性和强大功能,以及智能分布式系统设计以扩展和将数据放置在所需位置的数据库。通过快照隔离,事务提供了一致的数据视图,并执行全部或无操作以维护数据完整性。MongoDB中的事务感觉就像开发者在Oracle中熟悉的交易一样。它们是多语句的,语法类似(例如start_transaction和commit_transaction),因此任何具有先前交易经验的人都可以轻松地将它们添加到任何应用程序中。

与Oracle和其他关系型数据库不同,MongoDB基于分布式系统架构,而不是单体、单节点设计。因此,MongoDB提供了开箱即用的扩展和数据本地化,包括自动分片和副本集以保持始终在线的可用性。

使用MongoDB Atlas for the Edge和无服务器平台提高开发人员生产力

使用Atlas for the Edge将文档模型的力量带到您的移动和物联网设备上。通过本地访问您的数据以及完整的MongoDB查询语言,您的应用程序运行更快,并且可以持续运行 - 即使在网络断开时也是如此。Atlas设备同步保持MongoDB Atlas中的数据与所有设备的同步。没有本机的移动Oracle企业数据库。当开发人员需要与后端Oracle数据库同步时,他们被迫使用其他数据库技术(如SQLite或BerkeleyDB)并编写定制的、复杂的解决方案,或者支付昂贵的数据库选项,以与后端Oracle数据库同步。

Atlas App Services无服务器平台是与MongoDB协同工作的最佳方式。它通过处理诸如服务集成等日常后端工作,将开发时间减半,并将数据安全地传输到应用程序前端。Atlas App Services数据访问控制允许您直接从前端应用程序中执行任何MongoDB查询。Atlas App Services触发器允许您的应用程序实时响应对数据更改,无论更改来自何处。触发器代码在Atlas中编写和执行,这使得这些触发器比Oracle中的存储过程和触发器具有更大的灵活性,并且更容易维护。另一个好处是,Atlas App Services触发器不会消耗宝贵的数据库资源。Oracle没有提供等效的数据或服务工作方式。这迫使您浪费数月时间编写数千行无差别的模板代码,然后配置应用程序服务器来运行它。

为什么使用MongoDB而不是Oracle?

所有规模的组织都在采用MongoDB,因为它使它们能够更快地构建应用程序,处理高度多样化的数据类型,并在规模上更有效地管理应用程序。

开发简化了,因为MongoDB文档自然映射到现代面向对象的编程语言。使用MongoDB消除了将代码中的对象转换为关系表中的单元格的复杂对象关系映射(ORM)层。

在评估数据库时,必须考虑每个解决方案的相对成本 - 不仅仅是软件的成本,还有硬件、开发和部署成本。通过提高开发人员生产力、减少许可费用和降低硬件需求,组织从Oracle切换到MongoDB可节省数百万美元的成本。

MongoDB 也可以在多个分布式数据中心内部和之间进行扩展。这提供了以前使用像 Oracle 这样的关系型数据库无法实现的新水平可用性和可伸缩性。随着您的部署在数据量和吞吐量方面增长,MongoDB 可以轻松扩展,无需停机时间,无需更改您的应用程序。相比之下,要实现 Oracle 的扩展,通常需要大量的定制工程工作或投资于昂贵的定制硬件。

如果您认为 MongoDB 是您合适的解决方案,并且您目前正在使用 Oracle,请查看我们的迁移指南和 MongoDB 的关系型迁移器 - 一款简化从关系型数据库迁移和转换数据到 MongoDB 的工具,降低您迁移到 MongoDB 的风险,同时帮助您充分利用文档模型。

选择 MongoDB 而非 Oracle 的用户

以下示例表明,MongoDB 被选用的原因是对开发人员生产力、应用程序性能和可伸缩性的根本性改进,同时显著降低成本和锁定。

为了跟上业务需求,Travelers Insurance 使用由敏捷和 DevOps 方法支持的微服务架构现代化其开发过程。但其现有的 Oracle 和 SQL Server 数据库的僵化性限制了他们所需的快速移动。解决方案是 MongoDB 和其灵活的数据模型。他们消除了任何数据库更改需要等待 3 天的情况,创建了一个支持持续交付新业务功能的软件开发管道。

金融巨头 RBS 使用由 MongoDB 驱动的新数据架构来现代化其投资银行系统。通过停用数百台 Oracle 服务器,它提高了开发者构建新应用程序的效率,为数据扩展创建了一个简化的云原生基础设施,并避免了数百万美元的成本。

Telefonica 将其客户个性化服务从 Oracle 迁移到 MongoDB。使用 Oracle,7 名开发者、多次迭代和 14 个月的时间才构建了一个表现不佳的系统。使用 MongoDB,一个由 3 名开发者组成的小组在 3 个月内构建了其新的个性化服务,现在为全球的遗留和新产品提供动力。MongoDB 帮助 Telefonica 更加敏捷,节省资金并推动新的收入渠道。

东方航空将其旅行、搜索和应用程序从 Oracle 迁移到 MongoDB。使用 MongoDB 使公司项目和工程团队能够构建一个使用 Oracle 无法构建的应用程序,从而改变客户体验,并推动更多业务在线。文档数据模型的简单性、动态架构、惯用驱动器和索引灵活性意味着开发团队现在可以更快地推出新应用程序,同时还能实现显著的成本节约。

MongoDB是一种通用数据库,适用于各种用例。MongoDB最常见用例包括单一视图人工智能物联网移动实时分析边缘计算个性化目录内容管理。随着多文档事务的添加,使用MongoDB解决各种用例变得更加容易。

在什么情况下Oracle会更合适?

虽然许多组织已经成功地将关系型数据库管理系统(RDBMS)迁移到MongoDB,但您不能直接将MongoDB用作围绕关系数据模型和SQL构建的旧应用的替代品。然而,组织正在从将关键任务、收入生成应用程序现代化到MongoDB中受益。例如,将其电子商务平台从旧的关系型数据库迁移到MongoDB。因此,它通过降低延迟8倍和消除系统升级期间的停机时间来改善客户体验。思科的开发团队能够更快地构建和发布新应用,而公司的电子商务平台可以利用云计算带来的业务敏捷性。

术语和概念

Oracle中的许多概念在MongoDB中都有密切的对应物。下表概述了Oracle和MongoDB之间的常见概念。

OracleMongoDB
ACID事务ACID事务
集合
文档
字段
二级索引二级索引
连接(JOINs)嵌入文档、$lookup & $graphLookup
GROUP_BY聚合管道
Oracle
ACID事务
二级索引
连接(JOINs)
GROUP_BY
MongoDB
ACID事务
集合
文档
字段
二级索引
嵌入文档、$lookup & $graphLookup
聚合管道

特性比较

与Oracle类似,MongoDB提供了一套丰富的特性和功能,这些功能远远超出了简单NoSQL数据存储所提供的功能。MongoDB拥有丰富的查询语言、高度功能的二级索引(包括文本搜索和地理空间搜索)、强大的聚合框架用于数据分析、分面搜索、图处理等。使用MongoDB,您还可以在比关系数据库更广泛的数据类型上使用这些功能,并且可以大规模实现。

OracleMongoDBNoSQL数据存储
ACID事务
灵活、丰富的数据模型
部分:支持模式灵活性,但仅支持简单的数据结构
模式治理
表达式丰富的连接、分面搜索、图查询、强大的聚合
惯用、本地语言驱动程序
具有数据本地性控制的水平扩展
部分:没有对数据本地性的控制
准备进行分析和BI
企业级安全和成熟的管理工具
所有主要云上的数据库作为服务部分:AWS和Oracle云
Oracle
ACID事务
灵活、丰富的数据模型
模式治理
表达式丰富的连接、分面搜索、图查询、强大的聚合
惯用、本地语言驱动程序
具有数据本地性控制的水平扩展
准备进行分析和BI
企业级安全和成熟的管理工具
所有主要云上的数据库作为服务部分:AWS和Oracle云
MongoDB
ACID事务
灵活、丰富的数据模型
模式治理
表达式丰富的连接、分面搜索、图查询、强大的聚合
惯用、本地语言驱动程序
具有数据本地性控制的水平扩展
准备进行分析和BI
企业级安全和成熟的管理工具
所有主要云上的数据库作为服务
NoSQL数据存储
ACID事务
灵活、丰富的数据模型部分:支持模式灵活性,但仅支持简单的数据结构
模式治理
表达式丰富的连接、分面搜索、图查询、强大的聚合
惯用、本地语言驱动程序
具有数据本地性控制的水平扩展部分:没有对数据本地性的控制
准备进行分析和BI
企业级安全和成熟的管理工具
所有主要云上的数据库作为服务

查询语言

Oracle和MongoDB都具有丰富的查询语言。以下是一些SQL语句及其在MongoDB中的映射示例。更全面的语句列表可以在MongoDB文档中找到。

OracleMongoDB
INSERT INTO users (user_id, age, status) VALUES ('bcd001', 45, 'A')db.users.insert({ user_id: 'bcd001', age: 45, status: 'A' })
SELECT * FROM usersdb.users.find()
UPDATE users SET status = 'C' WHERE age > 25db.users.update( { age: { $gt: 25 } }, { $set: { status: 'C' } }, { multi: true } )
db.start_transaction() cursor.execute(orderInsert, orderData) cursor.execute(stockUpdate, stockData) db.commit()s.start_transaction() orders.insert_one(order, session=s) stock.update_one(item, stockUpdate, session=s) s.commit_transaction()
Oracle
INSERT INTO users (user_id, age, status) VALUES ('bcd001', 45, 'A')
SELECT * FROM users
UPDATE users SET status = 'C' WHERE age > 25
db.start_transaction() cursor.execute(orderInsert, orderData) cursor.execute(stockUpdate, stockData) db.commit()
MongoDB
db.users.insert({ user_id: 'bcd001', age: 45, status: 'A' })
db.users.find()
db.users.update( { age: { $gt: 25 } }, { $set: { status: 'C' } }, { multi: true } )
s.start_transaction() orders.insert_one(order, session=s) stock.update_one(item, stockUpdate, session=s) s.commit_transaction()
想要了解更多信息?获取我们关于关系数据库迁移的指南。

为希望了解如何迁移到MongoDB的项目团队提供一步步指南,涵盖了模式设计、查询语言和数据迁移。它还解释了来自关系数据库背景的团队在MongoDB上构建新应用程序时需要考虑的因素。