将一个Object作为Json存储在Amazon Dynamo中是一个好主意吗?

时间:2012-07-12 00:58:42

标签: amazon-dynamodb

在查看Amazon DynamoDB之后,我一直在试图找出如何存储我在代码中创建的复杂对象并希望保留。我理解如何将这些对象存储在像MySql这样的关系数据库中,但是如何将它们存储在DynamoDB中呢?

我可以想到一种方法......将它们转换为Json并将对象的Json表示存储在DynamoDB中。为了让他们再次离开DynamoDB,我会将他们从Json编组回我的代码中的Object表示。

以下是一个例子:

对于这种类型的对象: 汽车有一个有很多零件的发动机。每个零件都有一个序列号,一个寿命和一个替换值。 现在我可以将Car变成json,看起来像这样:

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

我应该将上面的Json存储在Dynamo中作为Key:CarName'Jaguar',Value [在json之上]?或者有更好的方法来存储汽车对象吗?

5 个答案:

答案 0 :(得分:2)

只要您不过度使用对象,我认为可以存储对象。

另一些​​答复提到,项目的最大大小为400KB 但是,由于此限制只有1MB,因此提取结果还有一个最大的问题。

因此,假设您计划存储大量文档,最终每个Item消耗200KB。如果您在数据库中放置了5个以上的项目,则您超出了1MB的限制。这意味着,如果您计划执行一个查询,该查询需要返回5个以上的项目,那么它将无法正常工作。您将仅获得5个项目,并且必须执行第二次查询才能获得剩余的项目。您将需要自己整合这些内容。最重要的是,它会很慢。

对于真正不是问题的小型JSON消息,您不必担心。

答案 1 :(得分:1)

  

我理解如何将这些对象存储在关系数据库中   像MySql,但我如何将它们存储在DynamoDB中?

DynamoDB的主流解决方案非常类似于MySql:你只是, 用表项(dynamodb)更改表行(mysql),它们都是扁平结构, 但是一个dynamodb项目可能与表格中的其他项目具有不同的属性,并且 有64KB item size limit(包括列/属性名称)。

  

我应该将上面的Json存储在Dynamo中作为Key:CarName'Jaguar',   价值[以上json]?或者有更好的方法来存储汽车对象吗?

不,一旦你的零件阵列增长,你将面对64KB item size limit。您可以存储json的压缩版本以进行缓解,但是您将无法在dynamodb中使用任何属性功能(例如LSIGSIupdateItem),也无法集成与其他AWS产品无缝连接。

您可以看一下dyngodb存储这些对象的方式:一个dynamodb项目,用于每个对象。数组的一个哈希值,数组元素的N个范围。

答案 2 :(得分:0)

您可以尝试使用字符串数组/字符串集。这样你可以逐个推送更多的物品,遗憾的是你不能只请求一件物品,你需要全部拿到。另一个选项是一个序列化数组(如果你使用的是php),它将一个不错的php数组转换成一个字符串,用于存储在数据库中。

答案 3 :(得分: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

答案 4 :(得分:0)

我不知道你是以编程方式访问你的发电机数据库。假设如果你这样做,那么下面可能会帮助你。

  1. 使用文档模型对dynamo DB执行任何数据库操作。如果你在asp .net核心中这样做,那么肯定文档模型只是机会。

  2. 在Dynamo Db上要存储json数据的字段/列。选择列类型作为地图地图类型的好处是您可以使用键/值对索引json数据。

  3. 关于尺寸限制图支持400kb。 检查以下链接。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-data-types

    关于文档对象模型,您可以查看此链接。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DotNetSDKMidLevel.html