数据库是大多数应用程序和网站的关键组成部分。它们存储内容和用户详细信息等关键数据,并可能捕获应用程序中发生的事件。目前有许多不同的数据库技术,您所选择的数据库技术会影响到从应用架构到开发流程的方方面面。
在此,我们将仔细研究DynamoDB和MongoDB这两种非传统关系数据库的流行产品。您可以决定这种 “NoSQL” 方法是否适合您的应用,以及这两种数据库平台中哪一种最适合您。
了解技术:DynamoDB与MongoDB
在过去十年中,NoSQL数据库越来越受欢迎,以满足对更灵活和可扩展技术的需求。社交网络和用户生成内容的增长在一定程度上推动了这一需求。
多年来,大多数应用都使用传统的SQL数据库,其中每一行数据都描述了一个不同的实体及其与其他实体的关系。在响应查询时,关系数据库将不同行的数据连接起来,然后返回给客户端应用程序。这种架构经过优化,可减少存储并消除重复数据,因为结果集中的每个元素通常只在数据库中存储一次。
相比之下,NoSQL数据库通常将基本实体和相关数据存储在单个文档中。这意味着某些数据被记录多次,增加了存储需求。但是,随着存储成本的下降,NoSQL解决方案的可扩展性在许多用例中占据了优先地位。其底层架构使NoSQL数据库特别适合在集群中运行,数据分布在多个节点上。
什么是DynamoDB?
DynamoDB是一种无服务器NoSQL数据库,由亚马逊开发,用于支持其著名的在线购物目的地,并于2012年在其云托管平台亚马逊网络服务(AWS)上提供给开发人员。与亚马逊的商店一样,DynamoDB在响应查询时无需像关系数据库那样进行复杂的连接。
DynamoDB针对规模进行了优化,是一种键值项存储,与特定键相关的所有数据都存储在其中。无需连接!由于消除了这一要求,工程师对DynamoDB进行了优化,以快速返回数据。
亚马逊通过AWS将DynamoDB作为完全托管服务提供。这就是DynamoDB受到开发人员欢迎的原因,开发人员可以使用DynamoDB,而数据库开销极小。此外,该服务可随着应用程序用户的增加而轻松扩展。而且,如果公司使用其他AWS工具,DynamoDB可以无缝地插入其中。
DynamoDB徽标
DynamoDB如何工作?
DynamoDB是一个NoSQL键值项存储,由于它是一个托管服务,其底层架构和基础设施对开发人员是抽象的。
在DynamoDB的引擎盖下,数据使用主键进行分区,每个分区包含三个节点,每个节点保存一份数据副本。由于数据分布在多台服务器上,因此这种分区可以轻松实现扩展。此外,如果某个节点出现故障,数据复制还可提供冗余。
三个节点中的一个节点被指定为领导节点,所有写入数据在复制到其他两个节点之前首先在该节点发出。首先写入领导节点使DynamoDB能够保持一致的写入。为获得最佳读取一致性,所有 DynamoDB 读取也必须使用领导节点。
在读取繁重的应用程序中,这种方法会带来性能代价,因此DynamoDB为用户提供了选择 “最终 “一致性的能力。这使得读取可以分散到所有节点。然而,如果数据在读取操作之前尚未传播到所有节点,则此选项可能会牺牲准确性。
DynamoDB的优缺点
DynamoDB的主要优点是无服务器、可扩展和快速。你可以在几分钟内配置好它,只需最小的基础设施开销。AWS负责安全、升级、服务器管理和确保高可用性。此外,DynamoDB可以在按使用付费的模式下无限扩展(仅受限于AWS的物理大小)。最后,DynamoDB提供快速读取和写入,其扩展能力可确保在数据存储增长时保持快速性能。
DynamoDB的缺点是查询选项极少。关键字查询很有帮助,但如果需要更复杂的查询(如聚合),则必须将数据导出到外部数据库进行分析。此外,DynamoDB仅通过AWS提供。如果您已经集成到AWS生态系统中,那就不成问题。如果您的公司希望在内部部署,则必须另寻他处。
什么是MongoDB?
MongoDB是一种NoSQL文档存储,最初于2009年作为开源数据库发布,并提供商业支持包。它将JSON文档存储为二进制JSON(BSON)对象,可以存储嵌套属性和数组等复杂的数据结构。
MongoDB可在Windows、macOS和Linux平台上运行,支持多种编程语言。您还可以在亚马逊、谷歌和微软等流行的云平台上找到MongoDB。
MongoDB之所以流行,主要是因为其灵活性。它具有NoSQL数据库的所有优点,同时还能满足更复杂的要求,如用于数据完整性、聚合查询和数据集连接的ACID事务。而且,由于MongoDB原生支持JavaScript,因此对于使用这种流行编程语言的网站来说,MongoDB是一种越来越受欢迎的后端数据库。
MongoDB徽标
MongoDB如何工作?
MongoDB存储包含一个或多个键值对的BSON对象。这些值可以是简单的数据类型,如字符串和时间戳,也可以是复杂的数据类型,如嵌套对象和数组。
MongoDB将文档存储在集合中,类似于表格中的行。通常的做法是,一个集合中的文档共享一个相似的模式,但即使具有相同键的文档也可能具有不同的模式–具有相同名称的键并不需要存储相同的数据类型。当插入或更新记录时,MongoDB可以对属性进行强制验证,并且要求某些键中的数据必须是特定类型的。
MongoDB还提供分片功能,这与DynamoDB中的分区功能类似。分片根据分片键将数据分布到多个服务器上。分发数据可以将读写操作分散到多台服务器上,防止单台服务器过载。
MongoDB的优缺点
除了NoSQL的典型优势之外,MongoDB还支持多种平台–这对于那些希望灵活选择云服务提供商或能够托管内部数据库的公司来说至关重要。
MongoDB还通过其聚合管道支持复杂的查询和聚合。与其他NoSQL相比,MongoDB异常灵活,因为它支持分析查询、文档搜索和数据连接。不过,在大规模使用时,性能可能会下降。此外,MongoDB Atlas还为寻求消除基础设施管理负担的公司提供了无服务器选项。
MongoDB的缺点之一是其数据占用空间可能相当大,因为文档必须同时存储数据和密钥。此外,尽管MongoDB的聚合管道是强大的工具,但由于使用了定制的语法,其编写和构建异常复杂。
最后,对于不使用MongoDB Atlas的用户来说,尤其是对于使用复制和分片技术来确保系统性能的生产系统来说,存在基础设施开销。这包括监控、管理数据偏差、执行升级以及安全管理。
DynamoDB vs MongoDB
尽管DynamoDB和MongoDB都是NoSQL数据库,但它们有很大的不同。您的用例将在很大程度上决定使用哪一个。
首先,DynamoDB在模式级别的可用数据类型选项较少。例如,DynamoDB不支持日期,这意味着开发人员必须在应用程序中维护解析和处理日期的逻辑。MongoDB支持更多数据类型,包括日期。
其次,DynamoDB能够通过键值查找和表扫描进行查询。但是,它的表扫描性能不足。对于更复杂或特殊类型的查询,您的最佳选择是导出到其他数据库。相比之下,MongoDB支持分析查询和数据连接之上的键值查询。它提供更灵活的索引支持,因为您可以为任何字段添加二级索引。虽然DynamoDB支持二级索引,但它们受到概念复杂性和可创建数量的限制。
在安全方面,DynamoDB受益于AWS平台。DynamoDB的身份验证通过AWS用户访问控制进行。这使得DynamoDB数据库的安全性变得相当简单。
而使用MongoDB,您需要负责所有的安全限制,包括创建用户账户和管理网络访问。这意味着开销要高得多。然而,MongoDB Atlas将MongoDB变成了托管解决方案,从而消除了这些挑战。
作为一个托管解决方案,DynamoDB具有内置备份和恢复功能,包括多区域复制能力和简单的备份恢复。默认情况下,MongoDB不会管理这些流程,需要手动配置。MongoDB Atlas在一定程度上简化了这一过程,但需要进行额外的配置。
DynamoDB与MongoDB一览
特征 | DynamoDB | MongoDB |
数据类型 | 除日期外的大多数标准数据类型 | BSON规范中的任何数据类型,包括日期 |
查询 | 通过有限的多文档查询进行关键字查询 | 关键字查找、查询、连接和聚合 |
安全 | 内置AWS,开销小 | 自我管理,除非使用MongoDB Atlas |
可扩展性 | 内置AWS,开销小 | 自管理,除非使用MongoDB Atlas |
备份和恢复 | 内置AWS,开销小 | 自管理,除非使用MongoDB Atlas |
总体而言,MongoDB是更灵活的选择–它可以部署在任何地方,并提供更丰富的数据存储和查询工具。然而,如果要选择一个与AWS紧密集成、减少基础设施和安全开销的精简数据库,DynamoDB可能是一个不错的选择。
小结
MongoDB和DynamoDB都是高性能的NoSQL产品,它们的相对优势使其适用于截然不同的用途。对于精简而简单的解决方案,DynamoDB是一个强有力的选择。但是,如果您需要更复杂的模式、聚合查询和更好的索引支持,那么MongoDB将是您的不二之选。
请记住,灵活性的代价是基础设施开销的增加。但是,如果您需要MongoDB的灵活性并希望减少开销,那么MongoDB Atlas往往是一个经济实惠的折中方案。
评论留言