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",
        [...]
    }
]

查询部分可能看起来像这样

  1. to which ticker a specific client is subscribed
{
    TableName: 'TABLE',
    KeyConditionExpression: 'PK = :PK',
    ExpressionAttributeValues: {
        ':PK': `SUBSCRIBER#${userId}`
    }
}
  1. which clients are connected to a ticker
{
    TableName: 'TABLE',
    KeyConditionExpression: 'PK = :PK',
    ExpressionAttributeValues: {
        ':PK': `TICKER#${tickerId}`
    }
}