查询并过滤Dynamodb中的多对多

时间:2018-08-27 10:18:50

标签: amazon-dynamodb

我是DynamoDb(通常是No-SQL)的新手,但在设计数据模型时仍然遇到一些麻烦。

我有以下用例。想象一个处理事件的应用程序。 用户可以参加活动。活动可以由多个用户参加。 我需要能够告诉谁将去哪个事件以及用户将去哪个事件。

到目前为止,我已经提出了以下解决方案:

  • 我有一个具有唯一ID的Users
  • 具有唯一ID的Events
  • 一个EventAttendeeds表,其中包含
    • EventIdUserId字段
    • EventId(HASH)+ UserId(RANGE)上的主键=>让我知道谁将去给定事件
    • UserId(HASH)+ EventId(RANGE)上的全局二级索引=>可以告诉我用户将要去什么事件。

到目前为止,一切都很好。当我需要告诉用户在给定月份将要进行哪些活动时(按日期排序),就会出现问题。 例如:用户123将在本月去哪些活动(例如在日历中显示)。

我想到的唯一选择是对数据进行非规范化并将eventDate字段的副本从“事件”表添加到EventAttendees表,然后在UserId上添加全局二级索引(哈希)+ eventDate(范围)。

我不喜欢这种解决方案,因为要保持数据同步很辛苦(例如:如果事件日期更改,我需要更新全部)中与该事件相关的记录EventAttendeeds表)。

还有另一种方法可以实现我想要实现的目标吗?

请记住,用户可能会参加许多事件。在内存中进行过滤也不是一个好选择。

谢谢!

编辑:

我想到了另一个选择。 通常,只有少数几个用户会参加一个活动。 因此我想摆脱NoSql数据库中的“联接表”会更有意义。 问题是在查询数据库时,我需要查找给定用户的事件。这将强制使用过滤器表达式;这可能会减慢查询速度。我还有什么其他选择? 我也在考虑使用Elastic Search来按文本进行搜索等,因此,我也在考虑将其用于此目的(寻找给定用户在给定月份的事件)...我会带上ID,然后使用常规DynamoDb查询。不过,这听起来有点像是过分杀人……

0 个答案:

没有答案