2

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

基本上我所有的物品,

如果 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);

这适用于单个项目,需要我首先获取项目名称(用户 ID)。这是否意味着我必须“列出”我的所有物品并一一进行?我想既然我有大约 19000 多个项目,我还必须使用令牌来获得 2000 限制之后的下一组,对吧?

没有更有效的方法吗?现在这可能不是那么重,但我预计最终会有超过 10 万个项目。

PD:我正在使用适用于 Eclipse 的 AWS Java 开发工具包。

4

1 回答 1

1

如果您正在谈论如何通过编写自己的代码在语法上做到这一点,那么是的。首先,您必须知道所有项目名称,即在您的情况下为 UserID,然后您需要一一设置一个值。在这种情况下,您可以使用 BatchPUTAttribute。使用 Batch PUT,您可以在一个请求中更新 25 个项目。您可以在并行线程中执行 5 到 20 个 BatchPutAttribute 请求。了解更多以调整性能

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

  1. 下载 SDBExplorer zip 版本表单下载页面。
  2. 提取它并运行可执行文件。
  3. 下载 30 天试用许可证。
  4. 下载许可证后,主 UI 将打开。
  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 主 UI。
  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 的所有项目。

请先在任何虚拟域上尝试这些步骤。

我到底想给你什么建议?

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

Discloser:我是 SDBExplorer 的开发者之一。

于 2013-08-02T05:39:43.157 回答