这是我在DynamoDB中的基本数据结构(或者相关部分);我有一个文件表,其中包含文件数据并具有该文件的ID。我也有一个'定义'保存文件中定义的项目的表。定义还有一个ID(作为主键)以及一个名为' SourceFile'引用文件ID以将定义绑定到它的源文件。
大多数时候我想通过它的id来获取定义,并且可以选择稍后获取文件,这样可以正常工作。但是,在某些情况下,我需要获取一组文件的所有定义。我可以通过扫描来做到这一点,但速度很慢,我知道随着表格的增长它会变慢,并且不推荐。但是,我不确定如何使用查询执行此操作。
我可以创建一个使用SourceFile字段作为主键的GSI,并使用它来查询。这听起来像是答案(可能是),但我不确定。问题是某些库可能有5k或10k文件(在极少数情况下可能更多)。在GSI中,我只能查询每个查询的1个文件ID,因此我必须为每个文件抛出一个新查询,我无法想象在DynamoDB上抛出10K查询会非常有效。 ..
创建一个紧密循环(或多个线程)并用大量查询命中它或扫描表是否更好?还有另一种方法可以做到这一点,我没有想到吗?
这是在索引和分析过程中,预计会花费一些时间,所以它不是即时的,但我希望它尽可能高效。 ..
答案 0 :(得分:1)
如果您希望在数据库中查找大部分数据,扫描是最有效的。每个扫描请求最多可以检索1MB,对于每个可用容量单位,您可以读取4KB,因此假设您有足够的容量供应,您可以在一个请求中检索数千个项目(假设项目非常小)。
我能想到的唯一选择是添加更多可以帮助您索引文件的元数据。更高级别的定义 - 例如,库名称/ id。这样你就可以在库名/ id上创建一个GSI并以这种方式查询。
假设您存储数十/数十万个项目,运行数千个查询的效率低于扫描效率。