【问题标题】:How do you best structure your DynamoDb for multiple query parameters您如何最好地为多个查询参数构建 DynamoDb
【发布时间】:2021-12-24 20:30:18
【问题描述】:

在跟踪器系统的上下文中,我有一种情况,用户的设备将位置数据传送到后端,系统随后会按用户和批量查询该数据。 数据结构如下:

{"user_id": "user_1", "timestamp": "2020-10-31 07:05:10.153777+00:00", "location": "XYZ", "details": "PQR"}

我们需要的查询是:

Get all location and details data for X<timestamp<Y

Get all location and details data for user_id=P and X<timestamp<Y

数据库的总大小约为 10 TB 我是 DynamoDb 新手,我不确定我是否非常了解 partitionKey 的概念。目前我打算使用一张partitionKey作为user_id,rangekey作为timestamp的表,然后在timestamp之外创建一个“day”的二级全局索引来满足第一个查询。

  • 有人对 DynamoDb 的结构有什么建议吗 以获得最佳扩展和性能?
  • 有人有吗 对当前建议的结构有何建议/批评?

【问题讨论】:

    标签: amazon-dynamodb scalability dynamodb-queries amazon-dynamodb-index aws-dynamodb


    【解决方案1】:

    我打算使用一个 table,partitionKey 作为 user_id,rangekey 作为 timestamp

    我认为这是满足您的第二个查询的良好结构。您可以指定一个用户,然后按所需的日期/时间范围进行过滤。

    对于您的第一个查询,尝试请求 Xconstructing a Key Condition Expression上的这个页面:

    您必须将分区键名称和值指定为相等条件。

    换句话说,即使您在时间戳的“日”部分构建 GSI,我也不知道直接执行 X

    根据您所说的,您仍然可以使用在时间戳的“日”部分编制索引的 GSI 并按顺序查询它,一次一天。

    这是write sharding 背后的某种想法,您可以在其中明确控制 GSI 中的分区数量以允许直接查询。在您的情况下,创建一个在“日”索引的 GSI 将为您每天提供一个分区,可以使用 = 运算符直接查询,这是 dynamodb 所要求的。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2010-10-30
      • 2011-09-21
      • 1970-01-01
      相关资源
      最近更新 更多