来源表明DynamoDB是一个键/值存储、文档存储和/或宽列存储:
在核心,DynamoDB是一个密钥/价值存储。
如果存储的值是一个文档,DynamoDB会为使用底层文档提供一些支持。就连亚马逊也同意。到目前为止,一切都很好。
然而,我看到一些说法称DynamoDB实际上是一个宽列存储(1、2、3等(。这对我来说似乎很奇怪,因为据我所知,宽列存储在技术上需要不同的数据存储模型。
将DynamoDB视为一个宽列存储是否合适?
如何调用DynamoDB和Cassandra的数据模型?我问了一个类似的问题。我注意到Cassandra和DynamoDB都有一个非常相似的数据模型,它们有时被称为";宽列存储";因为其排序键功能:
在DynamoDB(和Cassandra(中,项目被连续地存储在分区内,按照所谓的";排序键";。要定位一个项,您需要指定其分区键,并在该分区内指定其 排序键在Cassandra的背景下,从宽列存储到类似DynamoDB的存储的历史演变更容易理解,Cassandra的数据模型或多或少与DynamoDB相同:;宽列存储":每一行(称为"分区"(都有无限数量的不相关列。后来引入了CQL;聚类关键字";(这相当于Cassandra的DynamoDB的排序键(,现在每个分区不再是一个很长的不相关列的列表,而是变成了一个非常长的(经过排序的(单独项目列表。我在回答中解释了这种演变https://stackoverflow.com/a/47127723/8891224将Cassandra的数据模型与Google Bigtable进行比较,后者是典型的宽列存储。
维基百科如何定义宽列存储?
https://en.wikipedia.org/wiki/Wide-column_store打开时使用:
宽列存储(或可扩展记录存储(是NoSQL的一种类型数据库它使用表、行和列,但与关系数据库中,列的名称和格式可能与同一表格中的行到行。可以解释宽列存储作为二维键值存储。
DynamoDB有表、行(称为项(和列(称为属性(。名称和格式因行而异(主键除外(。
我认为大多数宽列存储集中定义表的模式,而DynamoDB允许每个项定义自己的模式。
一个简单的键值存储只允许您按一个键值进行查找。DynamoDB为您提供了更多的选择。
归根结底,这个命名法只是我们将事物分组到类似桶中的集体尝试。自然会有一些模糊的边缘。
要想得到Nadav的最佳答案,请小心将DynamoDB视为宽列数据存储。。。
当然,您可以在DynamoDB中使用宽列数据存储模式,例如键范围查询(但sortKey必须巧妙地构建,没有什么可以防止您出错(,但它有一个严格的限制,即行的项目大小限制为400KB。这在大多数情况下都很好,但如果你想放数百列数据,那就非常窄了。这通常是您想要对宽列数据存储执行的操作。简单地说,绕过这个限制就是地狱,您将添加其他表和联接来进行补偿。
如果你真的对在AWS上使用柱状数据存储感兴趣,我个人会使用AWS Keyspaces,因为它没有DynamoDB的限制。这将需要您设计一个数据库模式,但如果您有这么多列,我认为这是一个优势。CQL也优于DDB查询API。