3

我尝试学习 DynamoDB 只是为了教学目的,因此我建议自己创建一个小项目来销售车辆(汽车、自行车、四轮摩托车等),以便学习并获得一些使用 NoSQL 数据库的经验。我阅读了很多关于创建正确模型的文档,但我仍然无法找出存储数据的最佳方式。

我想通过以下过滤器获取所有车辆:

  • 获得所有不超过 3 个月的汽车。
  • 按品牌、年份和型号获取所有不超过 3 个月的汽车。
  • 依此类推,之前对自行车、四轮摩托车等的查询也是如此。

在阅读了带有示例的官方文档和其他页面后(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-approach,https ://medium.com/swlh/data-modeling-in-aws-dynamodb-dcec6798e955单独的表与地图列表 - DynamoDB),他们说最好的设计只使用一个表来存储所有内容,所以我最终得到一个模型如下:

-------------------------------------------------------------------------------------
Partition key |          Sort key     | Specific attributes for each type of vehicle
-------------------------------------------------------------------------------------
    cars      | date#brand#year#model | {main attributes for the car}
    bikes     | date#brand#year#model | {main attributes for the bike}
-------------------------------------------------------------------------------------

我使用了复合排序键,因为他们指定这是搜索数据的好习惯(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html)。

但是在定义我的模型之后,我最终发现以前的模型会有一个称为“热点”或“霍伊键”的问题。(https://medium.com/expedia-group-tech/dynamodb-data-modeling-c4b02729ac08https://dzone.com/articles/partitioning-behavior-of-dynamodb)因为在官方文档中他们建议使用分区具有高基数的键来避免该问题。

所以在这一点上,我对如何定义一个好的和可扩展的模型有点困惑。您能否为我提供一些有关如何实现模型以获取上述查询的帮助或示例?

注意:我还考虑为每辆车创建一个特定的表,但这会产生更多问题,因为要找到执行全表扫描所需的信息。

4

1 回答 1

1

一些东西...

热分区,只有当你有多个分区时才会发挥作用......

仅仅因为您有多个分区(哈希)键,并不意味着 DDB 将需要多个分区。您还需要使用超过 10GB 的数据和/或超过 3000 个 RCU 或 1000 个 WCU。

接下来,DDB 现在支持“自适应容量”,因此热分区不再像以前那么重要了。 为什么您对 DynamoDB 的了解可能已经过时

结合更新的“即时自适应容量”,您可以按需获得 DDB。

最后一点,您可能认为给定的分区(哈希)键下最多只能有 10GB 的数据。如果您的表使用本地二级索引 (LSI),这是正确的,但在其他情况下不是正确的。因此,请考虑使用全局二级索引 (GSI)。与 GSI 相关的额外成本,因此需要考虑权衡。

于 2019-10-25T14:47:06.467 回答