0

我需要一些指导来实现新聊天消息的邮件通知。邮件通知将通知用户前一小时内有新消息的所有聊天。

为了完成它,我需要在一个时间间隔内查询一个表中的所有聊天。首先想到的是添加新的全局索引,其中哈希将是聊天是否有未读消息的布尔值,范围将是该聊天中最新消息的时间戳。

但我了解到布尔哈希键是一种反模式,因为它们会将文档压缩在单个分区中。

是否有不同的模型可以让我们查询数字范围内的表中的所有项目?

4

1 回答 1

1

我假设您要查询给定用户的未读消息,因为(再次)我假设如果另一个用户阅读同一件事的通知,则给定通知的已读/未读状态不应该为一个用户改变.

按照这个假设,您应该使用稀疏索引userId(或等效)作为哈希键和unreadNotificationTime排序键。将新通知插入表中时,将值设置unreadNotificationTime为通知的时间戳。当用户阅读通知后,unreadNotificationTime从项目中删除该属性。

为什么这行得通?

DynamoDB 只要求 item 具有基表的 key 属性,其他任何属性都是可选的。DynamoDB 中索引的工作方式是基表中的项目将仅出现在具有该特定索引的所有关键属性的项目的索引中。

通过为存储通知设置一个值unreadNotificationTime,所有新创建的通知将自动填充到未读消息索引中。通过删除unreadNotificationTime阅读消息的时间,您会收到来自该索引的通知。使用此架构,无需任何过滤或扫描操作。您的索引将仅包含未读通知、按 userId 分组和按日期排序的通知。

于 2019-01-21T04:47:37.150 回答