您如何最好地为多个查询参数构建 DynamoDb

Posted

技术标签:

【中文标题】您如何最好地为多个查询参数构建 DynamoDb【英文标题】:How do you best structure your DynamoDb for multiple query parameters 【发布时间】: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 的结构有什么建议吗 以获得最佳扩展和性能? 有人有吗 对当前建议的结构有何建议/批评?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

以上是关于您如何最好地为多个查询参数构建 DynamoDb的主要内容,如果未能解决你的问题,请参考以下文章

您如何有效地为数据库中的继承建模?

如何在 Swift 中使用包含多个值的查询参数构建 URL?

如何最好地为 ARC 代表保留自我?

如何最好地为 WordPress 博客实施 Google CSE

如何最好地为网站生成随机盐?

如何最好地为预订应用程序创建连接?