我是DynamoDb(通常是No-SQL)的新手,但在设计数据模型时仍然遇到一些麻烦。
我有以下用例。想象一个处理事件的应用程序。 用户可以参加活动。活动可以由多个用户参加。 我需要能够告诉谁将去哪个事件以及用户将去哪个事件。
到目前为止,我已经提出了以下解决方案:
Users
表Events
表EventAttendeeds
表,其中包含
EventId
和UserId
字段到目前为止,一切都很好。当我需要告诉用户在给定月份将要进行哪些活动时(按日期排序),就会出现问题。 例如:用户123将在本月去哪些活动(例如在日历中显示)。
我想到的唯一选择是对数据进行非规范化并将eventDate
字段的副本从“事件”表添加到EventAttendees表,然后在UserId
上添加全局二级索引(哈希)+ eventDate
(范围)。
我不喜欢这种解决方案,因为要保持数据同步很辛苦(例如:如果事件日期更改,我需要更新全部)中与该事件相关的记录EventAttendeeds
表)。
还有另一种方法可以实现我想要实现的目标吗?
请记住,用户可能会参加许多事件。在内存中进行过滤也不是一个好选择。
谢谢!
编辑:
我想到了另一个选择。 通常,只有少数几个用户会参加一个活动。 因此我想摆脱NoSql数据库中的“联接表”会更有意义。 问题是在查询数据库时,我需要查找给定用户的事件。这将强制使用过滤器表达式;这可能会减慢查询速度。我还有什么其他选择? 我也在考虑使用Elastic Search来按文本进行搜索等,因此,我也在考虑将其用于此目的(寻找给定用户在给定月份的事件)...我会带上ID,然后使用常规DynamoDb查询。不过,这听起来有点像是过分杀人……