amazon-web-services - AWS Dynamo DB 查询与分区键异步
问题描述
我们正在使用 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 以提取完整记录(如果需要)。
参考:
推荐阅读
- swift - 无法显示来自 URL 的图像
- angular - 从 INPUT 元素上传文件的事件类型
- maven - Maven:未找到参考 maven.runtime.classpath
- javascript - 从 1 到 8 排序一个无序的数字数组,以便结束和开始整数交替,例如 [8,1,7,2,6,3,5,4,]
- c# - 通过 Interop 添加一个简单的 DOM 操作 JS 脚本
- javascript - 使用来自 PHP 的数据在单击按钮时添加输入字段
- python - 为什么我想在mysql中计算多个表的数据频率时出现错误?Flask 用于创建 Web 应用程序
- mongodb - 查询以仅返回嵌套数组中的一个匹配项
- java - 错误:无法找到或加载主类 org.newdawn.slick.tests.AlphaMapTest
- unix - 计算 UNIX 中以特定字母开头的行数?