代码之家  ›  专栏  ›  技术社区  ›  Sridhar Sarnobat

dynamodb-逐个扫描(就像jdbc光标)

  •  1
  • Sridhar Sarnobat  · 技术社区  · 6 年前

    我想在我的dynamodb表中得到任何一行,但是这个表可能很大。我不想让db服务器返回所有行,然后我只得到集合中的第一个项。

    对于jdbc,我会使用一个游标,它只是指向数据库中行的“指针”。在迪纳摩我一直在看 scan() 操作( https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html 但是有很多类似的方法,它们在版本和参数之间不尽相同,这些参数是我所期望的,我真的很困惑。如果有简单的编程语句,我真的不想提交json查询。

    我应该寻找什么方法来从一个客户机到另一个服务器逐个获取项目,而不是服务器对它们进行批处理并返回多个项目?

    我的尝试:

    new DynamoDB( AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.US_EAST_1.name()) .build()) .getTable("my_large_table") // MaxResultSize just blindly returns rows, not matching rows. Since we have no filter criteria this is fine. .scan(new ScanSpec().withMaxResultSize(1).withConsistentRead(true)) .firstPage() .getLowLevelResult() .getScanResult() .getItems();

    版本信息

    目前我正在使用这些工具,但如果在以后的版本中有所改变,我想知道可以最大限度地减少将来迁移痛苦的解决方案:

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.127</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.127</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.11.127</version> </dependency>

    1 回复  |  直到 6 年前
        1
  •  1
  •   F_SO_K    6 年前

    只需使用 Limit 扫描参数。

    默认情况下,扫描将对表中的每个项进行评估。使用极限运算符将设置“要评估的最大项目数(不一定是匹配项的数目)”。

    因此,如果您扫描一个没有过滤器的表,并且将限制设置为1,那么您将始终得到一个返回的项(假设至少有一个项)。