MongoDB #4
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

مدل کردن داده در MongoDB
داده در MongoDB شمای منعطفی دارد. سندها در یک مجموعه به تعدادی از فیلدها با ساختاری شبیه به هم نیازی ندارند و فیلدهای مشترک در یک سند مجموعه ممکن است نوع‌های داده‌ی متفاوتی را نگهداری کنند.

برخی ملاحظات هنگام طراحی شمای در MongoDB
  • شمای خود را بر اساس نیازمندی‌های کاربر طراحی کنید.
  • آبجکت هایی را که از آنها باهم استفاده می‌کنید، داخل یک سند ترکیب کنید؛ درغیر اینصورت آنها را جدا کنید (اما مطمئن شوید که نباید نیازی به استفاده از Join باشد).
  • داده را بصورت محدود تکثیر کنید؛ چون فضای دیسک ارزانتر است از محاسبه زمان.
  • عمل Join را هنگام ذخیره کردن انجام دهید، نه موقع خواندن.
  • شمای خود را برای بیشترین موارد استفاده بهینه کنید.
  • تجمع‌های پیچیده (Complex Aggregation) را در شمای انجام دهید.

مثال
فرض کنید یک کاربر نیاز به طراحی یک پایگاه داده برای وب سایت خود دارد. تفاوت‌های طراحی شمای بین RDBMS و MongoDB را در ادامه ملاحظه خواهید کرد. وب سایت نیازمندهای زیر را دارد:
  • هر پست یک عنوان یکتا، توضیحات و آدرس اینترنتی دارد.
  • هر پست می‌تواند یک یا چند برچسب داشته باشد.
  • هر پست نام نویسنده و تعداد Like‌ها را دارد.
  • هر پست تعدادی نظر معین را توسط کاربران همراه با نامشان، پیام، تاریخ ثبت و تعداد Likeها، دارد.
  • در هر پست صفر یا چند نظر وجود دارد.
در طراحی شمای توسط RDMBS برای نیازمندی‌های فوق، حداقل سه جدول نیاز است. 

درحالیکه در طراحی شمای توسط MongoDB یک مجموعه از پست را با ساختار زیر خواهیم داشت:
{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}
بنابراین هنگام نمایش داده در RDBMS نیاز به تهیه Join بین سه جدول دارید؛ اما در MongoDB داده‌ها از یک مجموعه نمایش داده خواهند شد.