我试图创建我的第一个基于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中声明的一部分。