2013-08-02 62 views
2

我想爲尚未具有特定值並設置了附加標誌的域中的所有項目設置值。查詢爲Amazon SimpleDB中的所有項目設置值

基本上對我的所有項目,

SET值a到100,如果VALUEB是0

但我感到困惑的是如何實現這一目標。到目前爲止,香港專業教育學院已通過只使用一個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 SDK。

回答

1

如果您正在談論如何通過編寫自己的代碼進行語法分析,那麼是的。首先,您必須知道所有項目名稱,即您的情況UserID,然後您需要逐個設置值。在這種情況下,您可以使用BatchPUTAttribute。使用批次PUT,您可以在一個請求中更新25個項目。您可以在並行線程中執行5到20個BatchPutAttribute請求。 Know more to tune the performance

如果你需要以某種方式做到這一點棘手的方式,那麼你可以使用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主界面。
  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. Once導入完成後,瀏覽域,您將找到爲列ValueA設置所有項目的值100。

請先在任何虛擬域上嘗試步驟。

我究竟在暗示什麼?

要知道您域中的所有項目名稱,我建議您將本域的所有內容導出到本地文件系統的CSV文件中。一旦以CSV格式獲取所有項目名稱,只保留一列「ValueA」。爲CSV文件中的所有項目設置「100」,並將內容上傳/導入回域。

披露者:我是SDBExplorer的開發者之一。

+0

哦,謝謝你的迴應,我實際上購買了SDB瀏覽器,並用它來設置手動屬性。但是我有點擔心我的數據庫會發生什麼事情,因爲我報告了一個錯誤,那就是保存到csv的地方完全忽略了多值屬性。但在這種情況下,我認爲它會好起來的,但它不會刪除其他屬性嗎?只替換ValueA屬性行? – Pochi

+0

@Chiquis是的。它將'NOT'刪除其他屬性,它將'僅'替換'VauleA'屬性行。我建議,如果域中的數據非常重要,請在虛擬域上嘗試。供參考:SDBExplorer有兩個選項,總是在上傳之前詢問,即「添加」或「替換」。如果您選擇「添加」,它會爲屬性添加新值而不替換舊值,如果選擇「替換」,它將用新值替換舊值。新的SDBExplorer版本將很快發佈,修復了多值屬性。謝謝。 –

相關問題