2011-01-08 10 views
5

私はバックエンドとして非リレーショナルデータベースを使用するWebアプリケーションを開発しています(django-nonrel + AppEngine)。 いくつかの階層的なデータ(projects/subproject_1/subproject_N/tasks)を格納する必要があります。どのパターンを使用すべきか疑問に思っています。 (アイテムの親IDを保存) 非リレーショナルデータベースの階層データに関する推奨事項?

  • ネストされたセット(ストアは左と右の値項目の)私の場合は
  • 、ネストの深さ

    • 隣接リスト:今のところ私は考え通常のユーザーは4〜5レベルを超えません。 また、UIの最初のページの読み込み時にあまりにも多くのアイテムを読み込まないように、最初のレベルのアイテムのページ番号を付けたいと思います。

      これまでの説明から、ネストしたセットは、階層が表示にもっと使用されている場合に優れています。隣接リストは、ツリー上での編集が頻繁に行われるときに有効です。私の場合は、編集より表示が必要なのではないかと推測されます(ネストされたセットを使用すると、表示がうまくいく場合でも上記のページ設定は編集上の問題を複雑にする可能性があります)。

      あなたは、非リレーショナルデータベースでの経験に基づいて、考えや助言をお持ちですか?

    答えて

    1

    どのように保存するかは、クエリの必要性によって異なります。たとえば、親の直接の子を見つける必要がある場合は、おそらく隣接リストのモデルが最もシンプルです。サブツリー全体を列挙したい場合は、祖先リストまたはネストされたセットがうまく機能しますが、App Engineのネストされたセットは避けます。

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

    0

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

    あなたは正確な問題は何ですか?