如何在dynamoDB中连接表?

RJN*_*WLY 2 java amazon-web-services nosql amazon-dynamodb

我知道DynamoDB不支持连接表,但这是我的用例:

(使用类似示例隐藏确切的详细信息,而不是发布作业问题)

我有四张桌子

Person ( unique_id(hash key), Name(range key), Age, Gender)<br>
UIDtoSIDTable ( uid(hash key) , sid)<br>
SIDtoStudentID(sid(hash key), studentID, other attributes)<br>
StudentDetails(studentID(hash key), schoolName, Grades)
Run Code Online (Sandbox Code Playgroud)

我正在使用dynamodbmapper.

我的应用程序需要在表格中显示以下数据:

unique_id, Name, Age (from Person table)
sid 
SchoolName, Grades (from studentDetails table)
Run Code Online (Sandbox Code Playgroud)

现在我的实施是:

  1. 扫描uidtosidTable为列表中的所有uid-sid对说list1
  2. 对于list1中的每个sid,从SIDtoStudentID表中查询studentID
  3. 对于来自Person表的每个uid查询,以及每个studentID从StudentDetails表中获取数据

这个实现的问题是需要很长时间才能完成,超过5分钟就能完成1000个项目.

如果它是一个关系数据库,我会加入这四个表,并获得所需的数据.

如何实现这一点是有效的动力学?

Mik*_*scu 5

DynamoDB不支持在服务端连接表.您可能希望做的任何加入都必须在客户端完成.

如果可能,您应该重新访问表格设计,将所有需要的信息包含在一个表格中的单个记录中,而不是您拥有的4个表格中.

您的Dynamo数据库表看起来像这样:

unique_id, Name, Age, Gender, studentID, schoolName, Grades, other attributes
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,那么您唯一的选择是尝试使用索引和查询的全表扫描组合在内存中执行连接.例如,您可以创建全局二级索引(GSI)以便能够对SID执行反向映射到UID.然后,您可以使用查询而不是扫描来执行加入 - 尽管加入仍将在客户端执行.