查询以设置Amazon SimpleDB中所有项的值

时间:2013-08-02 01:17:22

标签: amazon-web-services amazon-simpledb

我正在尝试为域中尚未具有特定值且设置了其他标志的所有项目设置值。

基本上我的所有物品,

  

如果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。

1 个答案:

答案 0 :(得分:1)

如果您正在谈论如何通过编写自己的代码来编写语法,那么是。首先,您必须知道所有项目名称,即在您的情况下UserID,然后您需要逐个设置一个值。在这种情况下,您可以使用BatchPUTAttribute。使用Batch PUT,您可以在一个请求中更新25个项目。您可以在并行线程中执行5到20个BatchPutAttribute请求。 Know more to tune the performance

如果你需要以某种方式以棘手的方式做到这一点,那么你可以使用SDBExplorer请记住,它会为所有项目设置100,因为SDBExplorer不支持条件PUT 。如果您仍想设置它,请按照以下步骤操作 -

  1. 下载SDBExplorer zip版表格下载页面。
  2. 解压缩并运行可执行文件。
  3. 下载30天试用许可证。
  4. 下载许可证后,主用户界面将会打开。
  5. 提供有效的访问密钥和密钥,然后单击“开始”按钮。
  6. 您将在左侧树中看到域列表。
  7. 右键单击要为所有项目设置值的域。
  8. 选择“导出为CSV”选项。
  9. 将域内容导出为CSV。 http://www.sdbexplorer.com/documentation/simpledb--how-to-export-domain-in-csv-using-sdbexplorer.html
  10. 转到您的域已导出的路径。
  11. 打开CSV文件。
  12. 您的第一列是商品名称。
  13. 删除项目名称和列“ValueA”以外的所有列。
  14. 为“ValueA”列下的所有项目名称设置100。
  15. 保存CSV。
  16. 转到SDBExplorer主界面。
  17. 选择相同的域。
  18. 点击工具栏中的“导入”选项。
  19. 面板将打开。
  20. 现在将数据导入域。 http://www.sdbexplorer.com/documentation/simpledb--how-to-upload-csv-file-data-and-specifying-column-as-amazon-simple-db-item-name.html
  21. 导入完成后,浏览域名,您会发现值为100设置为ValueA列的所有项目。
  22. 请先在任何虚拟域上尝试这些步骤。

    我究竟想建议你什么?

    要了解您域中的所有商品名称,建议您将域中的所有内容导出到本地文件系统的CSV文件中。获得CSV中的所有项目名称后,只保留一列“ValueA”。为CSV文件中的所有项目设置“100”,并将内容上传/导入到域中。

    披露:我是SDBExplorer的开发人员之一。