首页 > 解决方案 > 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

谢谢

标签: amazon-web-servicesamazon-dynamodb

解决方案


限制返回的项目,而不是返回具有特定 HASH 键的所有项目。

我们有两种不同的方法可以处理这个问题

  1. 理想的方法是将我们要查询的元素构建到RANGE键中。这让我们可以Key Expressions用来查询我们的数据,让 DynamoDB 可以快速找到满足我们查询的 Items。

  2. 处理此问题的第二种方法是基于非关键属性的过滤。这比关键表达式效率低,但在正确的情况下仍然有用。过滤器表达式用于在项目属性返回到进行调用的客户端之前对它们应用服务器端过滤器。在 DynamoDB 查询完成后应用过滤如果您在 Query 步骤中检索 100KB 的数据,但将其过滤到 1KB 的数据,您将消耗 100KB 数据的读取容量单位

道德是-过滤和投影表达式不是灵丹妙药-它们不会使以其他方式快速查询数据变得容易。但是,它们可以通过限制传输回网络的项目的数量和大小来节省网络传输时间。他们还可以通过预先过滤您的结果而不是要求应用程序端过滤来简化应用程序的复杂性。

来自dynamodbguide

dynamodbguide


推荐阅读