暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB与DynamoDB面对面:你应该选择哪一个?

原创 eternity 2022-07-25
3446

数据库是许多应用程序和服务的关键架构组件。

传统上,组织选择关系数据库,如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、浮点和小数128。

  • 在任何地方运行:此解决方案可以在任何地方运行,因此用户无需担心供应商锁定,即可证明其工作的可靠性。

  • 成本:如果你有成本意识,MongoDB有一个免费的开源版本。他们最近还为其托管云产品MongoDB Atlas推出了按量付费、无服务器的定价选项。

MongoDB的缺点

  • 内存使用:MongoDB需要将其工作集保留在RAM中,以实现可接受的性能。这种对RAM的依赖使得MongoDB对于许多用例来说过于昂贵。

  • 数据重复:重复发生的原因是,在MongoDB中,用户倾向于使用嵌套文档,而不是像关系数据库中那样使用规范化的表。在某些情况下,这可能是由于需要进行非规范化,因为MongoDB不支持高性能连接,而是使用属于一起的数据存储在一起,以避免完全使用连接。这种限制可能会导致数据大小和相关成本上升。

  • 索引: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索引有限且复杂,MongoDB索引数据不需要额外成本。Amazon将索引的大小和账单与数据分开。

  • 定价:DynamoDB使用按需付费、基于吞吐量的定价技术,不同的输入可能会影响价格。这有助于优化您的成本,因为它们会随着您的工作量而波动,但也可能导致您的定价不可预测。

MongoDB与DynamoDB的对比表

Amazon DynamoDB和MongoDB都是应用广泛、高度可扩展且与云兼容的NoSQL数据库。尽管有这些相似之处,但它们有一些关键的区别。下表进一步探讨了这些问题:

MONGODB DYNAMODB
Source MongoDB is open-source and can be deployed anywhere in most clouds and/or on-premises. DynamoDB is from the AWS ecosystem and can only be used within AWS.
Management MongoDB can either be self-managed or fully managed with the MongoDB Atlas database as a service. DynamoDB is a fully managed solution. Amazon handles all server updates, patch updates, and hardware provisioning.
Security Developers need to spend extra time upfront reconfiguring security on MongoDB, especially when self-managed. This is because it runs with defaults permitting unrestricted and direct access to data without authentication. MongoDB Atlas requires the setup of authentication and network access via IP access controls or VPC peering. Security for DynamoDB starts out restrictive and incorporates with AWS IAM Policy infrastructure.
Database structure MongoDB’s database structure is made of JSON-like documents comprising collections, keys, values, and documents. Documents can contain nested documents. DynamoDB’s database structure supports either blobs or documents as values.
Index use MongoDB supports up to 64 mutable indexes per collection, allowing the document’s structure to change dynamically. DynamoDB supports up to 20 mutable global indexes per table, which are not compatible with underlying data, and up to 5 local indexes that cannot be modified after table creation.
Programming language MongoDB is written in C++ and supports programming languages like C, C++, Go, Java, JavaScript, PHP, Perl, Ruby, Python, and more. DynamoDB supports programming languages like Java, JavaScript, Node.js, .NET, PHP, and more.
Data type and size restriction MongoDB supports various data types and allows document sizes of up to 16MB. DynamoDB has limited support for data types and allows item sizes of up to 400 KB.
Industry use Companies use MongoDB for mobile apps, and content management systems (CMSs). MongoDB is also excellent for scalability and caching. The gaming and Internet of things (IoT) industries widely use DynamoDB.
Cost MongoDB uses a fixed pricing model where you pay for provisioned resources ahead of time. Pricing is based on RAM, I/O, and storage for MongoDB Atlas, plus server and sysadmin time if you are hosting MongoDB yourself. Costs are consistent, but may not be optimal for variable workloads. DynamoDB uses a variable pricing model where you pay for what you use, which is based on a throughput model with additional charges for features like backup and restore, on-demand capacity, streams, change data capture (CDC), and others. This may cause your costs to be less predictable.
Querying MongoDB has a rich query language. You can apply it in various ways: single keys, ranges, graph transversals, joins, and more. DynamoDB’s querying is only available in local secondary indexes (LSI) and global secondary indexes (GSI).

MongoDB还是DynamoDB?

DynamoDB和MongoDB是传统数据库系统(如MySQL、PostgreSQL等)的非常成功的现代替代方案。在选择数据库时,需要考虑诸如规模、用户需求、部署方法、存储需求和功能等因素。

如果您正在寻找具有类似MongoDB功能的AWS本机解决方案,您也可以考虑Amazon DocumentDB。虽然DocumentDB不基于MongoDB服务器,但其功能与MongoDB相近,并且与MongoDB 3.6和4.0API兼容。您甚至可以使用DocumentDB作为MongoDB的替代品,因为它与MongoDB兼容。

MongoDB和DynamoDB都是可靠的NoSQL数据库,可以满足和解决各种用户需求。您需要仔细考虑数据库是否完全适合您的用例。每个数据库都有其独特的优势,所以在决定选择哪个NoSQL数据库时,要考虑长期的云战略和应用程序的特定需求。

原文标题:MongoDB vs. DynamoDB Head-to-Head: Which Should You Choose?
原文作者:Shawn Adams
原文链接:https://dzone.com/articles/mongodb-vs-dynamodb-head-to-head-which-should-you

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论