aws DynamoDB 分区和数据分布

亚马逊DynamoDB在分区中存储数据。分区是一个表的存储分配,由固态驱动器(SSD)支持,并在AWS区域内的多个可用区自动复制。分区管理完全由DynamoDB处理,你永远不需要自己管理分区。

当你创建一个表时,该表的初始状态是CREATING。在这个阶段,DynamoDB会给表分配足够的分区,以便它可以处理你的配置吞吐量要求。在表的状态变为ACTIVE后,你可以开始写和读表的数据。

在以下情况下,DynamoDB会向表分配额外的分区。

1.如果你增加表的配置吞吐量设置,超过现有分区所能支持的范围。

2.如果现有的分区填满了容量,需要更多的存储空间。

分区管理在后台自动发生,对你的应用程序是透明的。你的表在整个过程中保持可用,并完全支持你的配置的吞吐量要求。

DynamoDB中的全局二级索引也是由分区组成的。全局二级索引中的数据与它的基表中的数据分开存储,但索引分区的行为与表的分区基本相同。

数据分布:分区密钥

如果你的表有一个简单的主键(只有分区键),DynamoDB根据分区键的值来存储和检索每个项目。

为了把一个项目写到表中,DynamoDB使用分区键的值作为内部哈希函数的输入。哈希函数的输出值决定了项目将被存储在哪个分区。

要从表中读取一个项目,你必须为该项目指定分区键值。DynamoDB使用这个值作为其哈希函数的输入,产生可以找到该项目的分区。

下图显示了一个名为Pets的表,它跨越了多个分区。该表的主键是AnimalType(只显示了这个键属性)。DynamoDB使用它的哈希函数来决定在哪里存储一个新的项目,在这种情况下是基于字符串Dog的哈希值。请注意,这些项目不是按照排序的顺序存储的。每个项目的位置是由其分区键的哈希值决定的。
在这里插入图片描述

数据分布:分区键和排序键

如果表有一个复合主键(分区键和排序键),DynamoDB计算分区键的哈希值的方式与数据分布中描述的一样。分区键。然而,它将所有具有相同分区键值的项目在物理上紧密地存储在一起,按排序键值排序。

要把一个项目写到表中,DynamoDB计算分区键的哈希值,以确定哪个分区应该包含这个项目。在该分区中,几个项目可能具有相同的分区键值。所以DynamoDB将该项目存储在具有相同分区键的其他项目中,按排序键的升序排列。

要从表中读取一个项目,你必须指定其分区键值和排序键值。DynamoDB会计算分区键的哈希值,得出可以找到该项目的分区。

如果你想要的项目有相同的分区键值,你可以在一个操作(查询)中从表中读取多个项目。DynamoDB会返回所有具有该分区键值的项目。另外,你可以对排序键应用一个条件,这样它就只返回一定范围内的项目。

假设Pets表有一个由AnimalType(分区键)和Name(排序键)组成的复合主键。下图显示了DynamoDB写入一个分区键值为Dog、排序键值为Fido的项目。

在这里插入图片描述

为了从Pets表中读取相同的项目,DynamoDB计算Dog的哈希值,得出这些项目所存储的分区。然后DynamoDB扫描排序键属性值,直到找到Fido。

要读取所有动物类型为狗的项目,你可以发出查询操作,而不需要指定排序键条件。默认情况下,项目会按照它们被存储的顺序返回(也就是按照排序键的升序)。你可以选择要求以降序代替。

要想只查询某些狗项目,你可以对排序键应用一个条件(例如,只查询名字以A到K范围内的字母开头的狗项目)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值