DynamoDB 如何同时支持 Key-Value 和 Document 数据库属性

JKC*_*JKC 14 nosql amazon-dynamodb

根据 DynamoDB 的文档,它支持 NoSQL 的键值和面向文档的属性,即使其他 NoSQL 数据库仅属于一种类型:键值、文档、图形或面向列

它还说

Amazon DynamoDB“基于 Dynamo 的原则构建”[3],是 AWS 基础设施内的托管服务。然而,Dynamo 基于无领导者复制,而 DynamoDB 使用单领导者复制。

而迪纳摩则是

一组技术,共同构成高可用的键值结构化存储系统[1]或分布式数据存储

因此,当 DynamoDB 建立在与面向文档的存储系统无关的 Dynamo 原则之上时,并且由于开发人员必须创建主键并且表中的每个项目都需要键,因此 DynamoDB 如何以及在什么意义上被称为面向文档的数据库 ?

数据库首先可以分为两种类型的 NoSQL 数据库吗?

Nad*_*'El 19

首先,重要的是要认识到“Dynamo”是亚马逊设计的早期nosql数据库,其设计于2007年公开(例如,参见https://www.allthingsdistributed.com/2007/10/amazons_dynamo.html) 。后来其他人采用了这种设计和其他当代设计(例如 Google 的 BigTable)并对其进行了改进,产生了诸如 Cassandra (2008) 等项目。Amazon 的DynamoDB于 2012 年才发布,基于其他系统(尤其是 Cassandra)的许多想法,与最初的“Dynamo”几乎没有共同之处。因此,当您讨论现代 DynamoDB 时,几乎所有关于原始“Dynamo”的内容都无关紧要。

现在关于您的主要问题:

键值存储为每个键保存一个。可以说,如果该值可以是整个文档,则可以将此数据库称为“文档存储”。从这个意义上说,DynamoDB 是一个文档存储。DynamoDB API 可让您方便地将 JSON 文档存储为值,并且还可以直接读取或写入该文档的一部分,而不是读取或写入整个文档(尽管您实际上为读取和写入整个文档付费)。

您应该注意到,DynamoDB,如 Cassandra 和 BigTable(与原始的“Dynamo”不同)实际上为您提供的不仅仅是这些:每个所谓的“分区键”不仅可以保存一个值(或文档),还可以保存一个排序列表这样的价值观。我在我的问题How do you call the data model of DynamoDB and Cassandra?中提到了这个有趣的功能,但我不知道如何调用它。