node.js - 如何在dynamodb中实现一对多关系?

标签 node.js amazon-web-services aws-lambda amazon-dynamodb aws-mobilehub

我是 dynamodb 的新手,但曾与 MongoDB 合作过。我在阅读 dynamodb 一对多关系的 aws 文档时感到非常困惑。

所以我的场景是:

例如,我有表用户和地址:

Table: User
----
username
fname
lname
address: ref to addresses

Table: Addresses
----------
address line 1
address line 2
city
Zip
state
country

您能帮助我如何在 dynamodb 中实现这一目标吗?

  1. 如何存储关系数据?
  2. 在单个查询中检索数据(包括关系数据)?

最佳答案

DynamoDB 不是关系数据库。您无法执行您正在考虑的关系请求类型(特别是在问题#2 中描述的单个查询中)。它需要以不同的方式思考如何存储和访问数据,因此它可能不适合您的应用程序。

Dynamo 不提供外键或表连接。每个表都有一个分区键 (PK),或者分区键和排序键 (SK) 的组合。当表只有 PK 时,只能查询单个项目。当同时具有PK和SK时,可以通过PK/SK查询单个item,也可以查询共享相同PK的所有item。

正如您所描述的,实现 1 对 N 数据的一种方法如下所示:

Table: Users
------------
[PK] userId
username
fname
lname

Table: Addresses
----------------
[PK] userId
[SK] addressId
address line 1
address line 2
city
zip
state
country

在此布局中,您仍然需要两次调用 Dynamo 来获取用户的所有信息,包括地址。您将通过该 userId 对 Users 表进行一次 getItem 调用,并通过同一 userId 对 Addresses 进行查询调用。第一个调用将返回单个用户记录,第二个调用将返回按 addressId 排序的地址记录列表。

您必须手动管理您的数据。由于没有外键,因此也没有约束或级联。如果不小心,很容易得到孤立数据。同样,Dynamo 可能不是最适合您的应用程序的工具。

我在这里描述的只是表面现象。对于希望使用 DynamoDB 进行数据存储构建企业软件的任何人来说,充分了解其架构方法和最佳实践至关重要。来自 SQL 甚至 MongoDB 的背景,您的直觉可能会让您误入歧途,导致您构建的东西性能不佳且难以调试。对于正确的工作类型来说,它是一个极其强大的工具,但您必须首先进行尽职调查才能理解它。

--

编辑补充:我上面描述的方法甚至都不是一个好的方法! AWS 共享了文档并讨论了此类事情,包括他们的 Best Practices for DynamoDB这远远超出了本答案的范围。

关于node.js - 如何在dynamodb中实现一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255805/

相关文章:

javascript - NPM 安装错误

node.js - Node 11 REPL 支持导入吗?

node.js - websocket 无法在 ec2 上与 nginx 连接

amazon-web-services - 如何为aws log groups找到相应的资源?

python - 如何使用 aws CDK 和 Python 部署层并将其附加到 aws lambda 函数

node.js - 我无法让 AMQP 发布和订阅与 IBM MQ v9.0.1.0 中的 Node JS v6 和 mqlight v2.0 一起运行

amazon-web-services - AWS云信息模板

python - 在 Redshift 中创建 python UDF 时出错

amazon-web-services - 如何为 AWS Lambda 设置重试超时

mysql - Lambda (Python 3.6) PyMySql 查询 EXISTS 查询总是返回 1