如何在 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 中查询不同的哈希键和二级索引?的主要内容,如果未能解决你的问题,请参考以下文章