Amazon web services DynamoDB GSI分区包含大型集合

Amazon web services DynamoDB GSI分区包含大型集合,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我有一个DynamoDB表,它的写入次数多,读取次数少。分区键足够小(每个分区大约100个项目)。写入此表的项目是1k至100k项目集的一部分。这很有效 我需要能够使用不同的排序键对整个批次执行查询。为了支持该要求,我必须创建一个全局二级索引,其中批次ID作为分区键和相应的排序键。它可以工作,但这意味着分区包含整个(可能是10万项)集合。即使没有达到10gb的限制,这也感觉不太理想 我是不是想得太多了,DynamoDB可以很好地处理100k分区 对于GSI需要查询整个集合的情况,是否有任何推荐的

我有一个
DynamoDB
表,它的写入次数多,读取次数少。分区键
足够小(每个分区大约100个项目)。写入此表的项目是1k至100k项目集的一部分。这很有效

我需要能够使用不同的
排序键对整个批次执行查询。为了支持该要求,我必须创建一个
全局二级索引
,其中
批次ID
作为
分区键
和相应的
排序键
。它可以工作,但这意味着分区包含整个(可能是10万项)集合。即使没有达到10gb的限制,这也感觉不太理想

我是不是想得太多了,
DynamoDB
可以很好地处理100k分区


对于
GSI
需要查询整个集合的情况,是否有任何推荐的模式?

首先,如果您的表没有LSI,则单个项集合(分区键)的大小没有限制。如果表中有LSI,则为。这不能与逻辑分区混淆,逻辑分区的最大容量为10GB

为了回答您的问题,我们确实需要更多关于GSI访问模式的信息

使用带有单个分区的GSI对数据进行排序,然后对该GSI进行扫描以获取所有数据,或者可能是前N项,这没有什么错。也就是说,如果您正在扫描GSI,您可能只想扫描基表,这可能比创建GSI更便宜。请注意,扫描的速度实际上相当快,请确保使用并行扫描,并将线程数设置为与表中数据的MB数相等。尽管它们很昂贵,因为它们为表中的每一项消耗RCU

但是,如果您计划查询数据并说“给我X日期和Y日期之间的数据”,您的方法可能不好。该查询可能非常慢,因为查询不像扫描那样具有并行处理

相反,您可能需要考虑。基本上,创建一个带有日期块的字段(比如说2020-10-13这样的一天),并将其作为分区键。现在,您可以使用一系列查询获得所需的数据,在日期范围内每天查询一次

时间序列原理,使数据块脱离连续范围键,可以应用于任何连续数据,而不仅仅是时间

简而言之,如果您计划使用单个分区键查询GSI,请三思。如果您计划用一个分区键扫描GSI,那可能没问题