在 AWS DynamoDB 中查询参与者的群聊表

问题描述 投票:0回答:1

我有一个聊天应用程序,它像典型的聊天应用程序一样,获取用户参与的对话(单聊和群聊)。结构是这样的:每个对话都有一个participantIDs(这是参与该特定群聊的一串userIds - 使用字符串,因为数组不能用作PK或SK)。我查询participantsIDs字段包含当前登录用户的所有对话,并获取适当的对话。

问题是我无法在查询中使用 contains,因为我收到错误

KeyConditionExpression 中使用的运算符无效:包含

我不能使用扫描,因为这显然是不鼓励的并且很慢。

是否有其他解决方案来解决这个看似常见的问题,或者我的 noSQL 数据库设计不好,通常有更好的方法在 noSQL 数据库中设计此查询?

我已经尝试过:

  • 使用扫描 - 再次对性能不利,因此被划伤了
  • 使用
    contains
    查询 - 这会导致错误

    KeyConditionExpression 中使用的运算符无效:包含

我已经没有想法了,但我有一种感觉,这可能是一个糟糕的 noSQL 数据库设计问题?

amazon-web-services database-design amazon-dynamodb nosql
1个回答
0
投票

您不能在项目的分区或排序键上使用 contains,但可以在非键属性上使用 contains。

在不了解数据模型和访问模式的情况下很难推荐解决方案。但我会为群组/对话中的每个用户提供一个项目。

然后您可以使用 GSI 在单个查询请求中轻松获取用户所属的所有组/对话。

© www.soinside.com 2019 - 2024. All rights reserved.