在查看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之上]?或者有更好的方法来存储汽车对象吗?
答案 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中使用任何属性功能(例如LSI或GSI,updateItem),也无法集成与其他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数据类型库对于让这些东西变得更好是至关重要的。
答案 4 :(得分:0)
我不知道你是以编程方式访问你的发电机数据库。假设如果你这样做,那么下面可能会帮助你。
使用文档模型对dynamo DB执行任何数据库操作。如果你在asp .net核心中这样做,那么肯定文档模型只是机会。
在Dynamo Db上要存储json数据的字段/列。选择列类型作为地图。 地图类型的好处是您可以使用键/值对索引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