Database design 将SQL模式建模到DynamoDB

Database design 将SQL模式建模到DynamoDB,database-design,amazon-dynamodb,database-schema,Database Design,Amazon Dynamodb,Database Schema,在我的项目中,AWS Lambda每天都会从电子商店中删除数据,并将其保存到MySQL中 因为我想更具成本效益,所以我想使用DynamoDB 我想如何查询 这很清楚 按包含最新报废产品数据的类别(价格、评级等)表示父亲、厨房和刀具类别中的所有产品 这个箱子适合发电机吗?模型看起来怎么样 我有三种方法,但每一种都有缺点: 有两个表,第一个是有报废数据的产品,第二个是有产品的类别。这意味着第一次查询要找出类别中的产品,第二次查询要获取产品数据+同步的两个表 productId上有一个表分区键,时间戳

在我的项目中,AWS Lambda每天都会从电子商店中删除数据,并将其保存到MySQL中

因为我想更具成本效益,所以我想使用DynamoDB

我想如何查询

这很清楚 按包含最新报废产品数据的类别(价格、评级等)表示父亲、厨房和刀具类别中的所有产品 这个箱子适合发电机吗?模型看起来怎么样

我有三种方法,但每一种都有缺点:

有两个表,第一个是有报废数据的产品,第二个是有产品的类别。这意味着第一次查询要找出类别中的产品,第二次查询要获取产品数据+同步的两个表

productId上有一个表分区键,时间戳上有一个排序键,对于每个废料,我会为产品保存3行,为每个类别保存一行,并在类别上使用时间戳作为排序键生成GLI。但如果我每天有100个产品报废,每个产品平均分为8个类别,每天将有800行,只是为了有这种多对多的关系。在一个月内,我将有2.4万行。假设我想在一个月后从产品中删除一个类别,我必须更新240行

或者这种情况不适合DynamoDB,使用MySQL会更容易吗


你可以把这个当桌子用

productId | sortKey         |  GSI1     |
1234232   | event#123232323 |           | price1  | orders1 | rating1 | rating_count1 | created_at1
1234232   | event#123232327 |           | price2  | orders2 | rating2 | rating_count2 | created_at2
1234232   | category#father | Father    | <other properties of category>
1234232   | category#kitchen| kitchen   | <other properties of category?>
这里productid是GSI1的次键

这将解决以下用例

对于一个产品,请参见事件历史记录。选择*其中id=X,然后选择sortKey startswith event

获取产品的所有类别。选择*其中id=X,然后按类别排序

使用一个类别获取所有产品。选择*其中GSI1=x

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

下面是一个很好的解释模式设计