我想将以下数据保存在 DynamoDB 中,但我不太确定如何以最智能的方式进行保存。
我的客户通过 websocket 连接到我的应用程序,然后“订阅”一个代码。但是一个代码可以有多个客户订阅它。
问题是:我需要能够双向查询。我的应用程序必须查询 1. 特定客户端订阅了哪个股票代码(例如用于重新连接目的或处理断开连接脚本)和 2. 哪些客户端连接到股票代码(向这些客户端发送信息)
为此我需要使用两张桌子还是可以用一张桌子?
感谢每一个回答。现在我正在使用两个表,一个带有列 connectionId (PK),ticker 和一个带有代码(PK)和客户的
答案 0 :(得分:3)
您可以按照 Single-Table Design
并按照以下方式设计您的表格:
[
{
"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",
[...]
}
]
查询部分可能看起来像那样
<块引用>{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `SUBSCRIBER#${userId}`
}
}
<块引用>
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `TICKER#${tickerId}`
}
}