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找不到任何示例。任何帮助将不胜感激。
感谢。
答案 0 :(得分:35)
了解两个搜索API Query and Scan in Amazon DynamoDB:
之间的差异非常重要查询
查询操作仅搜索主键属性值,支持关键属性值上的子集比较运算符 优化搜索过程。查询返回所有项目数据 匹配的主键(每个项目的所有属性)最多1MB 每个查询操作的数据。 [...]
[..]有关可用于查询的每个比较运算符的信息 操作,请参阅API entry for Query。
[强调我的]
扫描
扫描操作扫描整个表格。您可以指定过滤器 应用于结果以优化返回给您的值 完整的扫描。 Amazon DynamoDB对扫描设置了1MB的限制( 在结果被过滤之前适用限制)。 [...]
[...]有关可用于扫描的每个比较运算符的信息 操作,请参阅API entry for Scan。
现在,RangeKeyCondition的受支持子集:查询API 的ComparisonOperator排除了 CONTAINS
和IN
,它们都在 Scan API中可用但是;只有比较运算符BETWEEN
在两个API中都可用。
这种限制很可能源于性能方面的考虑,即支持CONTAINS
可能会破坏DynamoDB可预测的性能/吞吐量目标。
与NoSQL解决方案一样,您需要通过相应地定制应用程序设计来解决这些限制,即解决您的用例和您所针对的特定NoSQL架构。
祝你好运!