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

How is it possible for DynamoDB to support both Key-Value and Document database properties at the same time

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

也说

Amazon DynamoDB is "built on the principles of Dynamo"[3] and is a hosted service within the AWS infrastructure. However, while Dynamo is based on leaderless replication, DynamoDB uses single-leader replication.

Dynamo 是

A set of techniques that together can form a highly available key-value structured storage system[1] or a distributed data store

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

一个数据库首先可以归入两种类型的 NoSQL 数据库吗?

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

现在关于你的主要问题:

键值存储为每个键保存一个 。可以说,如果该值可以是整个 document,则可以将此数据库称为“文档存储”。从这个意义上说,DynamoDB 是一个文档存储。 DynamoDB API 可以让你方便的存储一个 JSON 文档作为值,也可以直接读或写这个文档的一部分,而不是读或写整个文档(虽然,你实际上是为读和写付费的整个文档)。

您应该注意到 DynamoDB,就像 Cassandra 和 BigTable(与最初的“Dynamo”不同)实际上为您提供的不止于此:每个所谓的“分区键”不仅可以保存一个值(或文档),但是这些值的排序列表。我在我的问题中提到了这个我不知道如何称呼的有趣功能