1

私は c# と mongoDB を使用しています。データベースをバックエンドとして使用するシステムの経験が豊富です。自分の考え方を理解し、変えようとしており、データベース モデリングの観点から考えるのをやめ、モデル化の方法についてもっと考えようとしています。 NoSqlで。

小さな DB スキーマと、それが mongoDB にどのように変換されるかについて知りたいことを説明します。

これはフリーランスのウェブサイトの典型的なケースです: (アイデアを得るための非常に小さなケースです) サイトには、システム内に営業担当者、管理者、ユーザー、企業などの 4 つの異なるタイプのユーザーが含まれます。

ユーザーは、会社から投稿された仕事に適用できる画像、Web サイト、ドキュメントなどのさまざまな種類のメディア コンテンツを含むプロファイルを投稿できるようになります。ユーザーは、ユーザーになる友人を持つこともできます。

tables:
 -Users
       1to1 -Roles
       1to1 -Candidate       
                       1toM -MediaFile (for the profile)
                                       1to1 -MediaType (file, web, etc)
                       1toM - JobApplications - Mto1 Job (many to many relationship)
       1to1 -Company
                       1toM Jobs
       1toM - Friends (Users)
4

1 に答える 1

0

サンプルの mongodb スキーマを次に示します。

User
{
   _id: 1,
   Roles : [],
   Candidate: {
      HourlyRate: "0.00",
      Portfolio: [
         {
            Title: "",
            MediaFiles: [
              {
                Type: "File"
              }
            ]
         }
      ]
   },
Company: {
     Id: "1",
     Name: ""
   },
Friends: [
    {
      Id: "1",
      FullName: ""
    }
   ]
}


Company
{
  _id: "1",
  Name: ""
}

Job
{
  _id: "1",
  Title: ""
}

Application
{
  _id: "1",
  JobId: "1",
  UserId: "1",
  ApplicantFullName: ""
}

いくつかの基本的なルール:

  1. 可能な限り埋め込みます。読み取りパフォーマンスが向上し、データベースへの単一の要求でデータを読み取ることができます。埋め込むかどうかの選択は、通常、データがどのように成長し、時間の経過とともに変化し、どのようにクエリを実行するかによって決まります。あなたの場合、Friends を埋め込みました (フリーランサーのサイトは facebook ではないので、それほど大きなコレクションにはならないと思います :))。また、ポートフォリオ アイテムとメディア ファイルをユーザー プロファイルに埋め込みました。通常、ポートフォリオは 10 を超えません。

  2. クエリを高速化するために、データの非正規化を検討してください。私たちの場合、フリーランサーのプロフィールに何人かの友人を表示する必要があると想定したので、FullName を非正規化しました。また、ユーザー プロファイルに関連付けられた会社が常に表示されると思います。そのため、ComanyName をユーザーに非正規化しました。

いくつかのメモ:

  1. 非正規化により、常に書き込みのオーバーヘッドがいくらか追加されますが、読み取り速度は向上します。あなたの場合、書き込みよりも読み取りが多く、非正規化が頻繁に使用されると想定しました。

  2. データを読み取るときに、フィールドが不要な場合は、オブジェクトからフィールドを除外することを検討してください。たとえば、フリーランサーのリストを表示する必要があり、友人やポートフォリオをあまり気にしない場合は、それらを除外します。これにより、データベースとアプリの間で転送する必要があるデータの量が減少し、逆シリアル化が高速化されます。

次は何ですか?mongodbサイトで入手可能なドキュメントを参照してください。mongodb カンファレンスまたはローカルの mongodb グループ ミートアップに参加することを検討してください。

その助けを願っています!

于 2013-08-03T06:55:23.607 に答える