DynamoDB-一对一扫描(如JDBC游标)

时间:2018-06-25 19:15:26

标签: amazon-dynamodb

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

1 个答案:

答案 0 :(得分:1)

只需使用Limit扫描参数。

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

因此,如果您扫描不带过滤器的表,并且“限制”设置为1,则始终会返回一项(假设至少有一项)。