0

MongoDB を使い始めたばかりで、リスト プロパティを使用してオブジェクト モデルを構築することに混乱しています。ユーザーIDのリストであるFollowersとFollowingオブジェクトに関連するUserモデルがあります。そのため、関係を表すオブジェクト モデル構造をいくつか考えることができます。

  1. 埋め込みドキュメント。Followers と Following は User モデルに埋め込まれます。このように、多くの Web フレームワークではすべてのリクエストで「current_user」オブジェクトが生成されます。また、ほとんどのリクエストでこれらのプロパティを使用することはめったにないため、Follower および Following リスト プロパティをシリアライズ/デシリアライズすることは余分なオーバーヘッドです。「current_user」が生成されるときに、これらのプロパティを除外できます。ただし、更新を行う前に、完全な「current_user」オブジェクトを再度フェッチする必要があります。

  2. User モデルで参照プロパティを使用します。埋め込みではなく、フォロワーとフォロー中のオブジェクトモデル自体を持つことができますが、ユーザーオブジェクトへの参照を保存します。

  3. Followers および Following モデルで参照プロパティを使用します。後でクエリを実行するために、ユーザー ID を Follower および following プロパティに保存できます。

それを行うには、他の方法、使いやすい方法、またはパフォーマンスを向上させる方法があるかもしれません。私の質問は
、いくつかの関連リスト プロパティを持つモデルを設計するための推奨される方法は何ですか?

4

1 に答える 1

1

SQL の世界から来た人々 (私自身など) にとって、MongoDB について学ぶのが最も難しいことの 1 つは、新しいスタイルのスキーマ設計です。SQL の世界では、すべてが第 3 正規形になります。人々は、スキーマを設計する正しい方法は 1 つしかないと考えるようになります。通常は 1 つあるからです。

MongoDB の世界では、最適なスキーマ設計はありません。より正確には、MongoDB のスキーマ設計は、アプリケーションがデータにアクセスする方法によって異なります。

以下は、MongoDB の適切なスキーマを設計するために回答する必要がある重要な質問です。

  • どのくらいのデータを持っていますか?
  • 最も一般的な操作は何ですか? 主に新しいデータの挿入、既存のデータの更新、またはクエリの実行を行いますか?
  • 最も一般的なクエリは何ですか?
  • 最も一般的なアップデートは何ですか?
  • 1 秒あたり何回の I/O 操作が予想されますか?

1 対多のオブジェクト関係を検討している場合、これらの質問がどのように展開されるかを次に示します。

SQL では、主キーと外部キーの関係を持つマスター/詳細テーブルのペアを作成するだけです。MongoDB では、多くの選択肢があります。データを埋め込む、リンクされた関係を作成する、データを複製して非正規化する、またはハイブリッド アプローチを使用することができます。

正しいアプローチは、アプリケーションのユースケースに関する多くの詳細に依存します。

以下は、MongoDB スキーマ設計に関する優れた一般的なリファレンスです。

MongoDB プレゼンテーション:

以下に、MongoDB スキーマ設計について役立つと思われる書籍を 2 冊紹介します。

いくつかのサンプル スキーマ設計を次に示します。

于 2012-09-13T22:48:54.810 に答える