我想在我的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>