繁体   English   中英

AWS Dynamo DB 查询与分区键异步

[英]AWS Dynamo DB query async with partition key

我们正在使用 dynamo db scan 功能从 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

在我们的发电机数据库分区键就像

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

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

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

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

有没有办法做到这一点?

谢谢

不幸的是,您无法使用 Query 搜索分区键。 查询需要并且仅支持分区键上的相等运算符。

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

需要考虑的一些想法:

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

参考:

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

如果您有“数据”作为 hash(分区)键,rec1、rec2、rec3 作为排序键,那么您可以只使用“数据”进行查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM