首页 文章

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

提问于
浏览
3

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

  • 要定义记录的限制偏移量,比如说每页10条记录,意味着结果集应该是分页的(例如,第1页有0-10条记录,第2页有11-20条记录,依此类推),我有一个像scanRequest这样的API .withLimit(10)但它有不同的限制偏移含义,DynamoDB API是否支持限制偏移?

  • 我还需要根据用户输入字段对结果集进行排序,例如在日期,序列号等上进行排序,但仍然没有通过API获得任何排序/顺序 .

  • 我可能会寻找聚合,例如在设备名称,日期等,这似乎在DynamoDB中不可用 .

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

2 回答

  • 2

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

    "Amazon DynamoDB supports key-value data structures. Each item (row) is a key-value pair where the primary key is the only required attribute for items in a table and uniquely identifies each item. DynamoDB is schema-less. Each item can have any number of attributes (columns). In addition to querying the primary key, you can query non-primary key attributes using Global Secondary Indexes and Local Secondary Indexes." https://aws.amazon.com/dynamodb/details/

    一个表可以有2 types of keys

    • 哈希类型主键 - 主键由一个属性(哈希属性)组成 . DynamoDB在此主键属性上构建无序哈希索引 . 表中的每个项由其哈希键值唯一标识 .

    • 哈希和范围类型主键 - 主键由两个属性组成 . 第一个属性是哈希属性,第二个属性是范围属性 . DynamoDB在哈希主键属性上构建无序哈希索引,并在范围主键属性上构建有序范围索引 . 表中的每个项目由其散列和范围键值的组合唯一标识 . 两个项可能具有相同的哈希键值,但这两个项必须具有不同的范围键值 .

    What kind of primary key have you set up for your Device Events table? 我建议您对数据进行非规范化(即从json中提取特定属性)并在要对其进行排序和聚合的属性上构建其他索引:日期,序列号等 . 如果我知道哪种主键你已经在桌面上设置了,我可以指出你正确的方向来 Build 这些索引,以便你可以通过query method得到你需要的东西 . scan method对您来说效率低下,因为它会读取表中的每一行 .

    最后,关于你的"limit offset"问题,我认为你正在寻找ExclusiveStartKey,它将由DynamoDB在您的查询响应中返回 .

  • 4

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

相关问题