0

假设我有一个包含 50,000 个项目的表,并且每条记录的 PK 是一个唯一编号。这些项目中有一半的属性“已发布”设置为“1”,另一个设置为“0”。

大多数情况下,我将使用哈希键检索单个项目,但有时我希望能够获取所有已发布 = 1 或 0 的项目(理想情况下是分页批次)。

我可以在“已发布”属性上有一个带有 PK 的 GSI,但是每个值我会有 25,000 条记录,我理解这会很糟糕,因为 PK 应该比这更独特(如果我明白这一点,请告诉我错误)。

我可以为已发布/未发布有单独的表格,但在我检索单个项目的常见用例中,我宁愿不必提前知道该项目是否已发布(亚马逊也表示,精心设计的应用程序通常只有一个桌子)。

任何建议或建议将不胜感激。

4

2 回答 2

1

有几件事:

  1. 25,000 个项目在单个分区中并不多。但是,如果您的表增长到数千万个项目,您将遇到问题

  2. 不要害怕扫描 - 如果您希望检索表中一半的项目,扫描确实非常有效!

  3. 如果您知道只有一小部分项目将被发布(或未发布),那么稀疏 GSI 将非常有效 - 但如果分布大约是一半,那么它没有多大意义:只需扫描桌子!

于 2018-09-05T04:41:59.200 回答
1

DynamoDB 不可用于批量更新或批量读取。它用于事务性读取或写入。如果您正在处理批量更新,RDS 将是事务数据的不错选择。

如果您只想使用一组有限的数据,您可以在给定时间读取一组数据,但您请求的数字不会一直得到尊重。那时可用的任何东西都将与称为 lastEvaluatedKey 的标记一起交付给您。

另外,您可以使用发布作为范围键,这将有助于分区读取,仍然读取批量读/写到 dynamodb 将花费很长时间并且不是一个好的架构。

希望能帮助到你。

于 2018-09-04T19:44:57.723 回答