2

シンプルな RSS リーダー Web アプリケーションを使って CouchDB を学ぼうとしています。要件は次のとおりです。

  • 各ユーザーが X フィードを自分のリストにインポートできるようにする
  • ユーザーは各フィードにタグを追加できます
  • フィードごとに、データベース内の最新の 50 件の記事のリストを維持します

  • ユーザーは、購読しているフィードに新しいアイテムが追加されるたびに、更新を取得する必要があります。

さまざまなガイドと、関連する素晴らしい質問であるCouchDBドキュメントのモデリングの原則を読んだ後、それがどのように構造化されると思いますか:

  • フィード

    • 名前
    • 最終更新
  • 記事

    • フィード ID
    • 題名
    • 文章
  • ユーザー

    • ID
    • フィード: [フィード 1、フィード 2]
    • Tags: {funny: [article, article2]} // #userid #articleid #tagname を持つ新しいデータベースでしょうか?

次に、ユーザーごとにフィードごとの記事を含むビューを作成し、それにタグを追加して UI に表示します。

私はここで正しい軌道に乗っていますか?これをどのように構成しますか?

4

2 に答える 2

0

あなたのデザインは CouchDB にはあまり適していないと思います。特に、(主に記事タグを更新するために) ユーザー ドキュメントを頻繁に更新する必要があり、ユーザー ドキュメントは時間の経過とともに非常に大きくなるように思われるためです。

実際、RSS リーダー モデルでの対話により、この問題は CouchDB にはあまり適していません。ユーザーごとのタグを保持する必要があり、(a) ユーザー ドキュメントを常に更新する必要があるため、それらをユーザー ドキュメントに保持したくない (b) それらを記事に保持したくない記事のドキュメントを常に更新する必要があるためです。

私の理想的なソリューションには、ユーザーごとのデータベースが含まれると思います。これにより、問題が扱いやすくなります。フィード ドキュメントと記事ドキュメントがあり、記事ドキュメントにユーザー タグを保持するだけです。(すべてのユーザー データベースに記事を保存する必要があるため) かなりの重複がありますが、少なくともクエリは簡単 (かつ比較的高速) です。

于 2013-05-16T10:38:35.727 に答える
0

お気づきかもしれませんが、NoSQL は使用シナリオに基づいた妥協がすべてです。ある時点で、ビューとクエリを作成する必要があり、すべてに適合する 1 つの設計はありません。

あなたのシナリオでは、各フィードには最新の 50 件の記事しかないため、記事はすぐに無関係になると述べました (関連するデータも同様です)。したがって、タグを User モデルに保存する場合、ユーザー オブジェクトを 3 回更新する必要があります。1ユーザーが記事にタグを付けたとき、ユーザーがタグ2を削除した3とき、記事が古くなって削除されたときです。3不可避です。

記事とともにタグが削除されるように、記事にタグを保存することをお勧めします。

  • フィード

    • 名前
    • 最終更新
  • 記事

    • フィード ID
    • 題名
    • 文章
    • タグ: { "tag-1" : [ "user1", "user2", ... ], "tag2" : [ "user3", "user4", ... ] }
  • ユーザー

    • ID
    • フィード: [フィード 1、フィード 2]

ユーザーごとにグループ化されたタグを保存していることがわかります。{ "user1" : "tag1", "user2" : "tag1", "user3" : "tag2", "user4" : "tag2", ... }これが処理に役立つと思われる場合は、逆のこともできます (フィルタリング要件に基づいて)。

于 2013-05-21T21:29:01.883 に答える