2016-06-19 21 views
1

私はMySQLにもっと慣れていますが、私はこのプロジェクトでMongoDBに行くことにしました。 基本的にはソーシャルネットワークです。MongoDBコレクション - どちらの方が効率的でしょうか?

私はドキュメントが現在のようになりポストコレクションがあります。

{ 
    "text": "Some post...", 
    "user": "3j219dj21h18skd2" // User's "_id" 
} 

を私が回答システムを実装するために探しています。単純にそうように、ユーザーが好きなの配列を追加した方がよいでしょう:

{ 
    "text": "Some post...", 
    "user": "3j219dj21h18skd2", // User's "_id" 
    "replies": [ 
    { 
      "user": "3j219dj200928smd81", 
      "text": "Nice one!" 
     }, 
     { 
      "user": "3j219dj2321md81zb3", 
      "text": "Wow, this is amazing!" 
     } 
    ] 
} 

それとも全体の別々の各応答のためのユニークIDと「回答」のコレクション、そして「リンク」を持っている方が良いでしょう投稿コレクションのIDでそれに?

私は確信していませんが、第1の方法は「NoSQL」のように感じられ、第2の方法はMySQLに行く方法です。

任意の入力を歓迎します。

答えて

1

これはMongoDBの典型的なデータモデリングの質問です。これらの返信は投稿オブジェクトの一部であるため、ユーザーのIDだけを格納する予定であるため、回答は間違いなく埋め込みます。

これらの返信が数百または数千になり、デフォルトで表示されない場合(たとえば、ユーザーがこれらのコメントをクリックして読み込むようにする場合)、別のコレクションで返信します。

最後に、ユーザー_id(名前など)以上を格納する必要がある場合は、データを複製する際に2箇所(ここではユーザー保守ページ)で名前を維持することを検討する必要があります。これは管理が容易であり、あまりにも多くの作業を行うことができます。あなたは決定する必要があります。

+0

お返事ありがとうございます。実際には私はIDを保存して、 "ユーザー"コレクションから(プログラムで)IDを取得して名前を表示するだけです。私は別のコレクション内のドキュメントにプロパティ値をバインドする方法はないと思います。非リレーショナルなのでです。右? –

+0

はい、そうです。しかし、NoSQLのデータモデリングのために、ユーザIDを持つユーザの名前を格納することを妨げるものは何もありません。ユーザーコレクションが更新されたときにその名前をプログラムで更新すると、2番目のテーブルの名前を参照する必要がなくなり、人生を愛することになります。もちろん、SQLサーバーで必要なのは結合ですが、データを埋め込むことで、ユースケースに合わせてその利点が示されます。 – Tiramisu

関連する問題