2012-07-12 157 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