【问题标题】:DynamoDB single query to retrieve both public and private chat messages用于检索公共和私人聊天消息的 DynamoDB 单一查询
【发布时间】:2020-07-22 03:20:05
【问题描述】:

在选择 DynamoDB 分区键和排序键以检索聊天中的所有公共和私人消息时需要一些建议。

在同一个聊天室中,用户可以向特定的人发送公开消息和私人消息。

DynamoDB 模型:

For public messages: hashkey - chatId; sortKey - timestamp
For private messages: hashkey - chatId; sortKey - userId#timestamp

我在选择将在单个查询中返回这两种类型的消息的主键时遇到困难。

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries amazon-dynamodb-index amazon-dynamodb-data-modeling


    【解决方案1】:

    在我的脑海中,我在想你的排序键中需要一些东西,这样你就可以使用 Begins_with 并获取所有消息。所以像 mssg::public::userID::timestamp 或 mssg::private::timestamp 之类的。

    然后您可以使用 chatId 作为分区键进行查询,然后在排序键上使用 begin_with mssg。这将获得该聊天 ID 的所有消息,无论它们是公共的还是私有的。下一个问题是你在用时间戳做什么,你需要在同一个查询中做些什么吗?您在帖子中没有提到它,但它在模型示例中。

    【讨论】:

    • 如果我将 BEGINS_WITH 与 mssg 一起使用,我会收到所有消息(包括其他用户的私人消息)对吗?而且恐怕我无法使用 userId 存储公共消息。由于公共消息的接收者数量可能很大,因此我不会为公共消息的每个 userId 创建单独的记录。是的,还需要时间戳,因为我需要按时间戳排序的结果
    • 它可能没有 userId。对于公共消息,sortKey 可能只有 mssg::public::timestamp
    • 所以用户可以匿名进入聊天室?我觉得我在这里遗漏了一些重要信息,无法提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2016-09-11
    • 2018-12-30
    相关资源
    最近更新 更多