DynamoDB 中的一对多关系
One to Many relationship in DynamoDB
我有以下数据要保存在 DynamoDB 中,但我不太确定如何以最聪明的方式进行保存。
我的客户通过 websocket 连接到我的应用程序,然后“订阅”一个代码。但是一个代码可以有多个客户订阅它。
问题是:我需要能够双向查询。我的应用程序必须查询 1. 特定客户端订阅了哪个自动收报机(例如用于重新连接目的或处理断开连接脚本)和 2. 哪些客户端连接到自动收报机(向这些客户端发送信息)
我需要为此使用两个表还是可以在一个表中使用?
感谢您的每一个回答。现在我正在使用两个表,一个包含列 connectionId (PK)、ticker
和一个带有自动收报机(PK)和客户
您可以按照 Single-Table Design
并按以下方式设计您的 table:
[
{
"PK": "SUBSCRIBER#USER_123",
"SK": "TICKER#TICKER_987",
[...]
},
{
"PK": "SUBSCRIBER#USER_123",
"SK": "TICKER#TICKER_654",
[...]
},
{
"PK": "TICKER#TICKER_999",
"SK": "CONNECTED#USER_123",
[...]
},
{
"PK": "TICKER#TICKER_999",
"SK": "CONNECTED#USER_456",
[...]
}
]
查询部分可能看起来像这样
- to which ticker a specific client is subscribed
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `SUBSCRIBER#${userId}`
}
}
- which clients are connected to a ticker
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `TICKER#${tickerId}`
}
}
我有以下数据要保存在 DynamoDB 中,但我不太确定如何以最聪明的方式进行保存。
我的客户通过 websocket 连接到我的应用程序,然后“订阅”一个代码。但是一个代码可以有多个客户订阅它。
问题是:我需要能够双向查询。我的应用程序必须查询 1. 特定客户端订阅了哪个自动收报机(例如用于重新连接目的或处理断开连接脚本)和 2. 哪些客户端连接到自动收报机(向这些客户端发送信息)
我需要为此使用两个表还是可以在一个表中使用?
感谢您的每一个回答。现在我正在使用两个表,一个包含列 connectionId (PK)、ticker 和一个带有自动收报机(PK)和客户
您可以按照 Single-Table Design
并按以下方式设计您的 table:
[
{
"PK": "SUBSCRIBER#USER_123",
"SK": "TICKER#TICKER_987",
[...]
},
{
"PK": "SUBSCRIBER#USER_123",
"SK": "TICKER#TICKER_654",
[...]
},
{
"PK": "TICKER#TICKER_999",
"SK": "CONNECTED#USER_123",
[...]
},
{
"PK": "TICKER#TICKER_999",
"SK": "CONNECTED#USER_456",
[...]
}
]
查询部分可能看起来像这样
- to which ticker a specific client is subscribed
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `SUBSCRIBER#${userId}`
}
}
- which clients are connected to a ticker
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `TICKER#${tickerId}`
}
}