3

エンティティ モデル:

ここに画像の説明を入力

DynamoDB でのモデリング リレーショナル データの作成に関する AWS ガイドを読みました。私のアクセスパターンではとても混乱しています。

アクセスパターン

+-------------------------------------------+------------+------------+
| Access Pattern                            | Params     | Conditions |
+-------------------------------------------+------------+------------+
| Get TEST SUITE detail and check that      |TestSuiteID |            |
| USER_ID belongs to project has test suite |   &UserId  |            |
+-------------------------------------------+------------+------------+
| Get TEST CASE detail and check that       | TestCaseID |            |
| USER_ID belongs to project has test case  |   &UserId  |            |
+-------------------------------------------+------------+------------+
| Remove PROJECT ID, all TEST SUITE         | ProjectID  |            |
| AND TEST CASE also removed                |   &UserId  |            |
+-------------------------------------------+------------+------------+

そこで、リレーショナル エンティティ データをガイドとしてモデル化します。

+-------------------------+---------------------------------+
|       Primary Key       |            Attributes           |
+-------------------------+                                 +
|     PK     |     SK     |                                 |
+------------+------------+---------------------------------+
|   user_1   |    USER    |    FullName    |                |
+            +            +----------------+----------------+
|            |            | John Doe       |                |
+            +------------+----------------+----------------+
|            |   prj_01   |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-04-22     |                |
+            +------------+----------------+----------------+
|            |   prj_02   |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-05-26     |                |
+------------+------------+----------------+----------------+
|   user_2   |    USER    |    FullName    |                |
+            +            +----------------+----------------+
|            |            | Harry Potter   |                |
+            +------------+----------------+----------------+
|            | prj_01     |   JoinedDate   |                |
+            +            +----------------+----------------+
|            |            | 2019-04-25     |                |
+------------+------------+----------------+----------------+
| prj_01     | PROJECT    |      Name      |   Description  |
+            +            +----------------+----------------+
|            |            | Facebook Test  | Do some stuffs |
+            +------------+----------------+----------------+
|            | t_suite_01 |                |                |
+            +            +----------------+----------------+
|            |            |                |                |
+------------+------------+----------------+----------------+
| prj_02     | PROJECT    |      Name      |   Description  |
+            +            +----------------+----------------+
|            |            | Instagram Test | ...            |
+------------+------------+----------------+----------------+
| t_suite_01 | TEST_SUITE |      Name      |                |
+            +            +----------------+----------------+
|            |            | Test Suite 1   |                |
+            +------------+----------------+----------------+
|            | t_case_1   |                |                |
+            +            +----------------+----------------+
|            |            |                |                |
+------------+------------+----------------+----------------+
| t_case_1   | TEST_CASE  |      Name      |                |
+            +            +----------------+----------------+
|            |            | Test Case 1    |                |
+------------+------------+----------------+----------------+

パラメータとして UserID と TestCaseId しかない場合、TestCase Detail を取得して、UserId に権限があることを確認するにはどうすればよいでしょうか。

複雑な階層データを 1 つのアイテムに格納することを考えました。何かこれが好き

+------------+-------------------------+
| t_suite_01 | user_1#prj_1            |
+------------+-------------------------+
| t_suite_02 | user_1#prj_2            |
+------------+-------------------------+
| t_case_01  | user_1#prj_1#t_suite_01 |
+------------+-------------------------+
| t_case_02  | user_2#prj_1#t_suite_01 |
+------------+-------------------------+

質問: この場合の最善の方法は何ですか? このアプローチについて何か提案をいただければ幸いです (弓)

4

2 に答える 2

1

最初に尋ねるべき質問は、データに明らかに強い関係があるのに、なぜリレーショナル DB ではなくキー値ドキュメント DB を使用する必要があるのか​​ということです。

答えは次のとおりです。あらゆる規模 (数百万レコード) で 1 桁のミリ秒単位のクエリが必要です。または、dynamodb オンデマンドを使用してコストを削減したい。そうでない場合は、リレーショナル DB の方が適している可能性があります。

dynamodb を使用する必要があるとしましょう。そうであれば、リレーショナル DB に適用可能なパターンのほとんどは、NoSQL に関してはアンチパターンです。dynamodb の設計パターンに関する最後の再発明からの有益な話と、それを見るためのアドバイスがあります https://youtu.be/HaEPXoXVf2k

あなたのデータについては、同様のアプローチを取り、ユーザーとプロジェクトの2つのテーブルを持つことを考えています。

プロジェクトは、テスト スーツのサブセットをオブジェクトの配列のマップとして格納し、テスト ケースをオブジェクトの配列のマップとして格納する必要があります。さらに、文字列のマップにユーザー ID のリストを追加できます。もちろん、ユーザーがプロジェクトに参加または脱退するときは、このリストを維持する必要があります。

これは、アクセス パターンを満たす必要があります。

于 2019-04-17T21:32:22.430 に答える