说我有一张桌子,上面有50,000个项目,每条记录的PK是一个唯一的数字。这些项目中有一半的“发布”属性设置为“ 1”,另一项设置为“ 0”。
大多数时候,我会使用哈希键来检索单个项目,但有时我希望能够获得发布= 1或0(理想的分页批处理)的所有项目。
我可以在“已发布”属性上拥有一个带有PK的GSI,但随后每个值将有25,000条记录,我知道这是不好的,因为PK应该比这更独特(请让我知道是否理解不正确)。
我可以为已发布/未发布的表提供单独的表格,但是在检索单个项目的常见用例中,我宁愿不必事先知道该项目是否已发布(亚马逊says也是如此设计的应用通常只有一张桌子。
任何建议都将不胜感激。
答案 0 :(得分:1)
DynamoDB不能用于批量更新或批量读取。它用于事务性读取或写入。如果您要处理批量更新,RDS将是交易数据的不错选择。
如果只想使用一组有限的数据,则可以在给定的时间读取一组数据,但是将不会一直要求您请求的数字。届时所有可用的内容都会与称为lastEvaluatedKey的标记一起提供给您。
另外,您可以使用发布作为范围键,将有助于分区读取,仍然读取大批读取/写入dynamodb将花费很长时间,而且架构也不佳。
希望有帮助。
答案 1 :(得分:1)
几件事:
25,000个分区中没有多少项。但是,如果您的表增长到数千万个项目,您将遇到问题
不要害怕扫描-如果您希望检索表中一半的项目,那么扫描确实非常有效!
如果您知道只有一小部分项目将被发布(或未发布),那么稀疏的GSI将会非常有效率-但是,如果分发的内容大约是一半,那么它就不会带来太多收益感觉:只需扫描桌子!