2012-07-12 37 views
5

查看Amazon DynamoDB之後,我一直在試圖弄清楚如何存儲我在代碼中創建並想要保留的複雜對象。我瞭解如何將這些對象存儲在像MySql這樣的關係數據庫中,但是如何將它們存儲在DynamoDB中?將亞馬遜Dynamo中的對象存儲爲Json是一個好主意嗎?

我可以想到一種方法....將它們轉換成Json並將對象的Json表示存儲在DynamoDB中。爲了讓他們再次脫離DynamoDB,我會將他們從Json編碼回我的代碼中的對象表示。

下面是一個例子:

對於這種類型的對象: 一輛車。其中有許多零件的發動機。每個零件都有一個序列號,一個壽命範圍和一個替換值。 現在我可以把車開進JSON這將是這個樣子:

{ 
    "engine": { 
     "parts": [ 
      { 
       "serialNumber": "1234", 
       "lifeSpan": 10, 
       "replacementValue": 100 
      }, 
      { 
       "serialNumber": "5678", 
       "lifeSpan": 1, 
       "replacementValue": 200 
      } 
     ] 
    } 
} 

如果我只是在存儲迪納摩的Json以上的爲重點:CarName「美洲虎」,值[上述JSON]或者有更好的方法來存儲汽車物體?

回答

1

我知道如何將這些對象存儲在關係數據庫 (如MySql)中,但我如何將它們存儲在DynamoDB中?

用於DynamoDB的主流解決方案是非常類似於MySQL的一個:你剛纔, 更改錶行(MySQL的)與表項(dynamodb),他們都是平坦的結構, 但dynamodb項目可以具有與表中其他項目不同的屬性,並且 具有64KB item size limit(包括列/屬性名稱)。

我是否應該將上面的Json存儲在Dynamo中作爲關鍵字:CarName'Jaguar', Value [above json]?或者有更好的方法來存儲汽車物體?

不,一旦你的零件陣列增長,你將面臨64KB item size limit。您可以存儲json的壓縮版本以減輕壓力,但是您將無法在dynamodb中使用任何屬性功能(例如,LSIGSI,updateItem),也無法與其他AWS產品無縫集成。

你可以看看dyngodb存儲這些對象的方式,很快:一個dynamodb項目,用於每個對象。一個用於數組的散列,N個用於數組元素。

+1

該項目的大小限制現在增加到400 KB – 2017-10-24 16:18:26

0

你可以嘗試使用一個字符串/字符串數組。通過這種方式,你可以逐個推送更多的項目,不幸的是,你不能只請求一個項目,你需要全部獲取。另一個選擇是一個序列化數組(如果您使用的是PHP),將一個很好的php數組轉換成一個字符串以便存儲在數據庫中。

0

該項目的大小限制已高達400kb。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

所以我不認爲項目規模的限制,現在應該是一個大問題。

但是,與其他AWS服務集成的問題依然存在。例如,我相當肯定你不能在這些json映射字段上使用cloudsearch。尤其是,考慮到如果數據太大,可以將指向S3對象的指針作爲字段數據存儲。

我已經在發電機中使用了地圖類型,它相當方便/乾淨比較存儲所有的數據在字段中,如果你能忍受新的限制。如果您使用的是node/javascript,dynampdb數據類型庫對於讓這些東西玩起來非常重要。

https://www.npmjs.com/package/dynamodb-data-types

相關問題