2

このデータモデルのタグ部分を構造化する方法に関するいくつかの推奨事項を探しています。

これを簡略化したものを次に示します。

  • サイトには多くの投稿があります(リレーショナルアソシエーション[mongoidのreferences_many])。サイトにはタグのツリーがあります
  • 投稿にはタグの配列があります(サイトのタグのサブセット、順序は関係ありません)

私が気にかけているユースケースは次のとおりです。

  1. サイトのタグをツリー形式ですばやく保存および取得します(つまり、UIでツリーとして表示できるようにします)
  2. サイトのどの投稿に特定のタグが付いているかをすばやく照会します。

ツリー構造がなければ、 http: //github.com/wilkerlucio/mongoid_taggableは私のユースケースを解決します。Mongoidのacts_as_treeポートのいくつかを次のように見ました。

それらはすべて、階層を格納するために、埋め込まれているのではなく、リレーショナルアプローチを採用しているようです。これは、上記の両方のユースケースが遅いことを意味します(マップ/リデュースが必要になる可能性があります)。

誰かが似たようなことをしたか、何かアドバイスがありますか?理想的にはMongoidソリューションが大好きですが、Rubyドライバーにもドロップダウンできてうれしいです。

4

2 に答える 2

2

ツリーの構造を更新する必要がありますか(つまり、タグを別の親に移動する)?それが可能であれば、埋め込まれたアプローチは難しくなり、リレーショナル/正規化されたアプローチの方が理にかなっています。

タグ自体をドキュメント(埋め込み)に保存する可能性がありますが、ツリーノードをオンラインで移動する必要がある場合は、階層を別のドキュメントに保存します。最初に(現在のツリーに従って)検索クエリをフラット化してから、それらのタグを検索する場合は、クエリを遅くする必要はありません。平坦化された検索クエリに数百のタグが含まれることになった場合、このアプローチはおそらくうまく拡張できません(ツリーの高さはどれくらいですか?)。

タグを新しい親に移動できない場合(または定期メンテナンス中に自分だけが移動できない場合)は、先に進んで階層全体を埋め込みます。

于 2010-09-21T06:08:13.467 に答える
0

mongodbツリー構造には2つの実装パターンがあります

于 2010-10-08T08:51:05.333 に答える