2016-08-22 2 views
1

私はここDynamoDBのテーブルを結合をサポートしていません知っているが、私のユースケースである:dynamoDBのテーブルを結合するには?

私は4つのテーブル

を持って

(宿題の問題を投稿していない、正確な詳細を非表示にする同様の例を使用して)

(ハッシュキー)、studentID、その他の属性) StudentID(ハッシュキー)、ハッシュキー)、学年、学年)

私はdynamodbmapperを使用しています。

私のアプリケーションは、次の表のデータを表示する必要があります。 UNIQUE_ID、名前、年齢を SID SchoolName、(studentDetailsテーブルから)グレード(Personテーブルから)

今、私の実装です。リスト内のすべてのUID-SIDペアの

  1. スキャンuidtosidTableは、Personテーブルから各uidのクエリのSIDtoStudentIDテーブル
  2. からstudentIDためのリスト1の各SID、クエリの
  3. List1を言うと、それぞれのstudentID GET StudentDetailsのデータ

この実装の問題は、完了するまでに非常に時間がかかっていることです。

リレーショナルデータベースの場合は、4つのテーブルを結合して必要なデータを取得しました。 これをどのように達成するには、dynamodbを効率的に行うのですか?

+0

このリンクを参照してください:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html – chirag

+0

Amazon EMRを使用できます – chirag

答えて

0

これは、単一のテーブルで実現できます。テーブルの各行には、その人の一意のID、名前、年齢、性別、学生ID、学校名、および成績のコレクションを含めることができます。

+0

私の質問はどのようにこのようなテーブルを作成するのですか? –

3

DynamoDBは、サービス側のテーブルの結合をサポートしていません。あなたが望むかもしれないすべての参加は、クライアント上で行われなければなりません。

可能であれば、必要なすべての情報を4つのテーブルではなく1つのテーブルの1つのレコードに含めるようにテーブル設計を再訪する必要があります。

次のようになりますあなたのダイナモDB表:それができ、あなたの唯一のオプションは、インデックスとクエリで全表スキャンの組み合わせでメモリに結合を実行しようとしているではない場合

unique_id, Name, Age, Gender, studentID, schoolName, Grades, other attributes 

を。たとえば、SIDのUIDへの逆マッピングを実行できるようにグローバルセカンダリインデックス(GSI)を作成することができます。また、スキャンの代わりにクエリを使用して結合を実行することもできますが、結合は依然としてクライアント側で実行されます。

関連する問題