我正试图为域中尚未具有特定值并设置了附加标志的所有项设置一个值。
基本上我所有的项目,
如果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。
如果您正在讨论如何通过编写自己的代码来从语法上做到这一点,那么是的。首先,你必须知道所有的项目名称,即在你的情况下的UserID,然后你需要逐一设置一个值。在这种情况下,可以使用BatchPUTAttribute。使用Batch PUT,您可以在一个请求中更新25个项目。您可以在并行线程中执行5到20个BatchPutAttribute请求。了解更多以调整性能。
如果你需要以一种棘手的方式来完成它,那么你可以使用SDBExplorer请记住,它将为所有项目设置100,因为SDBExplorer不支持条件PUT。如果你想设置它无论如何,然后按照这些步骤-
- 下载SDBExplorer zip版本表单下载页面
- 提取它并运行可执行文件
- 下载30天试用许可证
- 下载许可证后,主UI将打开
- 提供有效的访问密钥和密钥,然后单击"GO"按钮
- 您将在左侧树中看到域列表
- 右键单击要为所有项目设置值的域
- 选择"导出到CSV"选项
- 将域的内容导出为CSV。http://www.sdbexplorer.com/documentation/simpledb--how-to-export-domain-in-csv-using-sdbexplorer.html
- 转到导出域的路径
- 打开CSV文件
- 您的第一列是项目名称
- 删除除项目名称和"ValueA"列之外的所有列
- 为"ValueA"列下的所有项目名称设置100
- 保存CSV
- 转到SDBExplorer主UI
- 选择相同的域
- 点击工具栏上的"导入"选项
- 一个面板将打开
- 现在将数据导入域。http://www.sdbexplorer.com/documentation/simpledb--how-to-upload-csv-file-data-and-specifying-column-as-amazon-simple-db-item-name.html
- 导入完成后,浏览域,您会发现ValueA列的所有项都设置了值100
请先在任何虚拟域上尝试这些步骤。
我到底想向你建议什么?
为了知道你域中的所有项目名称,我建议你将域中的全部内容导出到本地文件系统的CSV文件中。在CSV中获得所有项目名称后,只保留一列"ValueA"。为CSV文件中的所有项目设置"100",并将内容上传/导入回域。
披露者:我是SDBExplorer的开发者之一。