使用dynamodb获得正确的数据模型

时间:2015-03-13 12:12:33

标签: amazon-dynamodb boto nosql

我即将创建我的第一个dynamodb表,但找不到合适的解决方案来模拟我的需求。这听起来很基本,但可能我的大脑仍然过多地关系到数据库世界。

我想存储类似的东西:

用户可以购买产品(一次或多次)。我要存储的内容是usernameproduct_id

我以后需要查询的唯一内容是:

  • 哪些产品已由用户X
  • 购买
  • 他们购买了多少次

首先,我考虑过拥有一个包含两个属性的项目:usernameproduct_id。但是我不能使用username作为主键(用户可以多次购买)我也不能username + product_id(用户可以多次购买产品)

现在,我会选择usernameproduct_idcounter并将username + product_id作为主键。但是,我将始终首先检查产品是否已购买并更新,否则创建一个新条目。要获取用户的所有产品,我将在username上创建一个全局二级索引。

但是,我不确定这是否正确。任何反馈都会很棒!

1 个答案:

答案 0 :(得分:1)

可能有多种方法可以做到这一点,而且我不了解您的所有要求,因此我无法保证这是您的正确答案,但根据您的说明,这就是我的意思会做的。

首先,我假设每个订单都有某种与之相关的唯一订单号。我会使用此订单号作为表的主键。我不会使用范围键。这将确保满足所有主键唯一的约束。另外,当我将数据写入DynamoDB时,我还会将用户名和product_id写为附加属性。

接下来,我将创建一个全局二级索引,该索引使用用户名作为主键,product_id作为范围键。与表的主键不同,GSI键不必是唯一的,因此如果用户不止一次购买了特定产品,那就没问题了。这个GSI允许我执行查询,例如"按用户名查找所有订单"或者"查找用户名购买的所有订单product_id"。

如果您还需要执行&#34之类的查询,请找到购买了product_id"的所有用户名。你需要另一个使用product_id作为主键和用户名作为范围键的GSI。