限制DynamoDB中的偏移,排序和聚合挑战

时间:2015-09-07 08:52:20

标签: amazon-dynamodb

我正在使用DynamoDB将我的设备事件(采用JSON格式)存储到表中以进行进一步分析,并使用扫描API在UI上显示结果集,这需要

  • 要定义记录的限制偏移量,例如每页10条记录,则表示 结果集应该是分页的(例如,第1页有0-10条记录,第2页 有11-20条记录等等),我有一个类似scanRequest.withLimit(10)的API,但它有不同的限制偏移含义,DynamoDB API是否支持限制偏移?
  • 我还需要根据用户输入字段对结果集进行排序,例如在日期,序列号等上进行排序,但仍然没有通过API获得任何排序/订单。
  • 我可能会寻找聚合,例如在设备名称,日期等上,似乎在DynamoDB中也没有。

以上情况让我想到了其他一些没有SQL数据库的解决方案,请协助我解决上述问题。

2 个答案:

答案 0 :(得分:5)

考虑DynamoDB的正确方法是作为支持索引的键值存储。

" Amazon DynamoDB支持键值数据结构。每个项目(行)都是一个键值对,其中主键是表中项目唯一必需的属性,并唯一标识每个项目。 DynamoDB是无架构的。每个项目可以包含任意数量的属性(列)。除了查询主键外,还可以使用全局二级索引和本地二级索引查询非主键属性。" https://aws.amazon.com/dynamodb/details/

表格可以有2 types of keys

  1. 哈希类型主键 - 主键由一个属性a组成 哈希属性。 DynamoDB在此上构建无序哈希索引 主键属性。表中的每个项目都是唯一标识的 通过其哈希键值。
  2. 哈希和范围类型主键 - 主要 key由两个属性组成。第一个属性是哈希 属性,第二个是范围属性。 DynamoDB构建 散列主键属性上的无序散列索引,以及 范围主键属性的排序范围索引。每个项目 表由哈希和哈希的组合唯一标识 范围键值。两个项可能具有相同的哈希值 键值,但这两个项必须具有不同的范围键值。
  3. 您为设备事件表设置了哪种主键?我建议您对数据进行非规范化(即从json中提取特定属性)并在这些属性上构建其他索引你要排序和聚合的日期:日期,序列号等。如果我知道你在桌面上设置了什么样的主键,我可以指出你正确的方向来建立这些索引,这样你就可以得到什么你需要通过query methodscan method对您来说效率低下,因为它会读取表格中的每一行。

    最后,关于你的"限制偏移"问题,我认为您正在寻找ExclusiveStartKey,这将由DynamoDB在您的查询回复中返回。

答案 1 :(得分:2)

ExclusiveStartKey将帮助您进行分页。没有必要依赖响应中的LastEvaluatedKey。只有当您获得的MB数据超过MB时,您才能获得LastEvaluatedKey。如果LIMIT页面大小使得返回的总数据大小小于1 MB,则您将无法返回LastEvaluatedKey。但这并不能阻止您使用ExclusiveStartKey作为偏移量。