将SQL模式建模为DynamoDB

时间:2019-01-23 13:47:25

标签: database-design amazon-dynamodb database-schema

在我的项目中,AWS Lambda每天都会从网上商店抓取数据并将其保存到MySQL。

由于我想提高成本效益,所以我想使用DynamoDB。

我要如何查询?

  • 通过 productId (很明显)
  • 类别(具有最新报废的产品数据-价格,等级等)-表示父亲,厨房和小刀类别中的所有产品

这种情况适合Dynamo吗?模型看起来如何?

我想到了三种方法,但是每种方法都有缺点:

  1. 具有两个表,第一个用于包含已抓取数据的产品,第二个用于具有产品类别的产品。这意味着第一个查询以找出类别中的产品,第二个查询以同步获取产品数据+两个表。

  2. 一个表 productId上的分区键,时间戳上的排序键,对于每一个废品,我将为产品保存 3行对于每个类别一行,然后使用时间戳作为排序键,对类别进行GLI。但是,如果我每天有100个产品报废,那么每个产品平均有8个类别,那么,每天就会有800行,只是为了保持这种多对多关系。在一个月中,我将有 24k行。假设我要在一个月后从产品中删除一个类别,我必须更新240行?

  3. 还是这种情况不适用于DynamoDB,使用MySQL会更容易坚持吗?

Database Scheme

1 个答案:

答案 0 :(得分:1)

您可以将它作为表格。

spentdateTo

此处productid是GSI1的辅助密钥。

这将解决以下用例

  1. 对于一种产品,请参阅事件历史记录。 (SELECT *,其中id = X和sortKey从event开始)

  2. 获取产品的所有类别。 (SELECT *,其中id = X和sortKey以category开头)

  3. 获取一个类别的所有产品。 (SELECT *,其中GSI1 = x)

  4. 从产品中删除一个类别,而不更新许多行。 (在进行更新时,如果有新添加,则获取所有现有类别;如果不存在,则删除并添加特定事件。)

这是一个很好的video,用于说明架构设计。