Amazon DynamoDB将获取属性值为。。。(Java API)

Amazon DynamoDB将获取属性值为。。。(Java API),java,arraylist,attributes,amazon-dynamodb,Java,Arraylist,Attributes,Amazon Dynamodb,我对Amazon的AWS及其Java API还相当陌生,所以我不确定我要尝试的最有效的方法是什么。基本上,我正在尝试建立一个数据库,当用户上传到S3 bucket时,该数据库将存储项目的ID、状态以及bucket和位置。我遇到的问题是在status属性下获取所有状态为“ready”的项目ID的列表。任何状态为“就绪”的项目都需要将其ID号加载到数组或arraylist中,以供以后参考。有什么建议吗?方法是使用扫描API。然而,这意味着dynamo需要查看表中的每个项目,并检查其属性“status

我对Amazon的AWS及其Java API还相当陌生,所以我不确定我要尝试的最有效的方法是什么。基本上,我正在尝试建立一个数据库,当用户上传到S3 bucket时,该数据库将存储项目的ID、状态以及bucket和位置。我遇到的问题是在status属性下获取所有状态为“ready”的项目ID的列表。任何状态为“就绪”的项目都需要将其ID号加载到数组或arraylist中,以供以后参考。有什么建议吗?

方法是使用扫描API。然而,这意味着dynamo需要查看表中的每个项目,并检查其属性“status”是否等于“ready”。此操作的成本将很高,并且将向您收取读取表中每个项目的费用

代码如下所示:

Condition scanFilterCondition = new Condition()
    .withComparisonOperator(ComparisonOperator.EQ.toString())
    .withAttributeValueList(new AttributeValue().withS("ready"));
Map<String, Condition> conditions = new HashMap<String, Condition>();
conditions.put("status", scanFilterCondition);

ScanRequest scanRequest = new ScanRequest()
    .withTableName("MasterProductTable")
    .withScanFilter(conditions);

ScanResult result = client.scan(scanRequest);
这种方法的缺点是,无论何时更新status字段,都必须更新两个表,并且必须确保它们保持同步。Dynamo不提供事务性,因此您必须准备好主项目表的更新成功,但您的辅助状态表没有。反之亦然


供进一步参考:

这看起来会起作用。该流程已经在瀑布式工作流中处理,因此,如果在最后一步(即更新此状态)之前流程的任何部分失败,它将提前终止,因此只有在其他所有操作都成功时,状态才会得到更新。谢谢你的帮助!一年半后,我对此投了赞成票,但我感到内疚:DynamoDB已经发布了二级索引,它们就是为了这个目的而创建的,而不需要管理另一个表。看看他们!哈哈,我也注意到了,也在考虑更新帖子。但是是的,二级索引很好。。。尽管仍有一些情况下你的原始答案仍然适用。任何对这篇文章感兴趣的人,在决定它们是否最适合你的时候,一定要阅读文档,特别是文档中的“节约使用索引”部分,如果你想知道为什么(这里有文档:)。
QueryRequest queryRequest = new QueryRequest()
    .withTableName("ProductByStatus")
    .withHashKeyValue(new AttributeValue().withS("ready"));

QueryResult result = client.query(queryRequest);