DynamoDB中的一对多关系



我有以下数据要保存在DynamoDB中,但我不太确定如何以最智能的方式保存。

我的客户通过websocket连接到我的应用程序,然后";订阅";一个股票行情。但一个股票行情机可以有多个客户订阅

问题是:我需要能够双向查询。我的应用程序必须查询1。特定客户端订阅到哪个ticker(例如用于重新连接目的或处理断开连接脚本(和2。哪些客户端连接到自动收报机(向这些客户端发送信息(

我需要用两张桌子吗?还是可以放在一张桌子上?

我感谢每一个回答。现在我使用两个表,一个表的列为connectionId(PK(,ticker其中一个带有股票行情机(PK(和客户

您可以遵循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",
[...]
}
]

查询部分可能看起来像

  1. 特定客户订阅的股票代码
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `SUBSCRIBER#${userId}`
}
}
  1. 哪些客户端连接到股票行情机
{
TableName: 'TABLE',
KeyConditionExpression: 'PK = :PK',
ExpressionAttributeValues: {
':PK': `TICKER#${tickerId}`
}
}

最新更新