我正在学习使用DynamoDB表并使用发布日期,公司和职位等信息存储一些职位发布。
我最常使用的查询是将所有职位发布大于x日期。
我应该使用什么分区键才能在不使用扫描的情况下执行上述查询?
只能检查分区键的相等性,因此使用date作为分区键是不行的。作为排序键的日期似乎最好,因为我可以使用相等的查询。
但是我有点坚持使用什么是好的分区键。如果我把公司或职位名称,我必须将其作为我的查询的一部分包括在内,但我希望在特定日期之后发布所有职位,而不仅仅是针对特定的公司或工作。
我想到的一种方法是使用month作为分区键,将date作为排序键。这样说来过去14天我知道我需要点击本月的分区键,也许是上个月。然后我可以使用排序键将记录保留在过去14天内。这似乎是hackish。
答案 0 :(得分:1)
我可能会做一些类似于你在上一段中提到的内容 - 保留日期的子部分作为分区键。使用类似月份或unix时间戳的前N个数字或类似的东西。
请注意,根据您选择的较大分区的大小,在查询过去14天时,您可能仍需要执行多个查询。由于跨越分区边界而发布的帖子(在查询1月4日的最后14天时,您还要查询上一年的12月等),但它仍应可用。
请记住,选择分区键非常重要,以便项目尽可能均匀分布,因此任何黑客都会涉及很多(或者,有时在SO:ALL!中的问题中看到的)项目共享相同的分区键以简化排序不是一个好主意。
也许您可能还想看看Time-to-live让AWS在一段时间后自动删除项目。通过这种方式,您可以保留一个最新项目表,并且"存档"所有其他不经常查询的项目。当然,您也可以通过为新帖和已存档的帖子保留单独的表来手动执行类似操作,但TTL对于自动到期项目非常简洁。查询所有新帖子只需用新帖子对表格进行全面扫描即可。