我想在DynamoDB表中获得ANY行,但是该表可能很大。我不想让数据库服务器将所有行返回给我,然后我只得到集合中的第一项。
在JDBC中,我将使用一个游标,它只是数据库中行的“指针”。在DynamoDB中,我一直在研究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>
答案 0 :(得分:1)
只需使用Limit扫描参数。
默认情况下,扫描将评估表中的每个项目。使用限制运算符将设置“要评估的最大项目数(不一定是匹配的项目数)”。
因此,如果您扫描不带过滤器的表,并且“限制”设置为1,则始终会返回一项(假设至少有一项)。