您如何最好地为多个查询参数构建 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
我认为这是满足您的第二个查询的良好结构。您可以指定一个用户,然后按所需的日期/时间范围进行过滤。
对于您的第一个查询,尝试请求 X
您必须将分区键名称和值指定为相等条件。
换句话说,即使您在时间戳的“日”部分构建 GSI,我也不知道直接执行 X 根据您所说的,您仍然可以使用在时间戳的“日”部分编制索引的 GSI 并按顺序查询它,一次一天。 这是write sharding 背后的某种想法,您可以在其中明确控制 GSI 中的分区数量以允许直接查询。在您的情况下,创建一个在“日”索引的 GSI 将为您每天提供一个分区,可以使用 = 运算符直接查询,这是 dynamodb 所要求的。
【讨论】:
以上是关于您如何最好地为多个查询参数构建 DynamoDb的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中使用包含多个值的查询参数构建 URL?