DynamoDB 中的一对多关系

时间:2021-07-12 10:04:06

标签: database amazon-web-services nosql amazon-dynamodb

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

我的客户通过 websocket 连接到我的应用程序,然后“订阅”一个代码。但是一个代码可以有多个客户订阅它。

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

为此我需要使用两张桌子还是可以用一张桌子?

感谢每一个回答。现在我正在使用两个表,一个带有列 connectionId (PK),ticker 和一个带有代码(PK)和客户的

1 个答案:

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

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

<块引用>
  1. 特定客户订阅的股票代码
{
    TableName: 'TABLE',
    KeyConditionExpression: 'PK = :PK',
    ExpressionAttributeValues: {
        ':PK': `SUBSCRIBER#${userId}`
    }
}
<块引用>
  1. 哪些客户端连接到股票代码
{
    TableName: 'TABLE',
    KeyConditionExpression: 'PK = :PK',
    ExpressionAttributeValues: {
        ':PK': `TICKER#${tickerId}`
    }
}
相关问题