2

私は仕事のためにmongodb/redisを試しています。たとえば、ブログを想定して、このシナリオを検討しています。

主に次のクエリを実行する予定です。

  1. 特定のユーザーによる投稿を一覧表示する
  2. 特定のユーザーによるコメントの一覧表示
  3. 特定のカテゴリに基づいて投稿を一覧表示する
  4. 1 つの投稿とそのコメントを表示する

注: Redis は、userid<->username マッピングを保存するために使用されます。

これは優れた/柔軟なスキーマ設計ですか? 将来の計画は、投稿/コメントの評価を追加することです.

役職

  • _id
  • 著者 (db-ref: user._id; index )
  • コンテンツ
  • カテゴリ (インデックス)

ユーザー

  • _id
  • ユーザー名 (一意のインデックス)
  • パスワードハッシュ

コメント

  • _id
  • 投稿 (db-ref: post._id; index )
  • 著者 (db-ref: author._id; index )

評価/投票の追加

役職

  • _id
  • 著者 (db-ref: user._id; index )
  • コンテンツ
  • カテゴリ (インデックス)
  • 票(数)

ユーザー

  • _id
  • ユーザー名 (一意のインデックス)
  • パスワードハッシュ

コメント

  • _id
  • 投稿 (db-ref: post._id; index )
  • 著者 (db-ref: author._id; index )
  • 票(数)

コメント投票

  • _id = 作成者.Id (キー)
  • 投票: [comment._id, comment._id, ...]

投票する

  • _id = 作成者.Id (キー)
  • 投票: [post._id, post._id]

どう思いますか?それとも私はただのナッツですか?

4

2 に答える 2

2

あなたはまだ関係性を考えていると思います。私は、ドキュメント データ オブジェクトを、ある人形を別の人形にリンクできるリンク (スレッド?) を持つロシアの人形と考えるのが好きです。あなたの場合:

  • ユーザー人形
    • ユーザー名
    • Eメール
    • パスワードハッシュ
    • PostUpvotes (投稿 ID のリスト)
    • CommentUpvotes (コメント ID のリスト)
  • 投稿人形
    • コメントドール(コメント一覧)
      • コメント
        • ユーザーID
        • ユーザー名
        • 総投票数 (int)
        • コメントID
    • 総投票数 (int)
    • カテゴリ ID (リスト) (1 つの投稿に複数の ID を含めることはできますか?)
    • 著者ID
  • カテゴリ 人形

コメントや投稿に対する投票をユーザー オブジェクトに入れ、map/reduce を使用して 15 分程度ごとにカウントを取得することができます (これは、map/reduce の「標準的な」使用法です)。賛成票の重要な点は、ユーザーが 2 回投票できないことです。そのため、賛成票を User オブジェクトに保持する方が理にかなっています (ユーザーが投稿に既に投票したかどうかを確認するためにインデックスをヒットする必要はありません)。投稿ごとの実際の賛成票数はそれほど重要ではないため、投稿に保持して定期的に更新することができます。

于 2012-08-02T16:16:05.703 に答える
1

これらの問題に対処するスキーマ設計の例については、次を参照してください。

于 2012-08-02T16:28:54.507 に答える