【发布时间】:2018-02-27 22:18:02
【问题描述】:
我需要一些关于我的表设计的建议,以便可以进行某些查询。我的主表有以下用户信息:
id | gender | location | fullDOB | yearDOB | name。
我需要能够回答以下问题:提供 50 英里范围内 25-35 岁的男性/女性用户列表。最有可能的是,将来我会想要添加更多我将过滤的属性。我现在不担心弄清楚位置部分,我想从年龄和性别开始。我创建了字段 yearD0B,因此我可以根据用户年龄进行查询。为此,我想在 yearDOB 上创建 GSI 以及我将过滤的其他属性,因此 GSI 如下所示:
yearDOB(pk) | id (sort key) | gender | location
然后我可以发出查询并过滤其余属性。但是,如果我使用 yearDOB 那么例如10,000 个用户可能有相同的出生年份,这将创建一个热点。解决此问题的一种方法是附加一个随机数,但它必须在一个非常大的范围内以避免热点。如果这个数字很大,这会让人头疼,试图查询所有具有特定年龄的用户。
问题:
1) 就必须支持上述类型的查询而言,我在过滤器属性上创建 GSI 的方法是否良好?
2)如果它很好,我如何有效地解决热分区的问题?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb data-modeling