Amazon web services DynamoDB查询处于紧密循环还是扫描?

Amazon web services DynamoDB查询处于紧密循环还是扫描?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,这是我在DynamoDB中的基本数据结构(或相关部分);我有一个文件表,它保存文件数据,并且有一个文件id。我还有一个“定义”表,其中包含文件中定义的项。定义还有一个ID(作为主键)以及一个名为“SourceFile”的字段,该字段引用文件ID,以便将定义绑定到其源文件 大多数情况下,我只想通过它的id获取定义,然后可以选择稍后获取文件,这样就可以了。但是,在某些情况下,我需要获取一组文件的所有定义。我可以通过扫描来实现这一点,但速度很慢,而且我知道随着表格的增长,速度会变慢,因此不推荐使用。但

这是我在DynamoDB中的基本数据结构(或相关部分);我有一个文件表,它保存文件数据,并且有一个文件id。我还有一个“定义”表,其中包含文件中定义的项。定义还有一个ID(作为主键)以及一个名为“SourceFile”的字段,该字段引用文件ID,以便将定义绑定到其源文件

大多数情况下,我只想通过它的id获取定义,然后可以选择稍后获取文件,这样就可以了。但是,在某些情况下,我需要获取一组文件的所有定义。我可以通过扫描来实现这一点,但速度很慢,而且我知道随着表格的增长,速度会变慢,因此不推荐使用。但是,我不知道如何使用查询来实现这一点

我可以创建一个使用SourceFile字段作为主键的GSI,并使用该字段进行查询。这听起来像是一个答案(也许是),但我不确定。问题是有些库可能有5k或10k文件(在极少数情况下可能更多)。在GSI中,每个查询只能查询1个文件ID,因此我必须为每个文件抛出一个新的查询,我无法想象在DynamoDB上抛出10K查询会非常高效

创建一个紧循环(或多个线程)并使用大量查询或扫描表是否更好?有没有其他我没想到的方法


这是在索引和分析过程中进行的,预计需要一点时间,所以它不是即时的,但我希望它尽可能高效…

如果您希望在数据库中查找大部分数据,则扫描是最有效的。每个扫描请求最多可以检索1MB,对于每个可用容量单位,您可以读取4KB,因此,假设您已配置足够的容量,您可以在单个请求中检索数千个项目(假设项目非常小)

我能想到的唯一替代方法是添加更多元数据,以帮助您在更高级别上索引文件和定义,例如,库名称/id。这样,您就可以在库名称/id上创建GSI并以这种方式进行查询


运行数千个查询的效率将低于扫描(假设您存储的是成千上万个项目)

谢谢你的反馈。事实上,这不是大多数数据,这是一家特定公司的大部分数据,但表中会有很多公司。。。关于其他元数据的好建议。起初我没有考虑库,但将库id放在表中并在其上创建一个工作完美的GSI并不困难!