Amazon dynamodb 在Amazon Dynamo中将对象存储为Json是一个好主意吗?

Amazon dynamodb 在Amazon Dynamo中将对象存储为Json是一个好主意吗?,amazon-dynamodb,Amazon Dynamodb,在看过AmazonDynamodb之后,我一直在试图找出如何存储我在代码中创建的并希望持久化的复杂对象。我知道如何将这些对象存储在关系数据库(如MySql)中,但如何将它们存储在DynamoDB中 我可以想出一种方法……将它们转换成Json,并将对象的Json表示存储在DynamoDB中。为了让它们再次脱离DynamoDB,我将把它们从Json重新打包到代码中的对象表示中 以下是一个例子: 对于此类型的对象: 汽车的发动机由许多部件组成。每个零件都有序列号、使用寿命和更换值。 现在,我可以将汽车

在看过AmazonDynamodb之后,我一直在试图找出如何存储我在代码中创建的并希望持久化的复杂对象。我知道如何将这些对象存储在关系数据库(如MySql)中,但如何将它们存储在DynamoDB中

我可以想出一种方法……将它们转换成Json,并将对象的Json表示存储在DynamoDB中。为了让它们再次脱离DynamoDB,我将把它们从Json重新打包到代码中的对象表示中

以下是一个例子:

对于此类型的对象: 汽车的发动机由许多部件组成。每个零件都有序列号、使用寿命和更换值。 现在,我可以将汽车转换为json,其外观如下:

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

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

您可以尝试使用字符串数组/stringset。这样你就可以一个接一个地推送更多的物品,不幸的是你不能只要求一件物品,你需要得到所有的物品。另一个选项是序列化数组(如果您使用的是php),它可以将一个好的php数组转换为字符串以存储在数据库中

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

DynamoDB的主流解决方案与MySql非常相似:您只需, 用表项(dynamodb)更改表行(mysql),它们都是平面结构, 但是dynamodb项可以具有与表中其他项不同的属性,并且 具有(包括列/属性名称)

我是否应该将上述Json作为密钥存储在Dynamo中:CarName‘Jaguar’, 值[高于json]?还是有更好的方法来存放汽车物品

不,零件阵列增长后,您将面临新的问题。您可以存储json的压缩版本以减轻影响,但这样您将无法在dynamodb中使用任何属性功能(例如或),也无法与其他AWS产品无缝集成


简而言之,您可以看看存储这些对象的方式:每个对象一个dynamodb项。数组的一个散列,数组元素有N个范围。

项大小限制已达到400kb

因此,我认为物品大小限制现在不应该成为一个大问题

然而,与其他AWS服务集成的问题仍然存在。例如,我非常确定不能在这些json映射字段上使用cloudsearch。特别是,如果数据太大,可以将指向S3对象的指针存储为字段数据

我在dynamo中使用了一点map类型,如果您能够接受新的限制,那么与将所有数据存储在字段中相比,它相当方便/干净。如果您使用的是node/javascript,那么dynampdb数据类型库对于让这些东西运行良好至关重要


我不知道您正在通过编程方式访问dynamo db。假设您正在这样做,那么下面可能会对您有所帮助

  • 使用文档模型对dynamo db执行任何db操作。若你们是在asp.NETCore中做的,那个么文档模型肯定是唯一的机会

  • 在Dynamo Db上,要在其上存储json数据的字段/列。选择列类型作为映射。 映射类型的好处是,您可以使用键/值对为json数据编制索引

  • 关于大小限制映射支持400kb。 检查下面的链接。

    关于文档对象模型,您可以查看此链接。

    我认为存储对象是可以的,只要不过度

    其他一些回复提到,项目的最大大小为400KB但是,获取结果也有一个最大大小,这是一个更大的问题,因为这个限制只有1MB。

    所以,假设您计划存储巨大的文档,最终每个项目消耗200KB。如果在数据库中放置的项目超过5项,则超过1MB限制。这意味着,如果您计划执行一个需要返回5个以上项的查询,它将无法工作。您将只获得5个项目,并且必须执行第二次查询才能获得剩余的项目。你需要自己巩固这些。最重要的是,这将是缓慢的


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

    项目大小限制现在已增加到400 KB,但获取(即查询或扫描)的结果大小限制为1MB。因此,假设您存储了25个400KB的项目,那么您将有10MB的内存,并且需要执行10次分页抓取以从数据库中检索数据。从数据库中提取这25个项目可能需要30秒。