我有一个用例,其中数据是多对多的,需要广泛的查询功能。
参与者和活动
用户/参与者可以注册多个事件。每个事件可以有很多参与者。这是一个多对多的关系。
考虑这样的数据集。
- 每个活动可以有 1000 万用户注册。
- 每个用户最多可以注册 1000 个事件
- 有 1000 个事件正在运行
需要以下查询:
- 查询 1. 获取所有注册活动的 Participants
- 查询 2. 获取参与者注册的所有事件
- 查询 3. 获取参与者即将发生的所有事件
用于处理查询 1和查询 2
EventParticipantTable:(eventId,participantId):1000 x 10M 记录
这需要搜索 1000 x 10M 记录?
数据集可以根据 eventId 拆分为块,以使其理想地仅扫描 10M 记录,但不确定如何在 PostgreSQL 中处理。
用于处理查询 3
事件表 + EventParticipantTable 加入
这需要两个表的连接,我首先获取即将发生的事件的事件表(基于开始和结束时间戳),并且对于每个匹配的 eventId,需要查找 EventParticipantTable 中是否存在查询的参与者 ID。
这需要搜索 1000 个事件 * (1000 * 10M) 事件参与者表条目?
在这种情况下,每个表 1000 x 10M 记录不是问题吗?