DynamoDBMapper:如何在单个查询或DynamoDBMapper的扫描中获取多个ID(数组)的所有行

时间:2019-04-03 13:41:32

标签: java amazon-web-services web-services amazon-dynamodb

我的数据库表由ID唯一的多行组成。

API(端点)->获取ID的行 我正在传递输入数组(id1,id2,id3,id4)

k = 0
for i,j in zip(x,y):
    while k < len(xd) and xd[k] < i:
        k += 1
    if xd[k] == i:
        newY[k] = j

我们可以使用扫描或查询。

感谢您的帮助。 预先感谢。

2 个答案:

答案 0 :(得分:1)

扫描或查询不适用于此事务。

您应该迭代列表,并使用GetItem分别检索每个项目,这是获取项目最快,最便宜的方法。如果您希望执行并发请求,也可以使用BatchGetItem

扫描将很慢且昂贵,因为它将评估表中的每个项目。但是,如果您坚持要使用它,只需扫描表并提供ScanFilter即可退还物品。

如果您使用查询,无论如何它将以与GetItem完全相同的方式运行。您将必须迭代ID列表。也就是说,在这种情况下,查询根本不适用。

答案 1 :(得分:0)

我在单个查询调用(dynamoDBMapper.SCAN)中实现了。示例如下

    private List<Activity> getbyIds(List<UUID> Ids) {
            List<Entity> activityEntityList = new ArrayList<Entity>();
            List<AttributeValue> attList = Ids.stream().map(x -> new AttributeValue(x.toString())).collect(Collectors.toList());

            DynamoDBScanExpression dynamoDBScanExpression = new DynamoDBScanExpression()
                    .withFilterConditionEntry("id", new Condition()
                            .withComparisonOperator(ComparisonOperator.IN)
                            .withAttributeValueList(attList));
            PaginatedScanList<Entity> list = dynamoDBMapper.scan(Entity.class, dynamoDBScanExpression);
}