2016-09-18 96 views
0

我有一个招标网站,每个用户都可以为自己的产品出价。 架构:如何在dynamodb上设计产品报价历史表?

productId: S // the product, probably the Hash key 
day: S // for example: "2016-08-05" 
userId: S // the user id that offer his bid for this day 
bidPrice: N 

我不知道如何设计表(一个或多个),我需要能够以这样的查询:

SELECT userId, bidPrice FROM product-history WHERE productId = "sony-tv" AND day between "2016-01-05" AND "2016-05-05"

然而,字段不能是范围键,因为我不能存储多个行每productId +天

我还需要能够更新出价为用户...是这样的:

UPDATE product-history SET price = 12 WHERE productId = "sony-tv" and day="2016-01-05" and userId = "steve"

什么是最好的方式来处理呢?

+0

如果您要给SQL语法,为什么不使用SQL数据库? –

+0

这只是我希望能够待办事项的哪种类型的查询的演示。 –

+0

我明白。我只是问你为什么用DynamoDB标记你的问题,当你可以使用你的Amazon服务来设置一个MySQL数据库来执行这些查询时 –

回答

0

这是上述用例的设计。

散列关键字:用户ID

范围重点:产品编号

每个用户都可以在产品ID的出价。

该设计允许用户对多个产品ID进行出价。

创建产品ID和日期全球次级指数(GSI): -

您可以使用GSI查询使用产品ID和日期的数据库。创建GSI时,可以选择只包含少量属性或主表中的所有属性。

GSI Link

限制: - 产品ID的

用户出价纪录将不可用。例如,如果用户多次更改产品ID的出价,则该数据模型不可用。