Amazon dynamodb DynamoDB分区键是如何工作的?

Amazon dynamodb DynamoDB分区键是如何工作的?,amazon-dynamodb,Amazon Dynamodb,我试图理解分区是如何为DynamoDB表创建的 根据这一点,“具有相同分区键的所有项都存储在一起”,因此,如果我有一个用户id为1到1000的表,这是否意味着我将有1000个分区?或者这取决于“内部哈希函数”,但我们如何知道将有多少个分区 后来它建议使用1-10之间的随机后缀来平均分配每个分区的数据,但它怎么知道它将查询10次给定的发票号呢?只有当您有10个分区时才会这样做吗?但是在这种情况下,您可能有数千个发票号,这意味着将创建相同数量的分区,并且进行查询以查询发票号当创建Amazon Dyn

我试图理解分区是如何为DynamoDB表创建的

根据这一点,“具有相同分区键的所有项都存储在一起”,因此,如果我有一个用户id为1到1000的表,这是否意味着我将有1000个分区?或者这取决于“内部哈希函数”,但我们如何知道将有多少个分区


后来它建议使用1-10之间的随机后缀来平均分配每个分区的数据,但它怎么知道它将查询10次给定的发票号呢?只有当您有10个分区时才会这样做吗?但是在这种情况下,您可能有数千个发票号,这意味着将创建相同数量的分区,并且进行查询以查询发票号

当创建Amazon DynamoDB表时,您可以以每秒读取和每秒写入为单位指定所需的吞吐量。然后,将跨多个服务器(分区)提供该表,这些服务器(分区)足以提供请求的吞吐量

您对创建的分区数量没有可见性,它完全由DynamoDB管理。随着数据量的增加或所提供的吞吐量的增加,将创建额外的分区

假设您已请求每秒1000次读取,并且数据已跨10台服务器(10个分区)进行内部分区。每个分区每秒将提供100次读取。如果所有读取请求都针对相同的分区密钥,则吞吐量将限制为每秒100次读取。如果请求分布在一系列不同的值上,吞吐量可以是每秒读取1000次

如果对同一分区键进行多个查询,可能会导致热分区,从而限制总可用吞吐量

把它想象成一家在出纳员窗口前排队的银行。如果每个人都在一个出纳员前排队,那么服务的顾客就会减少。跨多个不同的出纳员窗口分发客户更有效。用于分发客户的良好分区键可能是客户编号,因为每个客户的编号不同。一个糟糕的分区键可能是他们的邮政编码,因为他们都住在银行附近的同一个区域

简单的规则是,您应该选择一个具有不同值范围的分区键


请参见:根据AWS DynamoDB博客帖子:

选择正确的DynamoDB分区键是 设计和构建可扩展且可靠的应用程序 发电机B.

什么是分区键?

DynamoDB支持两种类型的主键:

分区键:也称为哈希键,分区键由单个属性组成。DynamoDB中的属性在 在其他数据库系统中创建字段或列的方法很多

分区键和排序键:被称为复合主键或散列范围键,这种类型的键由两个属性组成。这个 第一个属性是分区键,第二个属性是 排序键。以下是一个例子:

为什么我需要分区密钥?

DynamoDB将数据存储为属性组,称为项。项目 与其他数据库系统中的行或记录类似。发电机 根据主键值存储和检索每个项,主键值 必须是唯一的。项目分布在10 GB的存储单元中, 称为分区(DynamoDB内部的物理存储)。每张桌子 有一个或多个分区,如图2所示。更多 有关详细信息,请参阅DynamoDB中的了解分区行为 开发者指南

DynamoDB使用分区键的值作为内部 散列函数。哈希函数的输出决定了 存储项的分区。每个项目的位置都是 由其分区键的哈希值确定

具有相同分区键的所有项存储在一起,并且 复合分区键按排序键值排序。发电机 如果集合大小变大,将按排序键分割分区 超过10GB

分区键建议

使用高基数属性。这些属性具有 每个项目的不同值,如电子邮件id、员工编号、, customerid、sessionid、ordered等等

使用复合属性。尝试将多个属性组合到一起 如果符合您的访问模式,则形成唯一密钥。例如 考虑使用Cuffer-ID+CudiTiD+国家代码的订单表 分区键和订单日期作为排序键

当读取流量较大时,缓存常用项。 缓存充当低通过滤器,防止异常读取数据 来自淹没分区的流行项目。例如,考虑一张表格 它包含产品的交易信息。一些交易预计将被取消 在黑色星期五或圣诞节等大型销售活动中比其他活动更受欢迎 网络星期一

将预先确定范围内的随机数/数字添加到写重中 用例。如果您希望分区键有大量写入, 使用附加前缀或后缀(预定义的固定数字 范围,比如1-10),并将其添加到分区键中。例如 考虑一张发票交易表。单个发票可以包含 每个客户有数千笔交易


阅读更多@

混淆点:

其他答案已经详细解释了DynamoDB如何创建分区。所以不谈细节了,让我来解释一下