Den*_*ker 4 amazon-web-services amazon-dynamodb graphql aws-appsync aws-amplify
对于我的项目,我需要能够离线查询和更改数据,并在连接恢复时同步更改。因此,具有 Amplify Appsync 和数据存储的 DynamoDB 似乎是最佳选择,但我们正在努力解决一些相互矛盾的建议。
我们的数据是围绕项目构建的,这些项目具有应该实时更改和同步的位置。由于一个位置可以包含多个项目,而一个项目可以有多个位置,因此我们处理多对多关系。我们应该能够查询所有项目、所有位置、单个项目的所有位置、一个位置的所有项目。这是数据结构的基本要求,但我们应该能够添加对上次修改项目等内容的查询。接下来,我们有一个多租户设置,因此应该有一种方法来授权用户访问部分内容数据。我们可能会使用用户组来过滤数据。
大多数在线资源都指出,为了充分利用 DynamoDB,单一表设计方法是最佳选择。这意味着我们可以使用本文档中所示的结构,添加排序键来进行其他查询。
数据存储文档表示,应该使用 @model 指令来设置所有突变、查询和订阅。为了建立 Items 和 Locations 之间的关系,我们应该使用 @manyToMany 指令,如此处所述。总而言之,这将产生以下模式:
type Item
@model
@auth(rules: [{ allow: groups, groupsField: "groups" }])
{
ID: ID!
groups: String!
locations: [Location] @manyToMany(relationName: "ItemLocation")
...
}
type Location
@model
@auth(rules: [{ allow: groups, groupsField: "groups" }])
{
ID: ID!
groups: String!
items: [Item] @manyToMany(relationName: "ItemLocation")
...
}
Run Code Online (Sandbox Code Playgroud)
当我们使用 Amplify CLI 部署此架构时,所有资源都会毫无问题地生成。但是,如果我们查看 DynamoDB 表,我们会发现生成了多个表:Item、Location 和 ItemLocation。@model 指令会自动部署表,@manyToMany 指令也是如此。Dynamodb 文档不使用这些指令,因此应该可以根据给定的要求创建单个表。我无法找到如何从数据存储/放大端执行此操作,或如何将数据存储连接到现有的 DynamoDB,因为数据存储依赖 @model 指令在本地存储数据(或者这就是我怀疑的)。这不符合 DynamoDB 标准,我们希望将此设置更改为单表设计。
我一直在查找 Amplify、Datastore 和 DynamoDB 文档以及在线资源,但无法找到任何指导或解决方案。希望有人能把我推向正确的方向,谢谢!
TL;DR Amplify 的后端工具为您创建 DynamoDB 和 Appsync 样板。这种高级便利是以低级控制为代价的,包括控制应用程序拥有的表数量。
你是对的,术语可能会令人困惑。以下是一些向您澄清的信息:
对于我的项目,我需要能够离线查询和更改数据,并在连接恢复时同步更改。因此,具有 Amplify Appsync 和数据存储的 DynamoDB 似乎是最佳选择
数据存储不是限制。Amplify js 客户端(包括客户端 DataStore 离线同步魔法)可直接与 AppSync 配合使用。您可以自行构建 DynamoDB 和 AppSync 资源(无需 Amplify 的后端抽象),并且仍然在客户端中使用 DataStore。
大多数在线资源都指出,为了充分利用 DynamoDB,单一表设计方法是最佳选择。
经常,但并不总是。单表设计可以为许多用例带来效率回报,并且是可靠的默认选择。然而,在某些情况下,该模式的帮助不大。
@model 指令会自动部署表,@manyToMany 指令也是如此。Dynamodb 文档不使用这些指令,因此应该可以根据给定的要求创建一个表
仅当您放弃 Amplify 后端而采用 DIY 解决方案时。和指令是 Amplify 后端语法@model,@manyToMany提示 Amplify CLI 应如何构建 AppSync 架构和 DynamoDB 表。单表设计使用复杂的复合键结构,这甚至超出了 Amplify 后端 CLI 的强大功能。
如何将数据存储连接到现有 DynamoDB,因为数据存储依赖于 @model 指令
它通过 AppSync 连接。DataStore 是一个与 AppSync 配合使用的客户端工具(例如 Apollo Client)。DataStore 在云中没有实例化。AppSync 解析程序调用 DynamoDB 来读取/写入数据。
这不符合 DynamoDB 标准,我们希望将此设置更改为单表设计。
总之,您的选择是在 Amplify 后端便利性 + 多个表或 DIY 灵活性 + 单表之间进行选择。DataStore 适用于任一选项。
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |