将 SQL 模式建模到 DynamoDB
Modeling SQL schema to DynamoDB
在我的项目中,AWS Lambda 每天从 e-shop 抓取数据并将它们保存到 MySQL。
因为想更cost-effective所以想用DynamoDB
我要怎么查询?
- by productId(很清楚)
- by categories(最新抓取的 product_data - 价格、评级等 )- 表示类别中的所有产品父亲、厨房和刀具
这种情况适合table Dynamo 吗?模型会是什么样子?
我想到了三种方法,但每一种都有缺点:
有两个table,第一个用于具有抓取数据的产品,第二个用于具有产品的类别。这意味着第一个查询找出类别中的产品,第二个查询获取产品数据 + 两个 table 同步。
一个 table productId 上的分区键,时间戳 上的排序键,对于每次刮擦我将为产品3 行,为每个类别保存一行,并在类别上使用时间戳作为排序键创建 GLI。但是,如果我每天抓取 100 个产品,每个产品平均分为 8 个类别,那么每天将有 800 行,只是为了具有这种 many-to-many 关系。在一个月内我将有 24k 行。假设我想在一个月后从产品中删除一个类别,我必须更新 240 行?
或者这种情况不适合 DynamoDB,坚持使用 MySQL 会更容易吗?
你可以把它作为你的 table。
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的secondary Key。
这将解决以下用例
对于一个产品,请查看事件历史记录。 (SELECT* where id=X and sortKey startswith event )
获取产品的所有类别。 (SELECT* 其中 id=X 和 sortKey 以类别开头)
获取一个类别的所有产品。 (SELECT* 其中 GSI1=x)
从产品中删除一个类别而不更新很多行。 (在进行更新时,如果有新添加,则获取所有现有类别,如果不存在,则删除并添加特定事件。)
这里有一个很好的 video 解释模式设计。
在我的项目中,AWS Lambda 每天从 e-shop 抓取数据并将它们保存到 MySQL。
因为想更cost-effective所以想用DynamoDB
我要怎么查询?
- by productId(很清楚)
- by categories(最新抓取的 product_data - 价格、评级等 )- 表示类别中的所有产品父亲、厨房和刀具
这种情况适合table Dynamo 吗?模型会是什么样子?
我想到了三种方法,但每一种都有缺点:
有两个table,第一个用于具有抓取数据的产品,第二个用于具有产品的类别。这意味着第一个查询找出类别中的产品,第二个查询获取产品数据 + 两个 table 同步。
一个 table productId 上的分区键,时间戳 上的排序键,对于每次刮擦我将为产品3 行,为每个类别保存一行,并在类别上使用时间戳作为排序键创建 GLI。但是,如果我每天抓取 100 个产品,每个产品平均分为 8 个类别,那么每天将有 800 行,只是为了具有这种 many-to-many 关系。在一个月内我将有 24k 行。假设我想在一个月后从产品中删除一个类别,我必须更新 240 行?
或者这种情况不适合 DynamoDB,坚持使用 MySQL 会更容易吗?
你可以把它作为你的 table。
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的secondary Key。
这将解决以下用例
对于一个产品,请查看事件历史记录。 (SELECT* where id=X and sortKey startswith event )
获取产品的所有类别。 (SELECT* 其中 id=X 和 sortKey 以类别开头)
获取一个类别的所有产品。 (SELECT* 其中 GSI1=x)
从产品中删除一个类别而不更新很多行。 (在进行更新时,如果有新添加,则获取所有现有类别,如果不存在,则删除并添加特定事件。)
这里有一个很好的 video 解释模式设计。