亚马逊 DynamoDB 中,分区键和排序键有什么区别?

49

与主键、复合键和候选键相比,DynamoDB中的分区键和排序键是什么?


1
可能是DynamoDB:键及其含义的重复内容。 - Ankit Deshpande
1个回答

87

分区键用于分区数据。具有相同分区键的数据存储在一起,这使您可以在一个查询中查询具有相同分区键的数据。

(可选的)排序键确定具有相同分区键的数据存储顺序。使用聪明的排序键允许您在一个查询中查询多个项目。

例如:假设我正在为几个应用程序存储日志数据。我的分区键可以是应用程序名称,而排序键可以是日志的时间戳。这使我可以使用BEGINS WITH运算符在一个查询中查询最近一小时内特定应用程序的所有日志,甚至可以使用BETWEEN运算符查询上周三某个应用程序的所有日志。

分区键加上可选的排序键形成了表的主键,因此它们必须是唯一的。此外,它们是不可变的。

您选择分区键和排序键应基于最重要的访问模式。如果您有其他访问模式,可以通过使用全局二级索引来适应它们,但这会带来一些成本。


同样的原则,通过使用适当的分区和排序键在一个查询中返回更多的数据,是否也适用于二级索引? - Richard Dunn
@RichardDunn 二级索引的工作方式基本上相同。有本地二级索引,但我认为存在一些缺点,足以通常不使用它们:-创建表后无法添加/修改,-如果您的表中有任何LSI,则分区的总大小限制为10 GB。(如果没有LSI,则没有实际限制。来源:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-partition-sort-keys) - wvdz
@RichardDunn 全局二级索引(GSI)没有这些注意事项。对于它们而言,与主键的唯一区别是它们不能使用强一致性进行查询,只能使用最终一致性进行查询。 - wvdz
谢谢,这是非常有用的信息。 - Richard Dunn
我在想,在这种特定情况下(用于日志记录),使用应用程序名称作为分区键是否不是一个很好的主意,会导致非常少但极大的分区,从而很快耗尽RCU/WCU? - Art
@Art,不,如果你按照我回答中描述的方式使用“键条件表达式”查询数据,这不会计入你的读取容量,因为你只获取所需的数据。在DDB中常见的反模式是对所有数据使用过滤表达式。这会非常快速地消耗RCU,因为你会被计费所有在过滤器应用之前的数据。请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.FilterExpression - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接