Amazon DynamoDB获取属性值为…的项目(Java API)

前端之家收集整理的这篇文章主要介绍了Amazon DynamoDB获取属性值为…的项目(Java API)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我对亚马逊的AWS及其Java的API很新,所以我不确定什么是我尝试做的最有效的方法.基本上,我正在尝试设置一个数据库,用于存储项目的ID,它的状态,以及用户上传到S3存储桶时的存储桶和位置.我遇到的问题是获取状态属性下状态为“就绪”的所有项目ID的列表.任何状态为“就绪”的项目都需要将其ID号加载到数组或arraylist中以供日后参考.有什么建议?

最佳答案
执行此操作的方法是使用扫描API.但是,这意味着发电机需要查看表中的每个项目,并检查其属性“status”是否等于“ready”.此操作的成本很高,并且会向您收取阅读表格中每个项目的费用.

代码看起来像这样:

Condition scanFilterCondition = new Condition()
    .withComparisonOperator(ComparisonOperator.EQ.toString())
    .withAttributeValueList(new AttributeValue().withS("ready"));
Map

虽然它需要对数据进行非规范化,但有一种方法可以使其更好.尝试使用散列键“status”和范围键“project ID”保留第二个表.这是您现有表格的补充.这将允许您使用查询API(扫描更便宜的表兄弟),并询问其所有项目的哈希键为“就绪”.这将为您提供所需项目ID的列表,然后您可以从已有的项目ID表中获取它们.

这个代码看起来像这样:

QueryRequest queryRequest = new QueryRequest()
    .withTableName("ProductByStatus")
    .withHashKeyValue(new AttributeValue().withS("ready"));

QueryResult result = client.query(queryRequest);

这种方法的缺点是,每当更新状态字段时都必须更新两个表,并且必须确保它们保持同步. Dynamo不提供事务性,因此您必须为主项目表的更新成功,但您的辅助状态表不成功的情况做好准备.或相反亦然.

进一步参考:http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html

猜你在找的Java相关文章