【问题标题】:Is there a way to retrieve all items in a single table using partition key in dynamodb?有没有办法使用 dynamodb 中的分区键检索单个表中的所有项目?
【发布时间】:2021-09-11 09:31:08
【问题描述】:

我目前正在尝试使用 AWS DynamoDB,并创建了一个简单的用户表,其中 user_id 作为分区键,其他属性作为 first_name 和 last_name。

我想列出所有存储的用户。

我正在尝试对其执行简单的 CRUD,并且可以检索单个用户、更新项目和删除项目。 检索所有用户是一项相当简单的任务,但我无法通过查询来执行相同操作。

我使用了扫描操作,它工作正常,但我想为此编写一个查询。 我想去表并为我的“list_users”函数获取所有带有 [user_id,first_name,last_name] 的项目。

我是 AWS DynamoDB 的新手,如果这是一个愚蠢的问题,我很抱歉。 任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 听起来Scan 确实正是您正在寻找的。它出什么问题了?你是什​​么意思“我想写一个查询”?你的意思是Query 操作?为什么,如果 Scan 完全符合您的要求,它有什么问题?
  • @NadavHar'El Sure Scan 效果很好,只是想知道其他可能的方法。

标签: amazon-dynamodb dynamodb-queries


【解决方案1】:

实现此目的的一种方法是使用 GSI。 GSI 是表的“替代视图”,它们最终是一致的。 GSi 还具有单独的缩放属性,您可以为 GSI 提供与主表不同的吞吐量。

但在您的情况下,表中实际上并没有任何数据可以添加 GSI 以使列出用户成为可能。因此,另一种选择是使用单表设计。这意味着对表中的数据进行规范化,以便数据与您的查询模式相匹配。因此,假设您要做的就是获取/更新单个用户,列出用户,然后添加到示例中,添加电子邮件属性并确保它是唯一的。

这就是单个用户在您的表格中的样子来实现这一点。

PK SK firstName lastName email userId
user_123 main Jane Doe jane@gmail.com
user_list user_123 Jane Doe
user_email user_jane@gmail.com user_123

请注意,列表仅包含名字和姓氏 - 您只需将数据添加到您实际想要返回的 ùser_list 键。

表格中有多个用户,它看起来像这样:

PK SK firstName lastName email userId
user_123 main Jane Doe jane@gmail.com
user_456 main John Doe john@gmail.com
user_list user_123 Jane Doe
user_list user_456 John Doe
user_email user_jane@gmail.com user_123
user_email user_john@gmail.com user_456

这是一个允许您查询PK user_list并获取所有用户的结构。当您写入数据时,请使用带有条件表达式的事务,以确保该电子邮件的 user_email 不存在,等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多