使用 AWS Amplify 的单表数据库架构

Arm*_*yan 9 amazon-web-services nosql amazon-dynamodb graphql aws-amplify

默认情况下,AWS Amplify 转换器会为每个 graphql 类型创建表。

但根据 DynamoDB 文档,最佳实践是

  • 尽可能减少桌子数量
  • 将经常查询的条目保留在同一个表中

我的印象是 Amplify 的做事方式与上面的陈述相矛盾。

我对 NoSQL 和 Amplify 都是新手,有人可以建议解决这些问题的方法吗?

Bat*_*cid 1

我认为我们正处于过渡或灰色地带。我对 Amplify 非常陌生,一直在研究转向单表设计,因为有来源(如下)表明它始终存在,但您必须在 VTL 模板中编写所有内容。但在 2020 年,他们发布了直接 lambda 解析器支持:https://youtu.be/EOQqi6Yun7g?t=960 (clip)

但是,您似乎无法访问该@auth指令(可能还无法访问其他指令,因为您不再使用@model)以及 Amplify 的多表方法提供的许多很好的开箱即用功能。

此时,我正在开发一个新应用程序,我将坚持使用默认的多表设计,以加快应用程序功能的过程。

尝试实现单表设计似乎违背了 Amplify 团队的建议,并且需要更多的手动工作。您必须手动创建自定义 lambda 函数 (AppSync) 并为每个数据访问元素对 DynamoDb 进行代码查询,并通过我目前不知道的其他方式管理授权。也许有人可以在这里插话......


单表与多表信息

对单个表使用 Amplify: https://youtu.be/EOQqi6Yun7g

单剪辑与多剪辑:

Alex Debrie 的单表设计示例: https://gist.github.com/dabit3/96dc51e688b18a7d40fc534331758c56

更多讨论: /sf/answers/3950710151/

基本设置步骤

我按照以下说明设置了一个表。再次强调,您不使用@models 来实现此目的。另外,我认为您必须type query {}在模式中包含 a 才能编译,但我在这里可能是错的。

所以基本步骤是:

  • 创建单表(放大添加存储)
  • 放大推力
  • 在文件中创建您的架构schema.graphql
  • 创建配套的lambda函数(放大add函数)
  • 在函数中添加 DynamoDb 查询代码。
  • 放大推力

设置单个表的完整步骤:
https://catalog.us-east-1.prod.workshops.aws/workshops/53b10bf8-2271-4ab4-bfd2-39e878a90dc8/en-US/lab2/1-vtl(两者“连接到现有 DynamoDB 表”和“直接 Lambda 解析器”步骤)


不想对 Amplify 持负面态度,它太棒了,我喜欢他们用这个产品所做的事情。我只是认为这对每个人来说都很新鲜,我希望明年这篇文章不再有效,我们将继续看到团队取得巨大进步。