amazon-dynamodb - 在 Dynamodb 中查询和过滤多对多
问题描述
我是 DynamoDb(以及一般的 No-SQL)的新手,但在设计我的数据模型时仍然遇到一些麻烦。
我有以下用例。想象一个处理事件的应用程序。用户可以参加活动。多个用户可以参加活动。我需要能够知道谁将参加哪个活动以及用户将参加哪些活动。
所以,到目前为止,我已经提出了以下解决方案:
- 我有一个
Users
具有唯一 ID 的表 Events
具有唯一 ID的表- 一张
EventAttendeeds
桌子EventId
和UserId
领域- EventId(HASH) + UserId(RANGE) 上的主键 => 让我知道谁将参加给定的活动
- UserId (HASH) + EventId (RANGE) 上的全局二级索引 => 允许告诉我用户将参加哪些活动。
到目前为止,一切都很好。当我需要告诉用户在给定月份将去哪些事件时,会出现此问题,按日期排序。例如:用户 123 本月将参加哪些活动(例如在日历中显示)。
我想到的唯一选择是对数据进行非规范化并将eventDate
我的事件表中的字段副本添加到 EventAttendees 表中,然后在UserId
(HASH) + eventDate
(RANGE) 上添加全局二级索引。
我不太喜欢这个解决方案,因为保持数据同步的辛苦工作(例如:如果事件日期发生变化,我需要更新表中与该事件相关的所有EventAttendeeds
记录)。
还有另一种方法可以做我想要实现的目标吗?
请记住,用户可能会参加许多活动。在内存中进行过滤也不是一个好的选择。
谢谢!
编辑:
我想到的另一个选择。通常,参加活动的用户不会超过少数。所以我想摆脱在 NoSql 数据库中更有意义的“连接表”,我猜。问题在于当我需要查找给定用户的事件时查询数据库。这将强制使用过滤器表达式;这可能会减慢查询速度。我还有什么其他选择?我也在考虑使用 Elastic Search 按文本等进行搜索,因此,我也在考虑将其用于此目的(查找给定用户在给定月份的事件)......我会带上 id,然后使用正常的 DynamoDb 查询。虽然这听起来有点矫枉过正......
解决方案
推荐阅读
- r - 将整数与 R 中的字符进行比较
- bixby - 清除 Bixby 上的会话或会话变量
- flutter - 如何摆脱 suffixIcon 左侧的填充?由于填充光标未正确居中
- asp.net - 如何在 Braintree 中实现保险库功能以向用户显示现有卡信息
- merge - H2 给出从 H2 官方站点复制的 SQL 合并或更新查询的语法错误
- android - 单击应用程序图标时重新启动应用程序
- c++ - 使用 tinyXML2 读取 XML 时如何返回指向结构数组的指针
- mysql - 如何仅按顺序加入第一个记录顺序
- c# - 无法在运行时从网格创建组合网格
- authentication - 默认 WooCommerce 登录表单不允许用户在字段中输入