Amazon web services dynamo DB如何存储数据?

Amazon web services dynamo DB如何存储数据?,amazon-web-services,nosql,amazon-dynamodb,system-design,Amazon Web Services,Nosql,Amazon Dynamodb,System Design,由于Dynamodb以键-值对的形式存储数据,其中键是主键的种类,值是与其关联的数据。我想知道dynamo db是否真正理解值(json)?值是指与键关联的json对象(RDBMS中的一行).dynamo db是否了解某些属性以及它将要存储的属性值 上下文:我在dynamo db中有一个person表,它有不同的属性,比如100,其中一个是age,现在假设有一些要求,我希望根据age获取一些记录。如果dynamo db逐个读取每个条目,然后读取其记录,并假设每个记录都相当大,那么dynamo d

由于Dynamodb以键-值对的形式存储数据,其中键是主键的种类,值是与其关联的数据。我想知道dynamo db是否真正理解值(json)?值是指与键关联的json对象(RDBMS中的一行).dynamo db是否了解某些属性以及它将要存储的属性值


上下文:我在dynamo db中有一个person表,它有不同的属性,比如100,其中一个是age,现在假设有一些要求,我希望根据age获取一些记录。如果dynamo db逐个读取每个条目,然后读取其记录,并假设每个记录都相当大,那么dynamo db是读取记录的全部数据,还是可以在固定时间内仅访问年龄属性,而不考虑记录的大小?

您不能这样做。整个项目始终是重试,这就是你支付。您可以做什么:

  • 使用GSI,只指定您需要的属性,这样您将只为这些属性付费
  • 使用ProjectionExpression,它将只从db返回指定的属性,因此您将有更小的网络使用量。但它是在实际读取数据库后应用的。因此,您仍将支付检索整个项目
dynamo db是否理解有一些属性以及它将要存储的属性值

不,没有

DynamoDB是NoSQL数据库的“宽列”样式。虽然在表构造时没有在主键之外定义模式,但查询能力仅限于主键或辅助索引。通过创建全局二级索引,可以查询其他属性值。本地二级索引也可以查询,但它们有点奇怪。有关两种二级索引类型的良好比较,请参见

如果您的需求确实包括属性内部的查询,请查看一些NoSQL数据库的“面向文档”样式,这是大多数人想到的样式。如果您已经嵌入AWS生态系统,并且不想脱离它,AWS将提供由AWS管理的MongoDB兼容服务


宽列和文档样式的数据存储具有不同的优缺点。一般来说,宽列方法更适合以一致的成本和速度实现极端的可伸缩性,而面向文档的方法随着数据访问模式的发展提供了更大的灵活性。选择一个最适合您的需要。

如果您扫描表格并按年龄筛选,DynamoDB将读取您的所有项目。如果您希望这样做更有效,请创建一个GSI,使用年龄作为GSI排序键,然后您的查询可以在
KeyConditionExpression
中包含
age介于10和20之间的
。是的,我会这样做。对于上面的问题,我只想知道是否在每个项中,它都是只读年龄属性?一旦它有记录,它能直接读取年龄吗?还是需要读取整个记录才能读取年龄?就像一个人有不同的记录一样,因为它在记录x处,它可以直接读取x的年龄,还是需要读取整个记录才能知道x属性中的年龄在哪里?如果该属性未设置关键帧,则DynamoDB会先读取该项,然后才能对该属性的给定值进行过滤afaik。如果它是键控的,那么DynamoDB可以简单地使用索引(包含值)。哦,那么如果我没有creategsi,并且我感兴趣的属性不是主键,那么就没有办法读取这些记录了?唯一的方法是在应用层进行完全扫描并添加过滤逻辑?正确吗?我知道我所问的不实用,但只是想更多地了解dynamo db。我的理解正确吗?不完全正确。你总是需要为阅读整个项目付费。此外,如果你扫描,你会阅读整张表,然后付钱。如果ProjectionExpression位于DynamoDB层,则应用程序将只接收指定的属性。但你要为整个项目付费实际上我在读一篇博客,上面说,如果我们在非索引列上查询,那么在SQL中比在非SQL中查询要快。因为SQL可以转到那个特定的列,扫描所有的行,并检查是否满足creteria。但在没有SQL的情况下,它必须读取一行的整个记录,因为它无法通过jsut读取非基于索引的列,而转到特定的列。OS我不明白这是可伸缩性和灵活性之间的选择。DynamoDB希望您能够预先表达大多数访问模式,但不要担心数据的结构。通过这样做,无论数据如何增长,您都可以获得一致的查询时间。关系数据库提供了相反的功能:首先描述数据的结构,然后找出访问模式。这使您可以根据需要引入新的访问模式,但随着数据的增长,访问时间会变慢。