我需要一些关于设计表的建议,以便可以进行某些查询。我的主表有以下用户信息:
id | gender | location | fullDOB | yearDOB | name
。
我需要能够回答以下问题:提供25-35岁之间50英里范围内男性/女性的用户列表。最有可能的是,将来我会想要添加更多我将要过滤的属性。我现在并不担心找出位置部分,我想从年龄和性别开始。我已创建字段yearD0B,因此我可以根据用户年龄进行查询。为此,我想在yearDOB上创建GSI以及我将过滤的其他属性,以便GSI如下所示:
yearDOB(pk) | id (sort key) | gender | location
然后我可以发布查询并过滤其余的属性。但是,如果我使用yearDOB,那么10,000个用户可以拥有相同的生育年份,这将创造一个热点。解决此问题的一种方法是附加一个随机数,但它必须在一个非常大的范围内,以避免热点。如果此数字很大,这将导致尝试查询具有特定年龄的所有用户。
问题:
1)在必须支持上述类型的查询方面,我在过滤器属性上创建GSI的方法是否良好?
2)如果它很好我如何有效地解决热分区的问题?
答案 0 :(得分:0)
经过大量研究后,我意识到DynamoDb不适合执行这些类型的查询。即使我以某种方式避免热点,那么如果用户想要改变他们的出生年份,那么GSI中的主键无法更新是不可能的。如果没有明显的jigerry pokery,发电机中的简单查询是不可能的,它不会辜负所有的炒作。回到RDS,可惜......