首页 > 解决方案 > 在 Dynamodb 中查询和过滤多对多

问题描述

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

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

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

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

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

我不太喜欢这个解决方案,因为保持数据同步的辛苦工作(例如:如果事件日期发生变化,我需要更新表中与该事件相关的所有EventAttendeeds记录)。

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

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

谢谢!

编辑:

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

标签: amazon-dynamodb

解决方案


推荐阅读