当前位置: 首页 > 知识库问答 >
问题:

如果主键包含值,则DynamoDB筛选器

富波光
2023-03-14

目前

我在DynamoDB中有一个表,其中有一个属性-主键-包含唯一的值。

PK
------
#A#B#C#
#B#C#
#C#D#E#
#BC#

问题

我希望对#B#C#(1)精确匹配和(2)包含匹配进行2次搜索,因此只需要结果:

(1) Exact Match:
#B#C#

(2) Containing Match:
#A#B#C#
#B#C#
  1. 是否可以针对主键进行这2次搜索
  2. 如果是这样,运行哪种查询最有效?e、 g.查询或扫描

注:

对于(2),我使用以下代码,但它返回DB中的所有项:

            params = {
                TableName: 'myTable',
                FilterExpression: "contains(#key, :v)",
                ExpressionAttributeNames: { "#key": "PK" },
                ExpressionAttributeValues: { ":v": #B#C# }
            }

            dynamodb.scan(params,callback)

共有1个答案

陶富
2023-03-14

DynamoDB支持两种主要类型的搜索:查询和扫描。查询操作根据主键值查找项目。扫描操作通过访问表或辅助索引中的每个项来返回一个或多个项和项属性

如果要查找主键为B C的项目,请使用查询API:

ddbClient.query(
  {
    "TableName": "<YOUR TABLE NAME>",
    "KeyConditionExpression": "#pk = :pk",
    "ExpressionAttributeValues": {
      ":pk": {
        "S": "#B#C"
      }
    },
    "ExpressionAttributeNames": {
      "#pk": "PK"
    }
  }
)

对于第二种访问模式,您需要使用扫描API,因为您正在搜索整个表/辅助索引。

您可以使用scan测试主键是否有子字符串,方法是使用contains。我看你的扫描操作的格式没有任何问题。

以这种方式使用扫描时要小心。因为扫描将读取整个表以获取结果,所以在规模上的操作效率相当低。如果此操作不经常运行,或者您正在对稀疏索引运行它,则可能没有问题。但是,如果它是您的主要访问模式之一,您可能需要重新考虑使用扫描API进行此操作。

 类似资料:
  • 我用的是卡桑德拉2.1.5。 我正在使用以下方法创建表: 是设计出来的还是一个bug?还是我用错了方法?

  • 如果一个键也包含在字符串数组中,如何通过一个键的值从对象数组中筛选出对象? 不筛选出所有具有包含在此arr中的名称的对象: 结果:

  • 问题内容: 我有一个dict包含大量条目的条目。我只对其中几个感兴趣。有没有一种简单的方法可以将其他所有元素都修剪掉? 问题答案: 构建一个新的字典: 使用字典理解。 如果使用缺少它们的版本(例如,Python 2.6和更早版本),请使其成为。一样,尽管丑陋。 请注意,这与jnnnnn的版本不同,对于任何大小的,都具有稳定的性能(仅取决于your_keys的数量)。在速度和内存方面。由于这是一个生

  • 问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f

  • 问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f

  • 我有一个类似的问题如下,但解决方案没有解决我的问题。 hibernate复合主键包含复合外键,如何映射此 我试图连接2个表,每个表都有一个复合主键和部分外键引用。 你能帮忙吗?