AWS Dynamo DB查询与分区键异步

时间:2020-08-19 18:14:41

标签: amazon-web-services amazon-dynamodb dynamodb-queries

我们正在使用dynamo数据库扫描功能来像这样从dynamo中获取所有数据,并且效果很好:

var myScanConditions = new List<ScanCondition>();
myScanConditions .Add(new ScanCondition("PartitionKey", ScanOperator.BeginsWith, "data"));
var myData= await Context.ScanAsync(myScanConditions ).GetRemainingAsync();
//some code to filter some data from above

我们的dynamo db分区键就像

data#rec1
data#rec2
data#rec3
and so on

我想检查一下是否可以将Scan替换为Query。我尝试通过将扫描条件传递给Query来使用以下代码,但看起来不正确。它什么也没回报。

var myData= await Context.QueryAsync("data", myScanConditions );

所以我的问题是有一个选项可以为QueryAsync方法的分区键提供部分文本,并且仍然从dynamo返回所有记录。例如,在上述情况下,如果我只是将“ 数据”(部分文本)传递给查询异步。

有没有办法做到这一点?

谢谢

2 个答案:

答案 0 :(得分:1)

不幸的是,您无法使用查询来搜索分区键。查询要求并且仅支持对分区键使用equal运算符。

如果您确实需要搜索表中的所有记录,则尽管要检查所有数据都是有代价的,但是您必须执行一次扫描,因为这正是扫描的目的。

要考虑的一些想法:

  • 如果您可以排除一些数据或将搜索集中在数据集中另一个字段定义的特定类别,则可以在表中添加一个全局二级索引(GSI),该字段使用不同的字段作为分区键和当前字段分区键作为排序键。然后,您可以在GSI上执行查询,这将使您更加灵活地搜索排序键。
  • 您还可以创建仅在其中包含分区键而没有其他字段/列的GSI。如果您随后将此GSI用于扫描,则将提高扫描的性能和成本,因为仅搜索/加载单个键列而不是整个表。获得结果后,将需要在表上执行GetItem或BatchGetItem以提取完整记录(如果需要)。

参考:

答案 1 :(得分:0)

您必须具有复合(哈希键+排序键)主键才能使用查询。

如果将“数据”作为哈希(分区)键,并将rec1,rec2,rec3作为排序键,则可以仅使用“数据”进行查询。