当前位置: 首页 > 知识库问答 >
问题:

查询多值属性的DynamoDB表/索引模式设计

盛柏
2023-03-14

我正在构建一个DynamoDB应用程序,最终将为大量(数百万)用户提供服务。目前该应用程序的项目模式很简单:

{ 
  userId: "08074c7e0c0a4453b3c723685021d0b6",  // partition key
  email: "foo@foo.com",
  ... other attributes ...
}

当新用户注册时,或者如果用户希望通过电子邮件地址找到另一个用户,我们需要通过电子邮件而不是用户ID来查找用户。对于当前的模式,这很简单:只需使用一个全局二级索引和电子邮件作为分区键。

但是我们希望为每个用户启用多个电子邮件地址,并且DynamoDBQuery操作不支持List-类型的Key条件表达式。所以我正在权衡几个选项,以避免每次用户注册或想要通过电子邮件地址查找另一个用户时进行昂贵的Scan操作。

下面是我计划更改的内容,以便为每个用户启用额外的电子邮件。这是一个好方法吗?有更好的选择吗?

  1. 添加排序键列(例如,itemTypeAndIndex),以允许每个用户ID有多个项目

仍然可以使用相同的全局二级索引(使用分区键作为电子邮件)来查找主电子邮件地址和非主电子邮件地址。

如果用户想要更改其主要电子邮件地址,我们将交换“主要”和“非主要”项目中的值。(现在DynamoDB支持事务,这样做会比以前更安全!)

如果我们需要删除一个用户,我们必须删除该用户ID的所有项目。如果我们需要合并两个用户,那么我们必须合并该用户ID的所有项目。

相同的方法(具有相同userId但不同排序键的新项目)可用于其他需要Query-able的1-用户拥有多值数据

这是一个好方法吗?有更好的方法吗?

暂时还没有答案

 类似资料:
  • 我希望使用DynamoDB表来请求我在查询中创建的二级索引。 从现在开始,对于我正在做的一个二级索引: 我会像这样构建我的KeyConditionExpression: 我读了一遍又一遍这份文件,但我不知道怎么做: https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/gettingstartedguide/GettingStarted.P

  • 我不确定这是否是问这个问题的正确地方。 我是dynamodb的新手,正在尝试创建一个小型web应用程序。我已经阅读了这里的最佳实践http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html 我的桌子将是: 建筑物 租户(一栋建筑可以有尽可能多的租户,由楼层编号确定) 收件人(每个

  • 我有一个AWS DynamoDb购物车表,其项目结构如下- - 该表将作为主键, 作为索引或GSI, 作为索引或GSI。 我希望能够查询购物车表, 查找的项目。 我不知道这是否意味着查询- 我知道AWS DynamoDb表不能同时使用多个索引进行查询, 我遇到了以下问题,它有一个类似的用例,答案是建议创建一个复合键, 使用多个本地辅助索引DynamoDb进行查询 这是否意味着在将新项放入表中时,

  • 现在,我要检索一个值: Q1:在[3.3,6.6]范围内-预期返回值:[3.3,5.5,6.6]或[3.3,3.3,5.5,6.6](包括最后一个),如果没有,则为[3.3,5.5]或[3.3,3.3,5.5]。 Q2:在[2.0,4.0]范围内-预期返回值:[3.3]或[3.3,3.3] 对于任何其他多索引维度都是相同的,例如B值: Q3:在范围[111,500]中有重复,作为范围中的数据行数-

  • 我的主键是一个名为“ID”的字段 我在表中的字段“group_number”上添加了一个辅助索引 我通过二级索引进行查询,如下所示: 然而;我得到错误“ValidationException:query condition missed key schema Element:ID” DynamoDB只允许查询主键吗?我的印象是您使用“getitem”作为主键,因为如果您使用一个主键,只有一个记录可

  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?