2014-02-28 145 views
0

我知道我們可以通過兩個操作進行更新,首先通過查詢數據庫獲取主鍵,然後通過put操作更新它。但DynamoDB是否支持通過一個操作更新關係數據庫(如mysql)?由於兩次操作將花費更多時間進行網絡傳輸。DynamoDB是否支持更新操作(如關係數據庫)

我的情況是這樣的: 我有一個表A與字段ID,名稱,位置,值

而名稱+位置可以唯一地定義一行。 所以現在我想在名稱和位置滿足某些條件時更新字段「值」,但我不知道該ID。因此,如果我使用mysql,那麼我可以通過「更新設置值= XXX其中name =」abc「和location =」123「」來更新它。 但是當我使用dynamoDB時,我必須先獲得主鍵ID。 然後使用密鑰更新該項目。所以我的問題是,DynamoDB是否也支持與MySQL類似的更新操作。 謝謝!

回答

0

陳砸在鼻子上。喬伊,你描述的(GET,然後認沽)的情況相當於2個MySQL的函數

SELECT * 
    FROM TABLE 
    WHERE key = x 

    UPDATE TABLE 
    SET var = param 
    WHERE key = x 

你看到Select/PutItem都不怎麼更新過程的一部分嗎?只要你有密鑰,你就不需要執行查詢。我假設你在PutItem請求之前執行GetItem,因爲PutItem替換了整個項目/行(即刪除Put請求中未指定的所有屬性)。

所以,如果原來的項目看起來像:<密鑰ID = 1,第一名稱=約翰,最後名稱= DOE,年齡= 22>

和執行的PutItem:<密鑰ID = 1,位置=紐約>

的最後一個項目是這樣的:<密鑰ID = 1,位置=紐約>

如果你在的地方PutItem的執行的updateItem那麼你會inste廣告GET:

<密鑰ID = 1,第一名稱=約翰,最後名稱= DOE,年齡= 22,位置=紐約>

下面是使用的updateItem與Java的鏈接。還有使用的例子。淨和PHP

UpdateItem for Java

+0

我的情況是: 我有場ID,名稱,位置值的表一。 名稱+位置可以唯一地定義一行。所以現在我想在名稱和位置滿足某些條件時更新字段「值」,但我不知道該ID。因此,如果我使用mysql,那麼我可以通過「更新設置值= XXX其中name =」abc「和location =」123「」來更新它。但是當我使用dynamoDB時,我必須先獲得主鍵ID。然後使用密鑰更新該項目。所以我的問題是,DynamoDB是否也支持與MySQL類似的更新操作。 謝謝! – Joey

+0

DynamoDB不支持您所描述的功能,但我建議您閱讀文檔/開發人員指南。據我所知,你甚至不需要一個ID,或者你可以讓ID是一個屬性。 – Hanny

+0

DynamoDB不支持您描述的功能,但我建議您閱讀文檔/開發人員指南,特別是關於散列和範圍鍵的內容。解決您的問題是數據模式。由於_name_和_location_是唯一的,所以您可以設置hash-key = _name_和range-key = _location_(反之亦然,選擇最具多樣性的散列鍵),這樣您就可以一步更新該行。你甚至不需要_ID_,或者你可以讓_ID_成爲一個屬性。這裏是鏈接[數據模型](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html) – Hanny

0

你並不需要先得到主鍵。如果您知道主鍵,則無需獲取任何內容,只需使用UpdateItem API電話即可更新您的項目。

如果仍然不清楚,請編輯您的問題,並添加一些您正在嘗試做的代碼示例。

相關問題