は自分自身にこれらの質問を、あなたのアプリケーションのための最善の方法を見つけるために:
a)ユーザコレクションハイまたはロー上の書き込み(更新)クエリのNRはありますか? (おそらく低いです)
b)ポストコレルレの読み取りクエリのnrが高いか低いか(おそらく高い)
c)(ユーザー)データの一貫性はどれくらい重要ですか?
MongoDBでは、非正規化が一般的なアプローチです。 書き込みのnrがnrの読み出しと比較して少ない場合、データを埋め込むことによるデータの非正規化はより良い読み出し性能をもたらすが、書き込み性能が遅くなり、より多くの場所で書き込む必要が生じる。 mongodbの書き込みは、単一のドキュメントに書き込む場合にのみアトミックではないため、データの矛盾が発生する可能性があることに注意してください。
ソリューション#1を選択すると、ユーザーコレクションに対する他の読み取りクエリを作成する必要があるため、記事の読み取り速度が遅くなります。データの一貫性が保証され、柔軟性も向上します。
ソリューション#2を選択すると、すべてがそこにあり、埋め込まれているため、1つのクエリでより速く読むことができます。しかし、ユーザークエリの更新が遅くなります。このソリューションでは、データの一貫性は保証されていませんが、更新の不一致を後で処理できる場合、これは大きな問題ではないかもしれません。 ここには、ユーザーデータだけでなく、ユーザー名(および_id)など、ユーザーデータの必要な部分だけを埋め込むことができます。
非常に大きなデータセットを持ち、ユーザーコレクションの更新が少ない非常に大きなデータセットがある場合、投稿コレクションの読み込み量が多く、ユーザーデータに不一致が含まれる可能性があります。重要ではなく、後で修正できますより良い解決策は、パフォーマンスに関して2番です。
スキーマデザインに関する興味深い記事は、hereにあります。
リレーショナルデータを格納する最も良い方法は、リレーショナルデータベースに格納することです。 – Federkun
@Federkunあなたは最初の方法が良いという意味ですか? – Ghorbanzadeh
あなたはすでに第一の選択肢に行くことに同意しています..そして私にもよると、第一は良いです –