5

非リレーショナルデータベースをバックエンドとして使用するWebアプリケーション(django-nonrel + AppEngine)を開発しています。いくつかの階層データ(projects / subproject_1 / subproject_N / tasks)を保存する必要があり、どのパターンを使用すべきか疑問に思っています。今のところ私は考えました:

  • 隣接リスト(アイテムの親IDを保存します)
  • ネストされたセット(アイテムの左右の値を格納します)

私の場合、通常のユーザーのネストの深さは4〜5レベルを超えません。また、UIでは、最初のページの読み込み時にあまりにも多くのアイテムを読み込まないように、最初のレベルのアイテムにページ番号を付けたいと思います。

これまでのところ、階層を表示に使用する場合、ネストされたセットは優れています。ツリーでの編集が頻繁に行われる場合、隣接リストは最適です。私の場合、編集よりも表示が必要だと思います(ネストされたセットを使用する場合、表示がうまく機能する場合でも、上記のページ付けによって編集が複雑になる可能性があります)。

非リレーショナルデータベースでの経験に基づいて、何か考えやアドバイスはありますか?

4

2 に答える 2

1

それらをどのように保存するかは、それらをどのように照会する必要があるかによって異なります。たとえば、親の直接の子を検索するだけでよい場合は、隣接リストモデルがおそらく最も簡単です。サブツリー全体を列挙する場合は、祖先リストまたはネストされたセットが適切に機能しますが、AppEngineではネストされたセットは避けます。

ツリー内のすべてのオブジェクトに対してトランザクションの整合性が必要であり、ツリー全体を1秒間に数回以上更新しない場合は、エンティティグループと祖先に対するAppEngineのサポートを調べる必要があります。

于 2011-01-11T23:54:24.483 に答える
0

SQLServerを使用して非リレーショナルデータを格納しました。SQL Serverには、hierarchyIDと呼ばれるこれらのものがあります。これにより、このほとんどが透過的になります。

あなたが抱えている正確な問題は何ですか?

于 2011-01-12T00:20:03.310 に答える