【问题标题】:limit offset, sorting and aggregation challenges in DynamoDB限制 DynamoDB 中的偏移、排序和聚合挑战
【发布时间】:2015-09-07 08:52:19
【问题描述】:

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

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

上述情况让我想到了其他一些noSQL数据库解决方案,请在上述问题上帮助我。

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    将 DynamoDB 视为支持索引的键值存储的正确方式。

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

    一个表可以有2 types of keys

    1. 哈希类型主键 - 主键由一个属性组成,即 哈希属性。 DynamoDB 在此基础上构建无序哈希索引 主键属性。表中的每个项目都是唯一标识的 通过其哈希键值。
    2. 哈希和范围类型主键 - 主键 key 由两个属性组成。第一个属性是哈希 属性,第二个是范围属性。 DynamoDB 构建 散列主键属性上的无序散列索引,以及 范围主键属性上的排序范围索引。中的每一项 该表由其哈希值和 范围键值。两个项目可能具有相同的哈希值 键值,但这两项必须具有不同的范围键值。

    您为设备事件表设置了什么样的主键?我建议您对数据进行非规范化(即从 json 中提取特定属性)并在这些属性上构建附加索引您想要排序和聚合的:日期、序列号等。如果我知道您在表上设置了什么样的主键,我可以为您指出正确的方向来构建这些索引,以便您可以得到什么您需要通过query methodscan method 对您来说效率很低,因为它会读取表中的每一行。

    最后,关于您的“限制偏移”问题,我认为您正在寻找ExclusiveStartKey,DynamoDB 将在对您的查询的响应中返回该ExclusiveStartKey

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-06-07
        • 2022-11-03
        • 2021-06-04
        • 2020-04-23
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        相关资源
        最近更新 更多