16

亚马逊 AWS DynamoDB 问题。

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

哈希-----范围------------------------------ ----------------------- 属性 1 ... 属性 x

书------2012-1-20~john doe~adventure~magic~travel----description ...一些东西

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

找不到使用这些比较运算符的任何示例。任何帮助将不胜感激。

谢谢。

4

1 回答 1

41

了解Amazon DynamoDB中两个搜索 API Query 和 Scan 之间的区别很重要:

  • 询问

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

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

    [强调我的]

  • 扫描

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

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

现在,Query API 的 RangeKeyCondition:ComparisonOperator 支持的子集不包括 CONTAINSIN,它们都在Scan API中可用;只有比较运算符BETWEEN在两个 API 中都可用。

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

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

祝你好运!

于 2012-01-27T16:11:11.643 回答