DynamoDB 中的 KeyConditionExpression 是否支持 IN 运算符?
Does `KeyConditionExpression` in DynamoDB support `IN` operator?
阅读“KeyConditionExpression”的概念https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression
我很好奇是否可以对“KeyConditionExpression”进行IN
比较。
对应的 SQL 将是:
SELECT * FROM table WHERE primary_key IN ("a","b","c")
还是我应该使用 BatchGetItem?
如果两者都可以,有什么区别?我应该使用哪一个?
我对此的回应是:大部分情况下不会,但有时会 - 我会详细说明。
DynamoDB 中的主键实际上可以是两种东西,因为有两种键:
- 分区键,这是强制性的,用于标识项目存储在哪个数据分区上,并且
- 可选的排序键,您可以在创建 table 时启用它,它用于对给定分区键内的项目进行排序。
如果只有一个分区键,那就是您项目的主键。在具有排序键的 table 上,(复合)主键 是分区键和排序键的组合。
对于 tables where primary key = partition key,你不能使用 Query
API 来构建类似的东西,因为你需要准确指定分区键并且可以对排序键(不存在)执行可选条件。在这种情况下,BatchGetItem
API 可用于执行与您的 SQL 代码等效的选择。
如果设计得当,具有复合主键的表可能会更适合这样的情况。 Query
允许您根据排序键进行一些过滤,但不支持真正的 IN
查询。通过巧妙地设计密钥模式,您可以使用 begins_with
或 between
子句或定期与限制进行比较,但这是非常特定于用例的。 BatchGetItem
也适用于这种情况,因此这是更好的选择。
哦, 有一些有用的答案,概述了更多差异和用例。
阅读“KeyConditionExpression”的概念https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression
我很好奇是否可以对“KeyConditionExpression”进行IN
比较。
对应的 SQL 将是:
SELECT * FROM table WHERE primary_key IN ("a","b","c")
还是我应该使用 BatchGetItem?
如果两者都可以,有什么区别?我应该使用哪一个?
我对此的回应是:大部分情况下不会,但有时会 - 我会详细说明。
DynamoDB 中的主键实际上可以是两种东西,因为有两种键:
- 分区键,这是强制性的,用于标识项目存储在哪个数据分区上,并且
- 可选的排序键,您可以在创建 table 时启用它,它用于对给定分区键内的项目进行排序。
如果只有一个分区键,那就是您项目的主键。在具有排序键的 table 上,(复合)主键 是分区键和排序键的组合。
对于 tables where primary key = partition key,你不能使用 Query
API 来构建类似的东西,因为你需要准确指定分区键并且可以对排序键(不存在)执行可选条件。在这种情况下,BatchGetItem
API 可用于执行与您的 SQL 代码等效的选择。
如果设计得当,具有复合主键的表可能会更适合这样的情况。 Query
允许您根据排序键进行一些过滤,但不支持真正的 IN
查询。通过巧妙地设计密钥模式,您可以使用 begins_with
或 between
子句或定期与限制进行比较,但这是非常特定于用例的。 BatchGetItem
也适用于这种情况,因此这是更好的选择。
哦,