0

mongoDBに埋め込まれた関係について質問があります。

たとえば、次のようなデータ構造がある場合:

company
- company_members
- company_clients
- company_templates
-- company_templates_items

ここで埋め込みを使用する必要があるので、メンバー、クライアント、テンプレートは会社のコレクションに埋め込まれ、templates_itemsはcompany_templatesに埋め込まれます。または、ここで参照関係を使用する必要がありますか?

すべてが埋め込まれているときにdbquery-responseが大きすぎるかどうか疑問に思っているので、私はこれを求めていますか?

何かアドバイス?

ありがとう!

編集:

表の内容は、たとえば100社で、それぞれに15のクライアント、20のメンバー、4つのテンプレートがあり、それぞれに10のアイテムがあります。

すべてがテキストです。

4

1 に答える 1

1

あなたの編集からの追加情報があっても、判断するのは難しいです。私たちはあなたが何を達成したいのかを知る必要があります。私が何を意味するのかを説明するための2つのオプションを紹介します。それから、自分にとって何が正しいかを推測できると思います。

元。A:ある種のイエローページのWebサイトを構築しています

たとえば、企業とそのクライアントの一部を、その作業のサンプルとともに一覧表示するWebページを作成するとします。データは主に読み取られます。情報を変更できるのは、ログインして一部のデータを変更できる顧客(それぞれの会社の従業員)だけです。変更はあまり頻繁に発生せず、バージョンの競合はありません。

その場合、埋め込みは問題ありません。おそらくその情報を一緒に表示したいので、情報の量はキラーではなく、ライターは1人だけです。

元。B:SaaSプロジェクト管理ソリューションを構築しています

会社の従業員は、ログインしてクライアントを管理し、ユーザーを追加または削除し、プロジェクトテンプレートを作成/読み取り/更新/削除(CRUD)することができます。多くの人が同時にログインできます。

company_templates_itemsその場合、おそらく埋め込まれるべきである場合を除いて、上記のどれもありません。


ガイドラインとして、次のことを考慮してください。コレクションアイテムがさまざまなユーザーによってCRUD操作を受ける可能性があり、さまざまなオブジェクトを(ビジネス上の意味で)問題なく同時に編集できる場合は、埋め込みを行わないでください。たとえば、Janeが顧客を編集し、Mikeが新しいプロジェクトを作成している間に、Jimが新しい顧客を追加しても問題はありません。これらすべての操作を同じオブジェクトに書き込む必要がある場合は、コードで非常に注意して、2回失われたり、上書きされたり、追加されたりしないようにする必要があります。

$push、などを使用してこれらの操作をアトミックにすることもできます$pullが、並べ替え、検索、更新はより複雑です。一般に、コレクションには、埋め込まれたドキュメントよりも多くの機能があります。

于 2012-06-07T12:18:59.627 に答える