10

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

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

这是一个例子:

对于这种类型的对象:汽车有一个引擎,它有很多零件。每个部件都有一个序列号、一个使用寿命和一个更换价值。现在我可以把 Car 变成 json,看起来像这样:

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

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

4

5 回答 5

5

I understand how I would store these objects in a Relational Database like MySql but how would I store them in DynamoDB?

The mainstream solution for DynamoDB is pretty similar to the MySql one: you just, change a table row (mysql) with a table item (dynamodb), they both are flat structures, but a dynamodb item could have different attributes from other items in the table, and have a 64KB item size limit (column/attribute names included).

Should I just store the above Json in Dynamo as Key: CarName 'Jaguar', Value [above json] ? Or is there a better way to store the Car Object?

No, once your parts array grows you will face the 64KB item size limit. You can store a compressed version of the json to mitigate, but then you will not be able to use any attribute feature (eg. LSI or GSI, updateItem) in dynamodb, nor integrate seamlessly with other AWS products.

You can take a look at the way dyngodb stores those objects, shortly: one dynamodb item, for every object. One hash for arrays, with N ranges for the array elements.

于 2014-01-29T16:28:00.843 回答
2

我认为存储对象很好,只要你不过度使用它。

其他一些回复提到Item 的最大大小是 400KB但是,对于 fetch 的结果也有一个最大大小,这是比较成问题的,因为这个限制只有 1MB。

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

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

于 2019-08-17T23:39:23.323 回答
1

您可以尝试使用字符串数组/字符串集。这样你就可以一个一个地推入更多的项目,不幸的是你不能只请求一个项目,你需要把它们都拿到。另一种选择是序列化数组(如果您使用的是 php),它将一个不错的 php 数组转换为一个字符串以存储在数据库中。

于 2012-07-12T19:26:18.927 回答
1

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

  1. 使用文档模型对 dynamo DB 进行任何数据库操作。如果您在 asp .net core 中执行此操作,那么文档模型绝对是唯一的机会。

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

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

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

于 2018-04-16T14:17:44.333 回答
0

项目大小限制已达到 400kb。

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

所以我不认为项目大小限制现在应该是一个大问题。

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

我在 dynamo 中使用了一点地图类型,如果您可以接受新的限制,那么与将所有数据存储在字段中相比,它相当方便/干净。如果您使用的是 node/javascript,那么 dynampdb 数据类型库对于让这些东西玩起来很关键。

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

于 2015-03-22T23:51:08.903 回答