如何处理嵌套数据建模 DynamoDB?
How to handle nested data modeling DynamoDB?
我搜索了这个问题,但找不到我要找的具体内容。
假设你有一个团队模型:
{
"partitionKey": "#team",
"rangeKey": "teamLocation_teamId_...",
"members": [
{
"firstName": "Michael",
"lastName": "Scott"
},
{
...
}
]
}
很简单,我可以找到团队及其成员。所以团队中的每个成员也将是一个用户。他们将以用户身份在 table 上拥有自己的条目:
{
"partitionKey": "emailAddress",
"rangeKey": "...",
"firstName": "Michael",
"lastName": "Scott"
}
假设用户更改了姓氏。您是否必须找到他们所在的团队,通过查找用户并更新姓氏来手动更改团队? SQL 方式将引用团队内部的用户 table,因此无论何时获得团队,您都会获得最新版本的成员。
我想我的问题是:当您将关系字段附加到文档类型存储时,您如何最好地处理附加值的更新?
首先你应该问问你是否真的需要其他对象的数据。在 NoSQL 数据库中这样做并不少见,所以我假设您会这样做。考虑到这个假设,您需要弄清楚如何最好地构建数据,以尽可能高效地进行更新。我在同一 table 的其他行中更新数据的典型方法是使用 DynamoDB 流和 lambda。这仍然需要您有办法找到要更新的行,而这正是您的存储结构可能不是最佳选择的地方。这是我为您的案例推荐的内容。我将做一些假设来简化,希望你能从那里得到它。
- 排在 table 的队伍中。这包括您需要存储的关于团队 除了 成员的任何信息。团队标识符是分区键,其他一些固定文本作为排序键(例如 'TeamInfo')。
- 每个团队成员在 table 中占一行。此行应包括分区键的团队标识符和排序键中人员的标识符。
- table 中的一行代表此人。此记录应包括此人的标识符以及此人所在的团队。
当你想查询一个团队时,你会询问分区键是团队的所有记录,并且 assemble 这些记录到 return 团队及其团队成员。
当一个人 created/updated/deleted 处理来自 table 的流的 lambda 应该 create/update/delete 团队中那个人的相关记录。您可以使用团队标识符和个人标识符找到该记录(用于更新和删除)。
我搜索了这个问题,但找不到我要找的具体内容。
假设你有一个团队模型:
{
"partitionKey": "#team",
"rangeKey": "teamLocation_teamId_...",
"members": [
{
"firstName": "Michael",
"lastName": "Scott"
},
{
...
}
]
}
很简单,我可以找到团队及其成员。所以团队中的每个成员也将是一个用户。他们将以用户身份在 table 上拥有自己的条目:
{
"partitionKey": "emailAddress",
"rangeKey": "...",
"firstName": "Michael",
"lastName": "Scott"
}
假设用户更改了姓氏。您是否必须找到他们所在的团队,通过查找用户并更新姓氏来手动更改团队? SQL 方式将引用团队内部的用户 table,因此无论何时获得团队,您都会获得最新版本的成员。
我想我的问题是:当您将关系字段附加到文档类型存储时,您如何最好地处理附加值的更新?
首先你应该问问你是否真的需要其他对象的数据。在 NoSQL 数据库中这样做并不少见,所以我假设您会这样做。考虑到这个假设,您需要弄清楚如何最好地构建数据,以尽可能高效地进行更新。我在同一 table 的其他行中更新数据的典型方法是使用 DynamoDB 流和 lambda。这仍然需要您有办法找到要更新的行,而这正是您的存储结构可能不是最佳选择的地方。这是我为您的案例推荐的内容。我将做一些假设来简化,希望你能从那里得到它。
- 排在 table 的队伍中。这包括您需要存储的关于团队 除了 成员的任何信息。团队标识符是分区键,其他一些固定文本作为排序键(例如 'TeamInfo')。
- 每个团队成员在 table 中占一行。此行应包括分区键的团队标识符和排序键中人员的标识符。
- table 中的一行代表此人。此记录应包括此人的标识符以及此人所在的团队。
当你想查询一个团队时,你会询问分区键是团队的所有记录,并且 assemble 这些记录到 return 团队及其团队成员。
当一个人 created/updated/deleted 处理来自 table 的流的 lambda 应该 create/update/delete 团队中那个人的相关记录。您可以使用团队标识符和个人标识符找到该记录(用于更新和删除)。