デザイン全体が自然な集合体(ドキュメント)に基づいている必要があることはわかっていますが、ローカリゼーション(言語、キー、テキスト)に別のテーブルを実装し、他のテーブルでキーを使用することを考えています。ただし、これを行う例は見つかりませんでした。
どんなポインターでも役立つかもしれません!
確かに、DynamoDBはリレーショナルデータベースとして設計されておらず、結合操作をサポートしていません。 DynamoDBは単なるキーと値のペアのセットであると考えることができます。
複数のテーブル(たとえばdocument_ID)で同じキーを使用できますが、DynamoDBはそれらを自動的に同期したり、外部キー機能を使用したりしません。 1つのテーブルのdocument_IDは同じ名前ですが、技術的には異なるテーブルのdocument_IDとは異なります。これらのキーが同期されることを確認するのは、アプリケーションソフトウェア次第です。
DynamoDBはデータベースに関する別の考え方であり、Amazon Auroraなどの管理されたリレーショナルデータベースの使用を検討することをお勧めします。 https://aws.Amazon.com/rds/aurora/
注意すべき点として、Amazon EMRではDynamoDBテーブルを結合できますが、それがあなたが探しているものかどうかはわかりません: http://docs.aws.Amazon.com/ElasticMapReduce/latest/DeveloperGuide /EMRforDynamoDB.html
DynamoDBでは、参加するのではなく、後で読む予定の形でデータを保存することが最善の解決策だと思います。
複雑な読み取りクエリが必要な場合は、DynamoDBがRDBMSのように動作することを期待するというtrapに陥ったかもしれませんが、そうではありません。書き込んだデータを変換および整形し、読み取りをシンプルにします。
ディスクは最近の計算よりもはるかに安価です。非正規化を恐れないでください。
最初のテーブルをクエリし、次のテーブルでgetリクエストを使用して各アイテムを反復処理する必要があります。
他の答えは、1)質問に答えないこと、さらに重要なこと、2)将来のアプリケーションを知る前に、どのようにテーブルを設計できますか?技術的な負債は、無制限の将来の可能性を合理的にカバーするには高すぎます。
私の答えは恐ろしく非効率的ですが、これは提起された質問に対する唯一の現在の解決策です。
より良い答えを心待ちにしています。
この分野で何度も出てきたソリューションの1つは、DynamoDBから、探している種類の操作により適した別のデータベースに同期することです。
私は ブログ を書いて、このトピックについて人々がこの問題に取り組むさまざまなアプローチを比較しましたが、ここで重要なポイントをいくつか要約するので、すべてを読む必要はありません。 。
(完全開示:Rockset @ Rocksetで作業しています)個々のアプローチの詳細については、 blog をご覧ください。
私の応答は、数年遅れてわずかに遅れることを知っています。ただし、Amazon DynamoDB&Joinsに関するいくつかの追加情報を掘り下げることができました。これは、あなた(または、将来、この情報を調査中にこの議論につまずくかもしれない別の個人)に役立つかもしれません。
要点を説明するために、Apache HiveQLクエリ言語を使用してAmazon DynamoDBのテーブル、列、データなどで結合を実行できることを記載したドキュメントをAmazon DynamoDBウェブサイトで見つけることができました。
DynamoDBのデータのクエリ(w/HiveQL): https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html
Amazon DynamoDBとApache Hiveを使用した作業: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html
Amazon EMRでApache Hiveを使用してAmazon DynamoDBデータを処理する: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html
この情報が元のポスターではないにしても、誰かの助けになることを願っています。
最近、dynamoDbでavgやsumなどの結合および集計関数を使用するという同じ要件がありますが、これを解決するためにCdata JDBCドライバーを使用し、完全に機能しました。結合関数および集約関数をサポートします。ただし、Cdataのライセンスコストのために、cdataの使用を避けるためのソリューションも探しています。