2

MongoDB を使用しており、さまざまなツリーを格納したいと考えています。

  • ツリーを格納する 1 つの方法は、各ノードをその子/親/祖先への参照を含むドキュメントとして格納することです (ここで説明したように) 。

  • それを保存する他の方法は、子をサブドキュメントとして持つ 1 つのドキュメントとしてツリー全体を保存することです。例えば

    tree : {
        "title" : "root",
        "children" : [
            {
                "title" : "node_1",
                "children" : [
                    ...
                ]
            },
            {
                "title" : "node_2",
                "children" : [
                    ...
                ]
            }
        ]
    }
    

質問:樹木の保管にはどの方法が推奨されますか?

データに対して実行したい操作は次のとおりです。

  • ノードを追加する
  • ノードを削除する
  • ノードを更新する
  • ツリー全体のjsonを取得する

このツリーをJsTreeを使用して UI に表示することを計画しているため(JsTree のより良い代替手段をお勧めします)、ネストされた形式 (方法 2) の json データを想定しているため、方法 1 ではなく同じ方法でデータを保存することを考えました。

方法 1 で json データを db に保存する場合、各ドキュメント/ノードの Java オブジェクトをマップし、各親を対応する子にポイントして Java でツリー オブジェクトを手動で作成し、その java- を変換する必要があります。 tree-object を json に戻して、ネストされた json を取得します。

各ノードの Java オブジェクトは次のようになります。

class Node {
    private String title:
    private List<Node> children;
}
4

1 に答える 1

4

ツリー内のネストされたノードのさまざまなレベルで多くの操作を行っているようです。MongoDBはあなたが説明したような構造を保存できますが、多くのネストされたレベルで更新を行うことはあまり得意ではありません.

したがって、各ノードを独自のドキュメントとして保存し、親子関係を保存する場所を確認することをお勧めします。データ操作のためにスキーマを最適化することを忘れないでください。この場合、私はあなたの「方法1」に行きます。ツリーをあまり変更する必要がなく、ツリーへの読み取り操作が書き込み操作よりも 1000 倍多いと言う場合は、「方法 2」の使用を検討し、ノードを一度に更新するために必要な余分な作業に対処することができます。いくつかのレベルの深さ。

于 2013-07-13T16:01:38.857 に答える