在单个API请求中使用多个dynamoDB查询是不好的做法



我试图创建我的第一个基于DynamoDB的项目,我有一些麻烦找出与NoSQL数据库工作的最佳实践。

我的用例当前是存储用户和团队。我有一个分区键为USER#{userId}TEAM{#teamId}的表。如果PK是TEAM{#teamId},我用SK存储记录,或者TEAM#{teamId}存储团队详细信息,或者USER#{userId}存储团队中用户的详细信息(acceptedInvite,joinDate等)。我还有一个基于userId/email列的GSI,它允许我根据acceptedInvite字段的值查询用户被邀请的所有团队或用户的团队。附件是目前表格结构的截图:

GSI

在我的应用程序中,我有一个获取团队的团队成员的访问模式,给定一个用户id。

目前,我在我的lambda函数做两个查询:

  • 通过查询PK = {userId} and fitler acceptedInvite = true
  • 上的GSI获取用户的团队
  • 通过查询PK = {teamId} and SK begins_with USER#上的表获取团队数据

这工作得很好,但我担心我需要在我的API函数中执行两个单独的DynamoDB调用。

我想知道是否有更好的方法来表示这种访问模式,如果多个dynamoDB调用实际上是那么糟糕,因为我看不到另一种方法来做到这一点。

任何形式的反馈是赞赏!

避免这样进行两次查询的最佳方法是向API调用者提供发出单个DynamoDB请求所需的所有信息。对于您的情况,这意味着向调用者提供teamId。您可以将其作为列表操作响应的一部分,或者如果是经过身份验证的用户,则将其作为JWT中声明的一部分。

最新更新