我们比较了 MongoDB 和 DynamoDB,它们的优缺点、数据类型、成本、可靠性、性能和安全性。
作者:Shawn Adams
数据库是许多应用程序和服务的关键架构组件。
传统上,组织选择 SQL Server、Oracle、MySQL 和 Postgres 等关系数据库。关系数据库使用表和结构化语言来存储数据。它们通常具有固定的架构、严格的数据类型以及使用外键在表之间正式定义的关系。它们可靠、快速,并支持有助于加强数据完整性的检查和约束。
不过,它们并不完美。随着公司变得越来越数字化,他们经常开始生成大量数据,他们需要一个地方来存储它。关系数据库可以很好地扩展,但是当公司拥有的数据多于单个数据库服务器可以管理的数据时,扩展可能会很痛苦。
另一方面,非关系型数据库(通常称为 NoSQL 数据库)是用于大数据和实时 Web 应用程序的灵活数据库。这些数据库是出于存储大量非结构化数据的需要而诞生的。NoSQL 数据库并不总是提供与关系数据库相同的数据完整性保证,但它们更容易跨多个服务器进行横向扩展。
NoSQL 数据库已经变得如此流行,以至于大公司依靠它们来存储数百 TB 的数据并每秒运行数百万次查询。那么,与传统的关系数据库相比,为什么 NoSQL 数据库变得如此流行呢?
一方面,NoSQL 数据库可以接受任何类型的数据:结构化、非结构化或半结构化。这种灵活性使它们成为许多用例的首选数据库。其次,NoSQL 是无模式的,因此数据库项可以具有完全不同的结构。如前所述,由于其架构,NoSQL 数据库比关系数据库更容易水平扩展。
市场上有许多 NoSQL 数据库。两个流行的选项是MongoDB和Amazon DynamoDB,架构师经常发现自己在两者之间进行选择。在本文中,我们将比较 MongoDB 和 Amazon DynamoDB,并强调它们的显着差异。我们将介绍它们的优缺点、数据类型的差异,并讨论成本、可靠性、性能和安全性等因素。
在比较 MongoDB 和 DynamoDB 之前,让我们深入了解每个解决方案,以了解它们是什么、它们的特点以及它们的优缺点。
MongoDB
MongoDB是一个 NoSQL、面向文档的通用数据库管理系统。它针对低延迟、高吞吐量和高可用性进行了优化。它还支持基于 JavaScript 的查询语言来运行命令和检索数据,官方客户端驱动程序可用于十多种编程语言。它是一个跨平台、开源的非关系型数据库,将数据存储为文档集合。
MongoDB 在内部使用 BSON 来存储文档,它是 JSON 的二进制表示,它完全支持 JSON 的所有特性,支持额外的数据类型、更有效的压缩和更容易解析。虽然 MongoDB 集合可以具有数据库验证新文档所依据的模式,但模式验证是可选的。
MongoDB的特点
MongoDB 是一个通用数据库。它可以在应用程序中服务于各种负载和多种用途。它还具有灵活的模式设计,这意味着没有固定的模式来定义如何存储数据,并且它可以垂直和水平扩展。MongoDB 考虑了身份验证和授权等安全特性。它还有一个文档模型,可以映射到应用程序代码中的对象,从而可以轻松处理数据。
MongoDB的优点
- 灵活性: MongoDB 具有灵活的数据库模式。您可以将信息插入数据库,而无需担心匹配标准或数据类型。MongoDB 支持比 DynamoDB 更多的本机数据类型,它允许您嵌套文档。
- 系统设计:除了容纳大量快速变化的结构化、半结构化和非结构化数据之外,MongoDB 还使开发人员能够根据需求的变化添加到模式中。
- 数据模型:与 DynamoDB 相比,MongoDB 支持常规 JSON 和高级 BSON 数据模型,例如 int、long、date、timestamp、geospatial、floating-point 和 Decimal128。
- 随处运行:该解决方案可以在任何地方运行,因此用户可以在未来证明他们的工作,而不必担心供应商锁定。
- 成本:如果您有成本意识,MongoDB 有一个免费的开源版本。他们最近还为他们的托管云产品 MongoDB Atlas 引入了即用即付、无服务器定价选项。
MongoDB的缺点
- 内存使用: MongoDB 需要将其工作集保存在 RAM 中以达到可接受的性能。这种对 RAM 的依赖使得 MongoDB 对于许多用例来说过于昂贵。
- 数据重复:发生重复是因为在 MongoDB 中,用户倾向于使用嵌套文档,而不是像关系数据库中那样的规范化表。在某些情况下,这可能是由于 MongoDB 不支持高性能 JOIN 而需要进行非规范化,而是使用属于一起的数据存储在一起的理念来完全避免使用 JOIN。此限制可能导致数据大小和相关成本攀升。
- 索引: MongoDB 支持包含多个文档属性的简单索引和复杂复合索引。与大多数数据库一样,设计不佳或缺少索引会减慢读写速度,因为每次有人在集合中插入新文档时,索引都必须更新。
DynamoDB
Amazon DynamoDB 是一个快速、灵活的 NoSQL 数据库。它适用于需要任何规模的一致延迟的所有应用程序。它是一个完全托管的 NoSQL 数据库,非常适合文档和键值模型。Amazon 开发了 DynamoDB 作为托管数据库,用于需要类似、简单查询模式的应用程序。
DynamoDB 可以按需扩展,以支持几乎无限的读写操作,响应时间低于个位数毫秒。它非常适合移动、网络、游戏和广告技术。
DynamoDB 的特点
DynamoDB 是无服务器的,并且可以水平扩展以支持任何大小的表,从而有利于大规模性能。此外,通过键查询时,查询性能不会随着数据库大小而降低。它还具有灵活的模式,使您能够在需要更改时快速调整表,而无需重构表模式(如关系数据库中所要求的那样)。
DynamoDB 还提供全局表,尽管需要额外付费。这些表跨 AWS 区域复制您的数据,使您的应用程序可以轻松地在本地访问所选区域中的数据。DynamoDB 还会持续备份您的数据以防止数据丢失。它加密您的数据以提高安全性,非常适合具有严格安全要求的企业应用程序。
DynamoDB 的优点
- 可定制: DynamoDB 数据库可以根据您的应用程序的优先级进行修改。
- 快速:无论您存储多少记录或按键查询频率如何,DynamoDB 都能提供出色的性能。
- 可扩展性:无论流量水平如何,DynamoDB 都可以无缝扩展。
- 定价: DynamoDB 使用现收现付、基于吞吐量的定价技术,其中不同的输入可能会影响价格。这有助于优化您的成本,因为它们会随着您的工作量而波动,但也可能导致您的定价无法预测。
DynamoDB 的缺点
- 有限的查询语言:与 MongoDB 相比,DynamoDB 的查询语言有限。这是因为 DynamoDB 是键值存储,而不是完整的文档数据库。每条 DynamoDB 记录都有两个键:一个分区键和一个排序键。每个查询都必须提供一个分区键,并且可以选择为排序键指定单个值或范围。而已。
- 有限的索引:与 MongoDB 相比,为您的数据建立索引不需要额外的成本,DynamoDB 索引是有限且复杂的。Amazon 将索引与数据分开计算大小和计费。
- 定价: DynamoDB 使用现收现付、基于吞吐量的定价技术,其中不同的输入可能会影响价格。这有助于优化您的成本,因为它们会随着您的工作量而波动,但也可能导致您的定价无法预测。
MongoDB 与 DynamoDB 的头对头表
Amazon DynamoDB 和 MongoDB 都是广泛使用、高度可扩展且与云兼容的 NoSQL 数据库。尽管有这些相似之处,但它们还是有一些关键的区别。下表进一步探讨了这些:
| MONGODB | 动态数据库 | |
|---|---|---|
| 资源 | MongoDB 是开源的,可以部署在大多数云和/或本地的任何地方。 | DynamoDB 来自 AWS 生态系统,只能在 AWS 内使用。 |
| 管理 | MongoDB 可以通过 MongoDB Atlas 数据库即服务进行自我管理或完全管理。 | DynamoDB 是一个完全托管的解决方案。亚马逊处理所有服务器更新、补丁更新和硬件配置。 |
| 安全 | 开发人员需要花费额外的时间在 MongoDB 上重新配置安全性,尤其是在自我管理的情况下。这是因为它在默认情况下运行,允许不受限制地直接访问数据而无需身份验证。MongoDB Atlas 需要通过 IP 访问控制或 VPC 对等连接来设置身份验证和网络访问。 | DynamoDB 的安全性一开始是限制性的,并与 AWS IAM 策略基础设施相结合。 |
| 数据库结构 | MongoDB 的数据库结构由类似 JSON 的文档组成,包括集合、键、值和文档。文档可以包含嵌套文档。 | DynamoDB 的数据库结构支持将 blob 或文档作为值。 |
| 索引使用 | MongoDB 每个集合最多支持 64 个可变索引,允许文档的结构动态更改。 | DynamoDB 支持每个表最多 20 个可变全局索引,这些索引与底层数据不兼容,最多支持 5 个本地索引,创建表后无法修改。 |
| 编程语言 | MongoDB 是用 C++ 编写的,支持 C、C++、Go、Java、JavaScript、PHP、Perl、Ruby、Python 等编程语言。 | DynamoDB 支持 Java、JavaScript、Node.js、.NET、PHP 等编程语言。 |
| 数据类型和大小限制 | MongoDB 支持各种数据类型,并允许最大 16MB 的文档大小。 | DynamoDB 对数据类型的支持有限,并允许最大为 400 KB 的项目大小。 |
| 行业用途 | 公司将 MongoDB 用于移动应用程序和内容管理系统 (CMS)。MongoDB 在可扩展性和缓存方面也非常出色。 | 游戏和物联网 (IoT) 行业广泛使用 DynamoDB。 |
| 成本 | MongoDB 使用固定定价模型,您可以提前为预置资源付费。定价基于 MongoDB Atlas 的 RAM、I/O 和存储,以及服务器和系统管理员时间(如果您自己托管 MongoDB)。成本是一致的,但对于可变工作负载可能不是最佳的。 | DynamoDB 使用可变定价模型,您可以按使用量付费,该模型基于吞吐量模型,对备份和还原、按需容量、流、更改数据捕获 (CDC) 等功能收取额外费用。这可能会导致您的成本难以预测。 |
| 查询 | MongoDB 具有丰富的查询语言。您可以通过多种方式应用它:单键、范围、图形横向、连接等。 | DynamoDB 的查询仅在本地二级索引 (LSI) 和全局二级索引 (GSI) 中可用。 |
我应该选择哪个数据库,MongoDB 还是 DynamoDB?
DynamoDB 和 MongoDB 是 MySQL、PostgreSQL 等传统数据库系统的非常成功的现代替代品。在选择数据库时,您需要考虑规模、用户要求、部署方法、存储要求和功能等因素。
如果您正在寻找具有类似 MongoDB 功能的 AWS 原生解决方案,您还可以考虑使用 Amazon DocumentDB。虽然 DocumentDB 不是基于 MongoDB 服务器,但它的能力与 MongoDB 很接近,并且兼容 MongoDB 3.6 和 4.0 API。您甚至可以使用 DocumentDB 作为 MongoDB 的替代品,因为它与 MongoDB 兼容。
MongoDB 和 DynamoDB 都是可靠的 NoSQL 数据库,可以满足并解决各种用户需求。您需要仔细考虑数据库是否完全适合您的用例。每个数据库都有独特的优势,因此在决定选择哪个 NoSQL 数据库时,请考虑您的长期云战略和应用程序的特定需求。
文章来源:https://dzone.com/articles/mongodb-vs-dynamodb-head-to-head-which-should-you




