dynamodbにツリーのような構造を保存する

user1692342

私は木のような構造を持っています

                (T)
          M1   M2  M3  M4
     M1L1 M1L2 M2L1 M3L1  M4L

ここで、Tは最上位レベル、M1、M2、M3、M4はTの子であり、M1L1、M1L2はM1の子などです。ツリーの最大高さは3になります。存在できるノードの最大数は50kです。データベースに保存したいのですが。現在、すべてのインフラストラクチャがDynamoDBにあるため、DynamoDBに保存したいと考えています。可能であれば、DynamoDB自体に保存したいと考えています。

次のタイプのクエリを実行する必要があります。

1-m1L1が与えられた場合、すべての同じレベルの子(m1l1、m1l2)を返します

2-m1L1 idが与えられた場合、TopLevel(T)とM1を返します。

3-Tが与えられると、すべてのMが返されます

4-Tが与えられると、関係とともにすべてのMとlowerLevelが返されます

5-M1が与えられた場合、すべて同じレベル(m1、m2、m3)を返します

6-M1リターンが与えられたすべての子7-M1リターンが与えられたトップレベル

私は次のデータベーススキーマについて考えていました。

Primary Key (id of the node)  Children             Parent         Sibling 
T                              M1, M2,M3,M4         null          null
M1                              M1L1,M1L2            T           M2, M3, M4
M2                                  M2L1             T          M1, M3, M4
M1L1                                  null           M1         M1L2

Children / Parent / Siblingの関係に挿入するために、AppendSet(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html)を使用することを考えていました

このアプローチでは、ほとんどのクエリが可能ですが、たとえばDDBを2回呼び出す必要がある場合があります。たとえば、Tが与えられたすべての子のリストを取得する場合、つまりTの場合はM1、M2、M3、M4を取得します。次に、M1、M2、M3、M4のバッチ取得を実行します。

ただし、このアプローチの問題は私のプットです。データベースに挿入するときは、複数の行で更新する必要があります。また、私はおそらく素晴らしいとは言えないかもしれないインデックスを使用していません。私はこれに間違った方法でアプローチしていますか?

ご多幸を祈る

これは、1GSIを使用して解決できます。あなたは次のようにテーブルを持つことができます

| Node | Level | parent   |
|   T  |   0   |   NOT    |
|   M1 |   1   |   T      |
|   M2 |   1   |   T      | 
|   M3 |   1   |   T      | 
|   M4 |   1   |   T      | 
| M1L1 |   2   |   M1#T   |
| M1L2 |   2   |   M1#T   |
 ... so on

GSIの主キーとしてノード、レベル、主キーとして親、ソートキーをそれぞれ持っています。

ユースケースは次のようになります(これらはSQLのような構文であり、SDKから簡単にdynamodbクエリに移植できます)

  1. *ここでlevel = xを選択します

  2. Node = xであるParentを選択します

  3. スキャンみたい?

  4. スキャンみたい?

  5. *ここでlevel = xを選択します

  6. 選択*ここで(レベル)=(レベル)m1 +1 if you need all children

*を選択します。ここで(レベル)=(レベル)m1 +1で、親はM1で始まります if you need all children of M1

  1. Node = xであるParentを選択します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

iPhoneで構造のようなツリーを作成する

分類Dev

フラットなデータ構造をツリーのような構造に変換するにはどうすればよいですか?

分類Dev

配列をツリーのような構造に動的に変換します

分類Dev

ツリーのようなデータ構造を作成する方法

分類Dev

ツリーのような構造からノードを削除する

分類Dev

ツリーのような構造で障害の原子性を確保する

分類Dev

RxAndroidを使用してツリーのような構造を生成する

分類Dev

構造のようなツリーから親IDを返す

分類Dev

JavaScript: `eval`を使用せずにフラット配列をツリーのような構造に変換する

分類Dev

パス文字列から構造のようなツリーを取得する

分類Dev

bashでツリーのような構造を連結して操作する

分類Dev

データテーブルをツリーのようなクラス構造に変換する

分類Dev

テキストファイルをツリーのようなデータ構造に解析する

分類Dev

JavaScriptの構造のような多次元ツリーにアイテムをプッシュする

分類Dev

JavaScriptのフォルダ構造のようなツリーにjsonを変換する方法

分類Dev

PHPのツリーのようなデータ構造から要素の最後のレベルを取得するにはどうすればよいですか?

分類Dev

フラットリストをネストされたツリーのような構造に変換するにはどうすればよいですか?

分類Dev

Elasticsearchにツリーを保存するための最良の構造?

分類Dev

iOSでツリー構造のような拡張可能なテーブルビューを作成する方法

分類Dev

Nstableview for OSXでツリービューのような構造を作成するにはどうすればよいですか?

分類Dev

ツリーのような構造の完全なリストを再帰的に印刷するいくつかの問題があります

分類Dev

データを分類してツリーのような構造を取得する方法

分類Dev

ツリーのような構造の最長のサブパスを取得する

分類Dev

html / css / javascriptで構造のようなツリーを作成します

分類Dev

JSONをカスタムの「ツリーのような」ファイル構造に解析します

分類Dev

Rでツリーのような人間が読めるオブジェクト構造を出力する方法

分類Dev

Angular:データ構造のようなツリーを変換するHTTPクライアント

分類Dev

対応する情報のいくつかの配列をクラスとサブクラスのツリーのような構造に変換する

分類Dev

javascriptはネストされた辞書を配列構造のようなツリーに変換します

Related 関連記事

  1. 1

    iPhoneで構造のようなツリーを作成する

  2. 2

    フラットなデータ構造をツリーのような構造に変換するにはどうすればよいですか?

  3. 3

    配列をツリーのような構造に動的に変換します

  4. 4

    ツリーのようなデータ構造を作成する方法

  5. 5

    ツリーのような構造からノードを削除する

  6. 6

    ツリーのような構造で障害の原子性を確保する

  7. 7

    RxAndroidを使用してツリーのような構造を生成する

  8. 8

    構造のようなツリーから親IDを返す

  9. 9

    JavaScript: `eval`を使用せずにフラット配列をツリーのような構造に変換する

  10. 10

    パス文字列から構造のようなツリーを取得する

  11. 11

    bashでツリーのような構造を連結して操作する

  12. 12

    データテーブルをツリーのようなクラス構造に変換する

  13. 13

    テキストファイルをツリーのようなデータ構造に解析する

  14. 14

    JavaScriptの構造のような多次元ツリーにアイテムをプッシュする

  15. 15

    JavaScriptのフォルダ構造のようなツリーにjsonを変換する方法

  16. 16

    PHPのツリーのようなデータ構造から要素の最後のレベルを取得するにはどうすればよいですか?

  17. 17

    フラットリストをネストされたツリーのような構造に変換するにはどうすればよいですか?

  18. 18

    Elasticsearchにツリーを保存するための最良の構造?

  19. 19

    iOSでツリー構造のような拡張可能なテーブルビューを作成する方法

  20. 20

    Nstableview for OSXでツリービューのような構造を作成するにはどうすればよいですか?

  21. 21

    ツリーのような構造の完全なリストを再帰的に印刷するいくつかの問題があります

  22. 22

    データを分類してツリーのような構造を取得する方法

  23. 23

    ツリーのような構造の最長のサブパスを取得する

  24. 24

    html / css / javascriptで構造のようなツリーを作成します

  25. 25

    JSONをカスタムの「ツリーのような」ファイル構造に解析します

  26. 26

    Rでツリーのような人間が読めるオブジェクト構造を出力する方法

  27. 27

    Angular:データ構造のようなツリーを変換するHTTPクライアント

  28. 28

    対応する情報のいくつかの配列をクラスとサブクラスのツリーのような構造に変換する

  29. 29

    javascriptはネストされた辞書を配列構造のようなツリーに変換します

ホットタグ

アーカイブ