代码之家  ›  专栏  ›  技术社区  ›  Daniel Birowsky Popeski

在数字范围内查询dynamodb表中的项目

  •  0
  • Daniel Birowsky Popeski  · 技术社区  · 6 年前

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

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

    但是我已经了解到布尔散列键是非常反模式的,因为它们将在单个分区中挤压文档。

    是否有其他模型允许我们查询一个数值范围内的表中的所有项?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matthew Pope    6 年前

    i_m假设您要查询给定用户的未读消息,因为(再次)i_m假设如果另一个用户读取相同内容的通知,给定通知的读取/未读状态不应为一个用户更改。

    按照这个假设,你应该使用 sparse index userId (或等效)作为哈希键和 unreadNotificationTime 作为排序键。在表中插入新通知时,请设置 未读通知时间 通知的时间戳。当用户已阅读通知时,删除 未读通知时间 项的属性。

    为什么会这样?

    dynamodb只要求项具有基表的关键属性,任何其他属性都是可选的。在dynamodb中,索引的工作方式是,基表中的一个项只会出现在该项的索引中,它具有该特定索引的所有关键属性。

    通过设置 未读通知时间 存储通知时,所有新创建的通知都将自动填充到未读消息索引中。通过删除 未读通知时间 当一条消息被读取时,您将收到该索引的通知。使用此模式,不需要任何过滤或扫描操作。您的索引将只包含未读、按用户ID分组和按日期排序的通知。

    推荐文章