amazon-web-services - aws DynamoDb 中 RangeKeyCondition 和 FilterKeyCondition 的区别
问题描述
我是 AWS 新手。在阅读此处的文档和示例时,我了解到排序键不仅用于对分区中的数据进行排序,还用于增强 dynamoDB 表的搜索条件。但是我们可以在 filterCondition 的帮助下做到这一点。那么有什么区别呢,也是acc。举个例子,我们可以在withKeyConditionExpression("CreateDate = :v_date and begin_with(IssueId, :v_issue)")中使用排序/范围键,
但是当我尝试时它给了我异常
com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: Query key condition not supported
谢谢
解决方案
限制返回的项目,而不是返回具有特定 HASH 键的所有项目。
我们有两种不同的方法可以处理这个问题
理想的方法是将我们要查询的元素构建到
RANGE
键中。这让我们可以Key Expressions
用来查询我们的数据,让 DynamoDB 可以快速找到满足我们查询的 Items。处理此问题的第二种方法是基于非关键属性的过滤。这比关键表达式效率低,但在正确的情况下仍然有用。过滤器表达式用于在项目属性返回到进行调用的客户端之前对它们应用服务器端过滤器。在 DynamoDB 查询完成后应用过滤。如果您在 Query 步骤中检索 100KB 的数据,但将其过滤到 1KB 的数据,您将消耗 100KB 数据的读取容量单位
道德是-过滤和投影表达式不是灵丹妙药-它们不会使以其他方式快速查询数据变得容易。但是,它们可以通过限制传输回网络的项目的数量和大小来节省网络传输时间。他们还可以通过预先过滤您的结果而不是要求应用程序端过滤来简化应用程序的复杂性。
推荐阅读
- android - 导航图和多个主机活动
- javascript - 使用谷歌地球引擎在列表中查找最接近的日期
- java - 如何在 Android Studio 2019 中捕获图片而不进行预览
- python - 如何合并几个平均字段的csv文件?
- vue.js - 如果满足某些条件,bootstrap-vue 复选框会阻止更改
- laravel - laravel 中的动态前缀路由
- android - 如何在没有构造函数的情况下为对象实例化设置断点?
- javascript - _reactNativeRouterFLux.Actions.EmployeeEdit 不是函数
- gatling - 在 Gatling 中增加每秒请求数
- fmt - 使用 fmt 库格式化用户定义类型的问题