Dynamodb:热点和数据模型

Dynamodb: hot spot and data model

我需要一些关于我的 table 设计的建议,以便某些查询成为可能。我的主要table有以下用户信息:

id | gender | location | fullDOB | yearDOB | name

我需要能够回答以下问题:提供 50 英里范围内 males/females 年龄在 25-35 岁之间的用户列表。最有可能的是,将来我会想要添加更多我将过滤的属性。我现在不担心弄清楚位置部分,我想从年龄和性别开始。我创建了字段 yearD0B,因此我可以根据用户年龄进行查询。为此,我想在 yearDOB 上创建 GSI 以及我将过滤的其他属性,因此 GSI 如下所示:

yearDOB(pk) | id (sort key) | gender | location

然后我可以对其余属性发出查询和筛选。但是,如果我使用 yearDOB 那么例如10,000 个用户可能具有相同的出生年份,这将创建一个热点。解决此问题的一种方法是附加一个随机数,但它必须在非常大的范围内以避免热点。如果这个数字很大,那么尝试查询特定年龄段的所有用户会让人头疼。

问题:

1) 就必须支持上述类型的查询而言,我在过滤器属性上创建 GSI 的方法好吗?

2) 如果好的话如何有效解决热分区问题?

经过大量研究,我意识到 DynamoDb 不适合执行这些类型的查询。即使我想以某种方式避免热点,如果用户想要更改他们的出生年份,那也是不可能的,因为 GSI 中的主键无法更新。没有显着的 jigerry pokery,发电机中的简单查询是不可能的,它没有辜负所有的炒作。回到RDS,可惜...