我正在尝试为域中尚未具有特定值且设置了其他标志的所有项目设置值。
基本上我的所有物品,
如果ValueB为0,则将ValueA设置为100
但我对如何实现这一点感到困惑。到目前为止,我一直只使用像这样的PutRequest设置单个项目的值:
ArrayList<ReplaceableAttribute> newAttributes = new ArrayList<ReplaceableAttribute>();
newAttributes.add(new ReplaceableAttribute("ValueA",Integer.toString(100), true));
PutAttributesRequest newRequest = new PutAttributesRequest();
newRequest.setDomainName(usersDomain);
newRequest.setItemName(userID);
newRequest.setAttributes(newAttributes);
sdb.putAttributes(newRequest);
这适用于单个项目,需要我首先获取项目名称(userID)。这是否意味着我必须“列出”我的所有项目并逐一进行此操作? 我想,既然我有大约19000多个项目,我还必须使用令牌来获得2000年限制之后的下一个项目吗?
有没有更有效的方法?这可能现在不是那么重,但我希望最终有超过10万件物品。
PD:我正在使用AWS Java SDK for Eclipse。
答案 0 :(得分:1)
如果您正在谈论如何通过编写自己的代码来编写语法,那么是。首先,您必须知道所有项目名称,即在您的情况下UserID,然后您需要逐个设置一个值。在这种情况下,您可以使用BatchPUTAttribute。使用Batch PUT,您可以在一个请求中更新25个项目。您可以在并行线程中执行5到20个BatchPutAttribute请求。 Know more to tune the performance。
如果你需要以某种方式以棘手的方式做到这一点,那么你可以使用SDBExplorer。 请记住,它会为所有项目设置100,因为SDBExplorer不支持条件PUT 。如果您仍想设置它,请按照以下步骤操作 -
请先在任何虚拟域上尝试这些步骤。
我究竟想建议你什么?
要了解您域中的所有商品名称,建议您将域中的所有内容导出到本地文件系统的CSV文件中。获得CSV中的所有项目名称后,只保留一列“ValueA”。为CSV文件中的所有项目设置“100”,并将内容上传/导入到域中。
披露:我是SDBExplorer的开发人员之一。