【问题标题】:How to structure AWS DynamoDB Table with Cognito如何使用 Cognito 构建 AWS DynamoDB 表
【发布时间】:2019-09-16 21:46:10
【问题描述】:

我正在尝试为关系数据库做一些相对简单的事情,但我不知道如何为非关系数据库做。

我正在尝试在 AWS 上制作一个简单的任务 Web 应用程序,人们可以在其中发布他们的任务。

我有一个名为 tasks 的表,它使用 AWS Cognito 提供的身份验证令牌中的用户 ID。我想知道如何返回用户信息。我不想通过每次用户发送请求时简单地调用 Cognito 来依赖它。所以,我的想法是创建另一个表来存储所有用户信息。然而,这并不是一种非常不相关的做事方式,因为 JOINS 非常糟糕。

所以,我想知道我是否应该执行以下任何操作
a) 改用 RDS
b) 不使用 Cognito 并设置我自己的身份验证系统
c) 只需使用包含所有用户信息的表进行 JOIN
d) 每次都向 Cognito 发出请求

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb relational-database amazon-cognito


    【解决方案1】:

    虽然我个人喜欢 cognito 的想法,但目前它有一些主要缺点......

    1. 您不能在不丢失密码的情况下备份/恢复用户池,而且您必须实施自己的备份/恢复。 一种解决方法是将用户密码保存在 cognito 自定义属性中。

    2. 我希望通过使用 api 网关/lambda 授权器在 lambda 上下文中拥有所有用户数据,但它不存在。或者我在使用 api 网关模板映射做错了什么?

    好东西 api gateway/lambda 授权器,最多可以缓存一个小时,不会再次调用授权器函数,这似乎是一个顶级功能。

    1. 不适用于 cloudformation,每次属性更新都会重新创建用户池而不恢复用户,从而失去用户。

    我只在一个实现中使用了它,最终也复制了 DynamoDB 中的用户。

    从那以后我一直在避免它。我希望他们解决这些问题,因为它看起来像是每个项目都包含的一项服务,可以节省大量时间。

    阅读您的帖子,我问了自己同样的问题,但也不确定答案?

    定价似乎很公平。

    获取用户信息的默认 5 次请求/秒似乎很奇怪,因为它会被一个页面加载执行多个 ajax api 请求所消耗。

    【讨论】:

    • 感谢您的回复!我是一名试图学习如何构建可扩展系统的学生。我知道我不太可能构建需求量很大的东西,但我仍然想以“正确的方式”学习。你会建议尝试创建我自己的 JWT 身份验证系统吗?我现在正在做的是使用 Cognito 并计划替换它。但是,界面应该保持不变。此外,我后来转向 RDS,因为我觉得如果这会改变任何东西,我就会在非关系数据库上强加一个关系模型。
    【解决方案2】:

    为此,在 DynamoDB 中,不需要另一个表。如果访问模式要求您将信息存储在另一个对象中,那么就这样吧,但很可能它应该在同一个表中。听起来您需要在同一个表中使用两种不同的项目类型。

    对于 userid 的 task PK 和 task::your-task-id 的 SK。如果您知道任务 ID,这将允许您轻松获取用户的所有任务,甚至可以非常轻松地获取特定任务。您甚至可能有一个时间戳属性,然后有一个 GSI,即用户 ID 作为 PK,时间戳作为 SK。那么您可以在 SK 上使用 begin_with 运算符并“对 2019-04 月份的所有用户任务进行分页”。

    用户信息,userID为PK,SK为user_info,attribute为用户信息。

    对此的一个挑战是,如果您要走极端,并且单个用户每秒执行数千次操作。例如“非常受欢迎的名人的所有推文”。如果您有这样的用例,也有解决方法,例如write sharding。这些只是供您使用的示例。在不了解您的所有访问模式的情况下,我无法为您可能想要做的所有事情建模。我强烈推荐你去看this presentation from reInvent 2018

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 2020-11-18
      • 2021-04-25
      • 2018-05-31
      • 1970-01-01
      • 2016-02-26
      • 2019-07-31
      • 2016-05-10
      • 2017-10-29
      相关资源
      最近更新 更多