使用比较运算符进行DynamoDB查询

时间:2012-01-23 00:31:34

标签: amazon-web-services amazon-dynamodb

Amazon AWS DynamoDB问题。

是否有使用RangeKeyCondition和ComparisonOperators的示例,例如CONTAINS,IN,BETWEEN。我试图基于复合RangeKey(连接和分隔)检索数据。例如日期+作者+书籍表的关键字。假设在这种情况下HashValue是“book”(它可以是book,dvd,video,link等)。我想选择所有包含关键字“magic”的书籍或所有包含作者“John Doe”的书籍。示例记录/项目如下所示:

哈希------范围--------------------------------------- -------------------------- attribute1 ... attributex

书------ 2012-1-20~约翰doe~冒险〜魔法〜旅行----------------描述......有些东西

在尝试使用条件运算符IN或CONTAINS时,出现以下错误: 对象(CFSimpleXML)20 public'__type'=> string'com.amazon.coral.validate#ValidationException'(length = 45) public'message'=> string'尝试的条件约束不是可索引的操作'

使用这些ComparisonOperators找不到任何示例。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:35)

了解两个搜索API Query and Scan in Amazon DynamoDB

之间的差异非常重要
  • 查询

      

    查询操作仅搜索主键属性值,支持关键属性值上的子集比较运算符   优化搜索过程。查询返回所有项目数据   匹配的主键(每个项目的所有属性)最多1MB   每个查询操作的数据。 [...]

         

    [..]有关可用于查询的每个比较运算符的信息   操作,请参阅API entry for Query

         

    [强调我的]

  • 扫描

      

    扫描操作扫描整个表格。您可以指定过滤器   应用于结果以优化返回给您的值   完整的扫描。 Amazon DynamoDB对扫描设置了1MB的限制(   在结果被过滤之前适用限制)。 [...]

         

    [...]有关可用于扫描的每个比较运算符的信息   操作,请参阅API entry for Scan

现在,RangeKeyCondition的受支持子集:查询API 的ComparisonOperator排除了 CONTAINSIN,它们都在 Scan API中可用BETWEEN在两个API中都可用。

这种限制很可能源于性能方面的考虑,即支持CONTAINS可能会破坏DynamoDB可预测的性能/吞吐量目标。

与NoSQL解决方案一样,您需要通过相应地定制应用程序设计来解决这些限制,即解决您的用例和您所针对的特定NoSQL架构。

祝你好运!