如何在 Dynamodb 中查询不同的哈希键和二级索引?

Posted

技术标签:

【中文标题】如何在 Dynamodb 中查询不同的哈希键和二级索引?【英文标题】:How can I query Dynamodb for different hash keys and secondaryindex? 【发布时间】:2014-02-14 06:49:15 【问题描述】:

我正在尝试在 dynamodb 中做日志表,我的表看起来像

Pid[HashKey] ||表名[二级索引] ||创建日期[范围键] ||旧值 ||新价值

10 ||产品 || 10.10.2013 00:00:01 ||鞋 ||裙子

10 ||产品 || 10.10.2013 00:00:02 ||裙子 ||裤子

11 ||产品分类 || 10.10.2013 00:00:01 ||鞋 ||裙子

19 ||产品分类 || 10.10.2013 00:00:01 ||表 ||扶手椅

Pid = 我的主数据库表主键

TableName = 我的主数据库表名

CreateDate = 行创建日期

现在我想获取列表

其中 (Pid = 10 AND TableName = "Product") OR (Pid = 11 AND TableName="ProductCategory")

在单个请求中(不会像这样短。它可能包含太多表和 pid)

我尝试了 batchget 但我没有使用它,因为我无法使用二级索引进行查询。它需要具有相等运算符的范围键。

我尝试了查询,但这次我无法在同一个查询中发送多个哈希键。

有什么想法或继任者吗?

谢谢。

【问题讨论】:

【参考方案1】:

这里的问题是 OR ...。通常你不能在不修改行的情况下通过单个查询操作获得这个 where 条件,

解决方案 1:您必须发出 2 个查询操作,并将它们附加到同一个结果集。

where (Pid = 10 AND TableName = "Product")

union

where (Pid = 11 AND TableName = "ProductCategory")

这些操作应该并行运行以优化性能。

解决方案 2: 创建一个字段 xxx 来描述您的状况并在写入时对其进行维护,而不是 您可以在其上创建一个global secondary index 并执行单个查询。

【讨论】:

如果我想获取 20 个表更改日志的日志数据,第一个解决方案创建 20 个突发查询。 我不完全理解的第二种解决方案。但是另一个字段上的二级全局索引并不能解决任何问题。因为我的目标是防止突发查询。

以上是关于如何在 Dynamodb 中查询不同的哈希键和二级索引?的主要内容,如果未能解决你的问题,请参考以下文章

dynamoDB 中全局二级索引范围键的最大值

您如何查询 DynamoDB?

使用全局二级索引的 DynamoDB 表查询项

使用分区键和特定排序键列表查询DynamoDB

如何按日期(范围键)查询 DynamoDB,没有明显的哈希键?

DynamoDB:查询中的全局二级索引利用率